From a5f11edee389a1595572801cfa3118b3e17d0747 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Fri, 20 Feb 2026 17:17:00 +0200 Subject: [PATCH 01/14] chore: SOF-7756 Co-authored-by: Cursor --- .eslintrc.json | 52 +- .gitignore | 2 + .mocharc.json | 2 +- .../executables/espresso/abcoeff_to_eps.x.yml | 4 +- .../executables/espresso/average.x.yml | 10 +- .../executables/espresso/bands.x.yml | 10 +- .../executables/espresso/cp.x.yml | 6 +- .../executables/espresso/dos.x.yml | 8 +- .../executables/espresso/dynmat.x.yml | 4 +- .../executables/espresso/epsilon.x.yml | 8 +- .../executables/espresso/gw.x.yml | 24 +- .../executables/espresso/gww.x.yml | 4 +- .../executables/espresso/head.x.yml | 4 +- .../executables/espresso/hp.x.yml | 16 +- .../executables/espresso/matdyn.x.yml | 14 +- .../executables/espresso/neb.x.yml | 12 +- .../executables/espresso/ph.x.yml | 26 +- .../executables/espresso/pp.x.yml | 6 +- .../executables/espresso/projwfc.x.yml | 8 +- .../executables/espresso/pw.x.yml | 572 +-- .../executables/espresso/pw4gww.x.yml | 4 +- .../executables/espresso/q2r.x.yml | 4 +- .../executables/espresso/simple.x.yml | 4 +- .../executables/espresso/simple_bse.x.yml | 4 +- .../executables/espresso/simple_ip.x.yml | 4 +- .../executables/nwchem/nwchem.yml | 14 +- .../executables/python/python.yml | 96 +- assets/applications/executables/shell/sh.yml | 50 +- assets/applications/executables/vasp/vasp.yml | 272 +- .../input_files_templates/espresso/cp.j2.in | 18 +- .../espresso/cp_wf.j2.in | 18 +- .../input_files_templates/espresso/neb.j2.in | 38 +- .../espresso/pw_bands.j2.in | 18 +- .../espresso/pw_bands_dft_j_magn.j2.in | 18 +- .../espresso/pw_bands_dft_u_magn.j2.in | 18 +- .../espresso/pw_bands_dft_u_magn_legacy.j2.in | 18 +- .../espresso/pw_bands_dft_u_soc.j2.in | 18 +- .../espresso/pw_bands_dft_u_soc_legacy.j2.in | 18 +- .../espresso/pw_bands_dft_v_magn.j2.in | 18 +- .../espresso/pw_bands_magn.j2.in | 18 +- .../espresso/pw_bands_soc.j2.in | 18 +- .../espresso/pw_esm.j2.in | 18 +- .../espresso/pw_esm_relax.j2.in | 18 +- .../espresso/pw_md.j2.in | 18 +- .../espresso/pw_nscf.j2.in | 18 +- .../espresso/pw_nscf_dft_j_magn.j2.in | 18 +- .../espresso/pw_nscf_dft_u_magn.j2.in | 18 +- .../espresso/pw_nscf_dft_u_magn_legacy.j2.in | 18 +- .../espresso/pw_nscf_dft_u_soc.j2.in | 18 +- .../espresso/pw_nscf_dft_u_soc_legacy.j2.in | 18 +- .../espresso/pw_nscf_dft_v_magn.j2.in | 18 +- .../espresso/pw_nscf_magn.j2.in | 18 +- .../espresso/pw_nscf_soc.j2.in | 18 +- .../espresso/pw_relax.j2.in | 18 +- .../espresso/pw_scf.j2.in | 18 +- .../espresso/pw_scf_bands_hse.j2.in | 18 +- .../espresso/pw_scf_dft_j.j2.in | 18 +- .../espresso/pw_scf_dft_j_magn.j2.in | 18 +- .../espresso/pw_scf_dft_u.j2.in | 18 +- .../espresso/pw_scf_dft_u_legacy.j2.in | 18 +- .../espresso/pw_scf_dft_u_magn.j2.in | 18 +- .../espresso/pw_scf_dft_u_magn_legacy.j2.in | 18 +- .../espresso/pw_scf_dft_u_soc.j2.in | 18 +- .../espresso/pw_scf_dft_u_soc_legacy.j2.in | 18 +- .../espresso/pw_scf_dft_v.j2.in | 18 +- .../espresso/pw_scf_dft_v_magn.j2.in | 18 +- .../espresso/pw_scf_hse.j2.in | 18 +- .../espresso/pw_scf_kpt_conv.j2.in | 18 +- .../espresso/pw_scf_magn.j2.in | 18 +- .../espresso/pw_scf_soc.j2.in | 18 +- .../espresso/pw_vc_relax.j2.in | 18 +- .../espresso/pw_vc_relax_conv.j2.in | 18 +- dist/js/application.d.ts | 22 +- dist/js/application.js | 17 +- dist/js/cli.js | 24 +- dist/js/method.js | 2 +- dist/js/modelMethodFilter.js | 4 +- dist/js/runtime_data/applications.json | 2 +- .../applicationVersionsMapByApplication.json | 2 +- .../executableFlavorMapByApplication.json | 2 +- .../modelMethodMapByApplication.json | 2 +- .../applications/templatesList.json | 2 +- dist/js/runtime_data/materials.json | 2 +- dist/js/runtime_data/methods.json | 2 +- dist/js/runtime_data/models.json | 2 +- .../runtime_data/models/modelMethodMap.json | 2 +- dist/js/runtime_data/properties.json | 2 +- dist/js/runtime_data/subworkflows.json | 2 +- .../espresso/band_structure_magn.json | 361 +- dist/js/runtime_data/workflows.json | 2 +- .../workflowSubforkflowMapByApplication.json | 1 + .../workflowSubworkflowMapByApplication.json | 2 +- dist/js/types/application.d.ts | 25 +- dist/js/types/applicationFilter.d.ts | 10 +- dist/js/ui/methodTree.json | 2 +- dist/js/ui/modelTree.json | 2 +- dist/js/ui/schemas.json | 2 +- dist/js/utils/applicationFilter.d.ts | 2 +- dist/js/utils/applicationFilter.js | 2 +- dist/js/utils/applicationVersionMap.d.ts | 16 +- dist/js/utils/applicationVersionMap.js | 3 +- dist/js/utils/category.js | 5 +- dist/js/workflow.js | 2 +- package-lock.json | 3809 +++++++---------- package.json | 38 +- scripts/fix_kgrid_trailing_whitespace.py | 38 + scripts/generate_espresso_fixtures.ts | 265 ++ scripts/processors/WorkflowsProcessor.ts | 2 +- src/js/application.ts | 45 +- src/js/method.ts | 2 +- src/js/types/application.ts | 43 +- src/js/types/applicationFilter.ts | 14 +- src/js/utils/applicationVersionMap.ts | 13 +- src/js/workflow.ts | 10 +- tests/js/espressoTemplates.test.ts | 102 + tests/js/ts-node-register.js | 3 + 116 files changed, 3799 insertions(+), 3151 deletions(-) create mode 100644 dist/js/runtime_data/workflows/workflowSubforkflowMapByApplication.json create mode 100644 scripts/fix_kgrid_trailing_whitespace.py create mode 100644 scripts/generate_espresso_fixtures.ts create mode 100644 tests/js/espressoTemplates.test.ts create mode 100644 tests/js/ts-node-register.js diff --git a/.eslintrc.json b/.eslintrc.json index c5f08480..6d7a28ec 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,46 +1,20 @@ { - "extends": ["@exabyte-io/eslint-config"], + "extends": [ + "@exabyte-io/eslint-config" + ], + "ignorePatterns": [ + "dist/" + ], "settings": { "import/resolver": { "node": { - "paths": ["src/js"] - }, - "exports": {} - } - }, - "overrides": [ - { - "files": [ - "*.js", - "*.ts", - "*.tsx" - ], - "extends": [ - "@exabyte-io/eslint-config", - "eslint:recommended", - "plugin:@typescript-eslint/eslint-recommended", - "plugin:@typescript-eslint/recommended", - "plugin:import/typescript" - ], - "parser": "@typescript-eslint/parser", - "rules": { - "@typescript-eslint/ban-ts-comment": "off", - "import/no-absolute-path": "off", - "import/extensions": "off", - "react/forbid-prop-types": "off", - "react/jsx-filename-extension": "off", - "react/require-default-props": "off", - "no-use-before-define": "off", - "no-restricted-exports": "off", - "no-shadow": "off", - "@typescript-eslint/no-use-before-define": [ - "error" + "extensions": [ + ".js", + ".jsx", + ".ts", + ".tsx" ] - }, - "plugins": [ - "@typescript-eslint" - ] + } } - ], - "ignorePatterns": ["dist/*"] + } } diff --git a/.gitignore b/.gitignore index 201dc609..45771e1c 100644 --- a/.gitignore +++ b/.gitignore @@ -175,3 +175,5 @@ node_modules/ by_category .python-version + +.vscode/ diff --git a/.mocharc.json b/.mocharc.json index 053f84d5..2b5ba200 100644 --- a/.mocharc.json +++ b/.mocharc.json @@ -1,5 +1,5 @@ { "extension": ["ts", "js"], "spec": "tests/js/**/*.test*", - "require": "ts-node/register" + "require": "tests/js/ts-node-register.js" } diff --git a/assets/applications/executables/espresso/abcoeff_to_eps.x.yml b/assets/applications/executables/espresso/abcoeff_to_eps.x.yml index 31fea658..7099ac7d 100644 --- a/assets/applications/executables/espresso/abcoeff_to_eps.x.yml +++ b/assets/applications/executables/espresso/abcoeff_to_eps.x.yml @@ -1,5 +1,5 @@ monitors: - - standard_output + - name: standard_output results: [] flavors: abcoeff_to_eps_simple: @@ -7,6 +7,6 @@ flavors: - name: abcoeff_to_eps_simple.in results: [] monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: abcoeff_to_eps.x diff --git a/assets/applications/executables/espresso/average.x.yml b/assets/applications/executables/espresso/average.x.yml index 15bc7e54..5fc7b06c 100644 --- a/assets/applications/executables/espresso/average.x.yml +++ b/assets/applications/executables/espresso/average.x.yml @@ -1,14 +1,14 @@ monitors: - - standard_output + - name: standard_output results: - - average_potential_profile + - name: average_potential_profile flavors: average: input: - name: average.in results: [] monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: average.x @@ -16,8 +16,8 @@ flavors: input: - name: average.in results: - - average_potential_profile + - name: average_potential_profile monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: average.x diff --git a/assets/applications/executables/espresso/bands.x.yml b/assets/applications/executables/espresso/bands.x.yml index a149c8cd..55420ba4 100644 --- a/assets/applications/executables/espresso/bands.x.yml +++ b/assets/applications/executables/espresso/bands.x.yml @@ -1,13 +1,13 @@ monitors: - - standard_output + - name: standard_output results: - - band_structure + - name: band_structure flavors: bands: input: - name: bands.in monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: bands.x @@ -15,7 +15,7 @@ flavors: input: - name: bands_spin_up.in monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: bands.x @@ -23,6 +23,6 @@ flavors: input: - name: bands_spin_dn.in monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: bands.x diff --git a/assets/applications/executables/espresso/cp.x.yml b/assets/applications/executables/espresso/cp.x.yml index c600efc8..90e97372 100644 --- a/assets/applications/executables/espresso/cp.x.yml +++ b/assets/applications/executables/espresso/cp.x.yml @@ -1,5 +1,5 @@ monitors: - - standard_output + - name: standard_output results: [] flavors: cp: @@ -8,7 +8,7 @@ flavors: - name: cp.in results: [] monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: cp.x @@ -17,6 +17,6 @@ flavors: - name: cp_wf.in results: [] monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: cp.x diff --git a/assets/applications/executables/espresso/dos.x.yml b/assets/applications/executables/espresso/dos.x.yml index 88891b1b..3a49ebbf 100644 --- a/assets/applications/executables/espresso/dos.x.yml +++ b/assets/applications/executables/espresso/dos.x.yml @@ -1,14 +1,14 @@ monitors: - - standard_output + - name: standard_output results: - - density_of_states + - name: density_of_states flavors: dos: input: - name: dos.in results: - - density_of_states + - name: density_of_states monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: dos.x diff --git a/assets/applications/executables/espresso/dynmat.x.yml b/assets/applications/executables/espresso/dynmat.x.yml index 97ba57bb..9f85a89c 100644 --- a/assets/applications/executables/espresso/dynmat.x.yml +++ b/assets/applications/executables/espresso/dynmat.x.yml @@ -1,5 +1,5 @@ monitors: - - standard_output + - name: standard_output results: [] flavors: dynmat: @@ -7,6 +7,6 @@ flavors: - name: dynmat_grid.in results: [] monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: dynmat.x diff --git a/assets/applications/executables/espresso/epsilon.x.yml b/assets/applications/executables/espresso/epsilon.x.yml index 0bf2aed6..8f22f5b3 100644 --- a/assets/applications/executables/espresso/epsilon.x.yml +++ b/assets/applications/executables/espresso/epsilon.x.yml @@ -1,14 +1,14 @@ monitors: - - standard_output + - name: standard_output results: - - dielectric_tensor + - name: dielectric_tensor flavors: dielectric_tensor: input: - name: epsilon.in results: - - dielectric_tensor + - name: dielectric_tensor monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: epsilon.x diff --git a/assets/applications/executables/espresso/gw.x.yml b/assets/applications/executables/espresso/gw.x.yml index 29b3c314..e1159d8e 100644 --- a/assets/applications/executables/espresso/gw.x.yml +++ b/assets/applications/executables/espresso/gw.x.yml @@ -1,19 +1,19 @@ monitors: - - standard_output + - name: standard_output results: - - band_structure - - fermi_energy - - band_gaps + - name: band_structure + - name: fermi_energy + - name: band_gaps flavors: gw_bands_plasmon_pole: input: - name: gw_bands_plasmon_pole.in results: - - band_structure - - fermi_energy - - band_gaps + - name: band_structure + - name: fermi_energy + - name: band_gaps monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: gw.x @@ -21,10 +21,10 @@ flavors: input: - name: gw_bands_full_frequency.in results: - - band_structure - - fermi_energy - - band_gaps + - name: band_structure + - name: fermi_energy + - name: band_gaps monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: gw.x diff --git a/assets/applications/executables/espresso/gww.x.yml b/assets/applications/executables/espresso/gww.x.yml index 45711dd0..0d633982 100644 --- a/assets/applications/executables/espresso/gww.x.yml +++ b/assets/applications/executables/espresso/gww.x.yml @@ -1,5 +1,5 @@ monitors: - - standard_output + - name: standard_output results: [] flavors: gww_simple: @@ -7,6 +7,6 @@ flavors: - name: gww_simple.in results: [] monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: gww.x diff --git a/assets/applications/executables/espresso/head.x.yml b/assets/applications/executables/espresso/head.x.yml index 59cd99dd..56c16a3a 100644 --- a/assets/applications/executables/espresso/head.x.yml +++ b/assets/applications/executables/espresso/head.x.yml @@ -1,5 +1,5 @@ monitors: - - standard_output + - name: standard_output results: [] flavors: head_simple: @@ -7,6 +7,6 @@ flavors: - name: head_simple.in results: [] monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: head.x diff --git a/assets/applications/executables/espresso/hp.x.yml b/assets/applications/executables/espresso/hp.x.yml index 985d5e24..d3c7d433 100644 --- a/assets/applications/executables/espresso/hp.x.yml +++ b/assets/applications/executables/espresso/hp.x.yml @@ -1,19 +1,19 @@ monitors: - - standard_output + - name: standard_output results: - - hubbard_u - - hubbard_v_nn - - hubbard_v + - name: hubbard_u + - name: hubbard_v_nn + - name: hubbard_v flavors: hp: input: - name: hp.in results: - - hubbard_u - - hubbard_v_nn - - hubbard_v + - name: hubbard_u + - name: hubbard_v_nn + - name: hubbard_v monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: hp.x supportedApplicationVersions: diff --git a/assets/applications/executables/espresso/matdyn.x.yml b/assets/applications/executables/espresso/matdyn.x.yml index 934af78e..5ac388bf 100644 --- a/assets/applications/executables/espresso/matdyn.x.yml +++ b/assets/applications/executables/espresso/matdyn.x.yml @@ -1,16 +1,16 @@ monitors: - - standard_output + - name: standard_output results: - - phonon_dos - - phonon_dispersions + - name: phonon_dos + - name: phonon_dispersions flavors: matdyn_grid: input: - name: matdyn_grid.in monitors: - - standard_output + - name: standard_output results: - - phonon_dos + - name: phonon_dos applicationName: espresso executableName: matdyn.x @@ -18,8 +18,8 @@ flavors: input: - name: matdyn_path.in monitors: - - standard_output + - name: standard_output results: - - phonon_dispersions + - name: phonon_dispersions applicationName: espresso executableName: matdyn.x diff --git a/assets/applications/executables/espresso/neb.x.yml b/assets/applications/executables/espresso/neb.x.yml index df1a329f..e52dd65f 100644 --- a/assets/applications/executables/espresso/neb.x.yml +++ b/assets/applications/executables/espresso/neb.x.yml @@ -1,17 +1,17 @@ monitors: - - standard_output + - name: standard_output results: - - reaction_energy_barrier - - reaction_energy_profile + - name: reaction_energy_barrier + - name: reaction_energy_profile flavors: neb: isMultiMaterial: true input: - name: neb.in results: - - reaction_energy_barrier - - reaction_energy_profile + - name: reaction_energy_barrier + - name: reaction_energy_profile monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: neb.x diff --git a/assets/applications/executables/espresso/ph.x.yml b/assets/applications/executables/espresso/ph.x.yml index fa14edcb..871e5125 100644 --- a/assets/applications/executables/espresso/ph.x.yml +++ b/assets/applications/executables/espresso/ph.x.yml @@ -1,17 +1,17 @@ monitors: - - standard_output + - name: standard_output results: - - phonon_dos - - phonon_dispersions - - zero_point_energy + - name: phonon_dos + - name: phonon_dispersions + - name: zero_point_energy flavors: ph_path: input: - name: ph_path.in results: - - phonon_dispersions + - name: phonon_dispersions monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: ph.x @@ -19,9 +19,9 @@ flavors: input: - name: ph_grid.in results: - - phonon_dos + - name: phonon_dos monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: ph.x @@ -29,9 +29,9 @@ flavors: input: - name: ph_gamma.in results: - - zero_point_energy + - name: zero_point_energy monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: ph.x @@ -40,7 +40,7 @@ flavors: - name: ph_init_qpoints.in results: [] monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: ph.x @@ -49,7 +49,7 @@ flavors: - name: ph_grid_restart.in results: [] monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: ph.x @@ -58,6 +58,6 @@ flavors: - name: ph_single_irr_qpt.in results: [] monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: ph.x diff --git a/assets/applications/executables/espresso/pp.x.yml b/assets/applications/executables/espresso/pp.x.yml index 58782cd9..250acdda 100644 --- a/assets/applications/executables/espresso/pp.x.yml +++ b/assets/applications/executables/espresso/pp.x.yml @@ -1,5 +1,5 @@ monitors: - - standard_output + - name: standard_output results: [] flavors: pp_density: @@ -7,7 +7,7 @@ flavors: - name: pp_density.in results: [] monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: pp.x @@ -16,7 +16,7 @@ flavors: - name: pp_electrostatic_potential.in results: [] monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: pp.x diff --git a/assets/applications/executables/espresso/projwfc.x.yml b/assets/applications/executables/espresso/projwfc.x.yml index 37f60fc3..8e25df68 100644 --- a/assets/applications/executables/espresso/projwfc.x.yml +++ b/assets/applications/executables/espresso/projwfc.x.yml @@ -1,14 +1,14 @@ monitors: - - standard_output + - name: standard_output results: - - density_of_states + - name: density_of_states flavors: projwfc: input: - name: projwfc.in results: - - density_of_states + - name: density_of_states monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: projwfc.x diff --git a/assets/applications/executables/espresso/pw.x.yml b/assets/applications/executables/espresso/pw.x.yml index 69737dbd..c60ee0f7 100644 --- a/assets/applications/executables/espresso/pw.x.yml +++ b/assets/applications/executables/espresso/pw.x.yml @@ -1,44 +1,44 @@ isDefault: true hasAdvancedComputeOptions: true postProcessors: - - remove_non_zero_weight_kpoints + - name: remove_non_zero_weight_kpoints monitors: - - standard_output - - convergence_ionic - - convergence_electronic + - name: standard_output + - name: convergence_ionic + - name: convergence_electronic results: - - atomic_forces - - band_gaps - - band_structure - - charge_density_profile - - density_of_states - - fermi_energy - - final_structure - - magnetic_moments - - potential_profile - - pressure - - reaction_energy_barrier - - reaction_energy_profile - - stress_tensor - - total_energy - - total_energy_contributions - - total_force + - name: atomic_forces + - name: band_gaps + - name: band_structure + - name: charge_density_profile + - name: density_of_states + - name: fermi_energy + - name: final_structure + - name: magnetic_moments + - name: potential_profile + - name: pressure + - name: reaction_energy_barrier + - name: reaction_energy_profile + - name: stress_tensor + - name: total_energy + - name: total_energy_contributions + - name: total_force flavors: pw_scf: isDefault: true input: - name: pw_scf.in results: - - atomic_forces - - fermi_energy - - pressure - - stress_tensor - - total_energy - - total_energy_contributions - - total_force + - name: atomic_forces + - name: fermi_energy + - name: pressure + - name: stress_tensor + - name: total_energy + - name: total_energy_contributions + - name: total_force monitors: - - standard_output - - convergence_electronic + - name: standard_output + - name: convergence_electronic applicationName: espresso executableName: pw.x @@ -46,16 +46,16 @@ flavors: input: - name: pw_scf_bands_hse.in results: - - total_energy - - total_energy_contributions - - pressure - - fermi_energy - - atomic_forces - - total_force - - stress_tensor + - name: total_energy + - name: total_energy_contributions + - name: pressure + - name: fermi_energy + - name: atomic_forces + - name: total_force + - name: stress_tensor monitors: - - standard_output - - convergence_electronic + - name: standard_output + - name: convergence_electronic applicationName: espresso executableName: pw.x @@ -63,17 +63,17 @@ flavors: input: - name: pw_scf_hse.in results: - - atomic_forces - - band_gaps - - fermi_energy - - pressure - - stress_tensor - - total_energy - - total_energy_contributions - - total_force + - name: atomic_forces + - name: band_gaps + - name: fermi_energy + - name: pressure + - name: stress_tensor + - name: total_energy + - name: total_energy_contributions + - name: total_force monitors: - - standard_output - - convergence_electronic + - name: standard_output + - name: convergence_electronic applicationName: espresso executableName: pw.x @@ -81,15 +81,15 @@ flavors: input: - name: pw_scf_kpt_conv.in results: - - total_energy - - fermi_energy - - pressure - - atomic_forces - - total_force - - stress_tensor + - name: total_energy + - name: fermi_energy + - name: pressure + - name: atomic_forces + - name: total_force + - name: stress_tensor monitors: - - standard_output - - convergence_electronic + - name: standard_output + - name: convergence_electronic applicationName: espresso executableName: pw.x @@ -97,17 +97,17 @@ flavors: input: - name: pw_scf_dft_u.in results: - - atomic_forces - - band_gaps - - fermi_energy - - pressure - - stress_tensor - - total_energy - - total_energy_contributions - - total_force + - name: atomic_forces + - name: band_gaps + - name: fermi_energy + - name: pressure + - name: stress_tensor + - name: total_energy + - name: total_energy_contributions + - name: total_force monitors: - - standard_output - - convergence_electronic + - name: standard_output + - name: convergence_electronic applicationName: espresso executableName: pw.x supportedApplicationVersions: @@ -118,17 +118,17 @@ flavors: input: - name: pw_scf_dft_v.in results: - - atomic_forces - - band_gaps - - fermi_energy - - pressure - - stress_tensor - - total_energy - - total_energy_contributions - - total_force + - name: atomic_forces + - name: band_gaps + - name: fermi_energy + - name: pressure + - name: stress_tensor + - name: total_energy + - name: total_energy_contributions + - name: total_force monitors: - - standard_output - - convergence_electronic + - name: standard_output + - name: convergence_electronic applicationName: espresso executableName: pw.x supportedApplicationVersions: @@ -139,17 +139,17 @@ flavors: input: - name: pw_scf_dft_j.in results: - - atomic_forces - - band_gaps - - fermi_energy - - pressure - - stress_tensor - - total_energy - - total_energy_contributions - - total_force + - name: atomic_forces + - name: band_gaps + - name: fermi_energy + - name: pressure + - name: stress_tensor + - name: total_energy + - name: total_energy_contributions + - name: total_force monitors: - - standard_output - - convergence_electronic + - name: standard_output + - name: convergence_electronic applicationName: espresso executableName: pw.x supportedApplicationVersions: @@ -160,17 +160,17 @@ flavors: input: - name: pw_scf_dft_u_legacy.in results: - - atomic_forces - - band_gaps - - fermi_energy - - pressure - - stress_tensor - - total_energy - - total_energy_contributions - - total_force + - name: atomic_forces + - name: band_gaps + - name: fermi_energy + - name: pressure + - name: stress_tensor + - name: total_energy + - name: total_energy_contributions + - name: total_force monitors: - - standard_output - - convergence_electronic + - name: standard_output + - name: convergence_electronic applicationName: espresso executableName: pw.x supportedApplicationVersions: @@ -189,16 +189,16 @@ flavors: input: - name: pw_scf_magn.in results: - - atomic_forces - - fermi_energy - - pressure - - stress_tensor - - total_energy - - total_energy_contributions - - total_force + - name: atomic_forces + - name: fermi_energy + - name: pressure + - name: stress_tensor + - name: total_energy + - name: total_energy_contributions + - name: total_force monitors: - - standard_output - - convergence_electronic + - name: standard_output + - name: convergence_electronic applicationName: espresso executableName: pw.x @@ -206,16 +206,16 @@ flavors: input: - name: pw_scf_soc.in results: - - atomic_forces - - fermi_energy - - pressure - - stress_tensor - - total_energy - - total_energy_contributions - - total_force + - name: atomic_forces + - name: fermi_energy + - name: pressure + - name: stress_tensor + - name: total_energy + - name: total_energy_contributions + - name: total_force monitors: - - standard_output - - convergence_electronic + - name: standard_output + - name: convergence_electronic applicationName: espresso executableName: pw.x @@ -223,17 +223,17 @@ flavors: input: - name: pw_scf_dft_u_magn.in results: - - atomic_forces - - band_gaps - - fermi_energy - - pressure - - stress_tensor - - total_energy - - total_energy_contributions - - total_force + - name: atomic_forces + - name: band_gaps + - name: fermi_energy + - name: pressure + - name: stress_tensor + - name: total_energy + - name: total_energy_contributions + - name: total_force monitors: - - standard_output - - convergence_electronic + - name: standard_output + - name: convergence_electronic applicationName: espresso executableName: pw.x supportedApplicationVersions: @@ -244,17 +244,17 @@ flavors: input: - name: pw_scf_dft_u_soc.in results: - - atomic_forces - - band_gaps - - fermi_energy - - pressure - - stress_tensor - - total_energy - - total_energy_contributions - - total_force + - name: atomic_forces + - name: band_gaps + - name: fermi_energy + - name: pressure + - name: stress_tensor + - name: total_energy + - name: total_energy_contributions + - name: total_force monitors: - - standard_output - - convergence_electronic + - name: standard_output + - name: convergence_electronic applicationName: espresso executableName: pw.x supportedApplicationVersions: @@ -265,17 +265,17 @@ flavors: input: - name: pw_scf_dft_v_magn.in results: - - atomic_forces - - band_gaps - - fermi_energy - - pressure - - stress_tensor - - total_energy - - total_energy_contributions - - total_force + - name: atomic_forces + - name: band_gaps + - name: fermi_energy + - name: pressure + - name: stress_tensor + - name: total_energy + - name: total_energy_contributions + - name: total_force monitors: - - standard_output - - convergence_electronic + - name: standard_output + - name: convergence_electronic applicationName: espresso executableName: pw.x supportedApplicationVersions: @@ -286,17 +286,17 @@ flavors: input: - name: pw_scf_dft_j_magn.in results: - - atomic_forces - - band_gaps - - fermi_energy - - pressure - - stress_tensor - - total_energy - - total_energy_contributions - - total_force + - name: atomic_forces + - name: band_gaps + - name: fermi_energy + - name: pressure + - name: stress_tensor + - name: total_energy + - name: total_energy_contributions + - name: total_force monitors: - - standard_output - - convergence_electronic + - name: standard_output + - name: convergence_electronic applicationName: espresso executableName: pw.x supportedApplicationVersions: @@ -307,17 +307,17 @@ flavors: input: - name: pw_scf_dft_u_magn_legacy.in results: - - atomic_forces - - band_gaps - - fermi_energy - - pressure - - stress_tensor - - total_energy - - total_energy_contributions - - total_force + - name: atomic_forces + - name: band_gaps + - name: fermi_energy + - name: pressure + - name: stress_tensor + - name: total_energy + - name: total_energy_contributions + - name: total_force monitors: - - standard_output - - convergence_electronic + - name: standard_output + - name: convergence_electronic applicationName: espresso executableName: pw.x supportedApplicationVersions: @@ -333,17 +333,17 @@ flavors: input: - name: pw_scf_dft_u_soc_legacy.in results: - - atomic_forces - - band_gaps - - fermi_energy - - pressure - - stress_tensor - - total_energy - - total_energy_contributions - - total_force + - name: atomic_forces + - name: band_gaps + - name: fermi_energy + - name: pressure + - name: stress_tensor + - name: total_energy + - name: total_energy_contributions + - name: total_force monitors: - - standard_output - - convergence_electronic + - name: standard_output + - name: convergence_electronic applicationName: espresso executableName: pw.x supportedApplicationVersions: @@ -362,18 +362,18 @@ flavors: input: - name: pw_esm.in results: - - total_energy - - total_energy_contributions - - pressure - - fermi_energy - - atomic_forces - - total_force - - stress_tensor - - potential_profile - - charge_density_profile + - name: total_energy + - name: total_energy_contributions + - name: pressure + - name: fermi_energy + - name: atomic_forces + - name: total_force + - name: stress_tensor + - name: potential_profile + - name: charge_density_profile monitors: - - standard_output - - convergence_electronic + - name: standard_output + - name: convergence_electronic applicationName: espresso executableName: pw.x @@ -381,18 +381,18 @@ flavors: input: - name: pw_esm_relax.in results: - - total_energy - - total_energy_contributions - - pressure - - fermi_energy - - atomic_forces - - total_force - - stress_tensor - - potential_profile - - charge_density_profile + - name: total_energy + - name: total_energy_contributions + - name: pressure + - name: fermi_energy + - name: atomic_forces + - name: total_force + - name: stress_tensor + - name: potential_profile + - name: charge_density_profile monitors: - - standard_output - - convergence_electronic + - name: standard_output + - name: convergence_electronic applicationName: espresso executableName: pw.x @@ -400,10 +400,10 @@ flavors: input: - name: pw_nscf.in results: - - fermi_energy - - band_gaps + - name: fermi_energy + - name: band_gaps monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: pw.x @@ -411,10 +411,10 @@ flavors: input: - name: pw_nscf_magn.in results: - - fermi_energy - - band_gaps + - name: fermi_energy + - name: band_gaps monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: pw.x @@ -422,10 +422,10 @@ flavors: input: - name: pw_nscf_soc.in results: - - fermi_energy - - band_gaps + - name: fermi_energy + - name: band_gaps monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: pw.x @@ -433,10 +433,10 @@ flavors: input: - name: pw_nscf_dft_u_magn.in results: - - fermi_energy - - band_gaps + - name: fermi_energy + - name: band_gaps monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: pw.x supportedApplicationVersions: @@ -447,10 +447,10 @@ flavors: input: - name: pw_nscf_dft_v_magn.in results: - - fermi_energy - - band_gaps + - name: fermi_energy + - name: band_gaps monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: pw.x supportedApplicationVersions: @@ -461,10 +461,10 @@ flavors: input: - name: pw_nscf_dft_j_magn.in results: - - fermi_energy - - band_gaps + - name: fermi_energy + - name: band_gaps monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: pw.x supportedApplicationVersions: @@ -475,17 +475,17 @@ flavors: input: - name: pw_nscf_dft_u_magn_legacy.in results: - - atomic_forces - - band_gaps - - fermi_energy - - pressure - - stress_tensor - - total_energy - - total_energy_contributions - - total_force + - name: atomic_forces + - name: band_gaps + - name: fermi_energy + - name: pressure + - name: stress_tensor + - name: total_energy + - name: total_energy_contributions + - name: total_force monitors: - - standard_output - - convergence_electronic + - name: standard_output + - name: convergence_electronic applicationName: espresso executableName: pw.x supportedApplicationVersions: @@ -504,10 +504,10 @@ flavors: input: - name: pw_nscf_dft_u_soc.in results: - - fermi_energy - - band_gaps + - name: fermi_energy + - name: band_gaps monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: pw.x supportedApplicationVersions: @@ -518,17 +518,17 @@ flavors: input: - name: pw_nscf_dft_u_soc_legacy.in results: - - atomic_forces - - band_gaps - - fermi_energy - - pressure - - stress_tensor - - total_energy - - total_energy_contributions - - total_force + - name: atomic_forces + - name: band_gaps + - name: fermi_energy + - name: pressure + - name: stress_tensor + - name: total_energy + - name: total_energy_contributions + - name: total_force monitors: - - standard_output - - convergence_electronic + - name: standard_output + - name: convergence_electronic applicationName: espresso executableName: pw.x supportedApplicationVersions: @@ -547,9 +547,9 @@ flavors: input: - name: pw_bands.in results: - - band_structure + - name: band_structure monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: pw.x @@ -557,9 +557,9 @@ flavors: input: - name: pw_bands_magn.in results: - - band_structure + - name: band_structure monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: pw.x @@ -567,9 +567,9 @@ flavors: input: - name: pw_bands_soc.in results: - - band_structure + - name: band_structure monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: pw.x @@ -577,9 +577,9 @@ flavors: input: - name: pw_bands_dft_u_magn.in results: - - band_structure + - name: band_structure monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: pw.x supportedApplicationVersions: @@ -590,9 +590,9 @@ flavors: input: - name: pw_bands_dft_v_magn.in results: - - band_structure + - name: band_structure monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: pw.x supportedApplicationVersions: @@ -603,9 +603,9 @@ flavors: input: - name: pw_bands_dft_j_magn.in results: - - band_structure + - name: band_structure monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: pw.x supportedApplicationVersions: @@ -616,9 +616,9 @@ flavors: input: - name: pw_bands_dft_u_magn_legacy.in results: - - band_structure + - name: band_structure monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: pw.x supportedApplicationVersions: @@ -637,9 +637,9 @@ flavors: input: - name: pw_bands_dft_u_soc.in results: - - band_structure + - name: band_structure monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: pw.x supportedApplicationVersions: @@ -650,9 +650,9 @@ flavors: input: - name: pw_bands_dft_u_soc_legacy.in results: - - band_structure + - name: band_structure monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: pw.x supportedApplicationVersions: @@ -671,17 +671,17 @@ flavors: input: - name: pw_relax.in monitors: - - standard_output - - convergence_electronic - - convergence_ionic + - name: standard_output + - name: convergence_electronic + - name: convergence_ionic results: - - total_energy - - fermi_energy - - pressure - - atomic_forces - - total_force - - stress_tensor - - final_structure + - name: total_energy + - name: fermi_energy + - name: pressure + - name: atomic_forces + - name: total_force + - name: stress_tensor + - name: final_structure applicationName: espresso executableName: pw.x @@ -689,17 +689,17 @@ flavors: input: - name: pw_vc_relax.in monitors: - - standard_output - - convergence_electronic - - convergence_ionic + - name: standard_output + - name: convergence_electronic + - name: convergence_ionic results: - - total_energy - - fermi_energy - - pressure - - atomic_forces - - total_force - - stress_tensor - - final_structure + - name: total_energy + - name: fermi_energy + - name: pressure + - name: atomic_forces + - name: total_force + - name: stress_tensor + - name: final_structure applicationName: espresso executableName: pw.x @@ -707,16 +707,16 @@ flavors: input: - name: pw_md.in results: - - atomic_forces - - band_gaps - - fermi_energy - - pressure - - stress_tensor - - total_energy - - total_energy_contributions - - total_force - monitors: - - standard_output - - convergence_electronic + - name: atomic_forces + - name: band_gaps + - name: fermi_energy + - name: pressure + - name: stress_tensor + - name: total_energy + - name: total_energy_contributions + - name: total_force + monitors: + - name: standard_output + - name: convergence_electronic applicationName: espresso executableName: pw.x diff --git a/assets/applications/executables/espresso/pw4gww.x.yml b/assets/applications/executables/espresso/pw4gww.x.yml index cec2db1b..c4e6822d 100644 --- a/assets/applications/executables/espresso/pw4gww.x.yml +++ b/assets/applications/executables/espresso/pw4gww.x.yml @@ -1,5 +1,5 @@ monitors: - - standard_output + - name: standard_output results: [] flavors: pw4gww_simple: @@ -7,6 +7,6 @@ flavors: - name: pw4gww_simple.in results: [] monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: pw4gww.x diff --git a/assets/applications/executables/espresso/q2r.x.yml b/assets/applications/executables/espresso/q2r.x.yml index 9929be16..bf9820b5 100644 --- a/assets/applications/executables/espresso/q2r.x.yml +++ b/assets/applications/executables/espresso/q2r.x.yml @@ -1,5 +1,5 @@ monitors: - - standard_output + - name: standard_output results: [] flavors: q2r: @@ -7,6 +7,6 @@ flavors: - name: q2r.in results: [] monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: q2r.x diff --git a/assets/applications/executables/espresso/simple.x.yml b/assets/applications/executables/espresso/simple.x.yml index 912589de..e7132323 100644 --- a/assets/applications/executables/espresso/simple.x.yml +++ b/assets/applications/executables/espresso/simple.x.yml @@ -1,5 +1,5 @@ monitors: - - standard_output + - name: standard_output results: [] flavors: simple: @@ -7,6 +7,6 @@ flavors: - name: simple.in results: [] monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: simple.x diff --git a/assets/applications/executables/espresso/simple_bse.x.yml b/assets/applications/executables/espresso/simple_bse.x.yml index 5c88d9b2..8599621c 100644 --- a/assets/applications/executables/espresso/simple_bse.x.yml +++ b/assets/applications/executables/espresso/simple_bse.x.yml @@ -1,5 +1,5 @@ monitors: - - standard_output + - name: standard_output results: [] flavors: simple_bse: @@ -7,6 +7,6 @@ flavors: - name: simple_bse.in results: [] monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: simple_bse.x diff --git a/assets/applications/executables/espresso/simple_ip.x.yml b/assets/applications/executables/espresso/simple_ip.x.yml index 8a503cc3..d621133d 100644 --- a/assets/applications/executables/espresso/simple_ip.x.yml +++ b/assets/applications/executables/espresso/simple_ip.x.yml @@ -1,5 +1,5 @@ monitors: - - standard_output + - name: standard_output results: [] flavors: simple_ip: @@ -7,6 +7,6 @@ flavors: - name: simple_ip.in results: [] monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: simple_ip.x diff --git a/assets/applications/executables/nwchem/nwchem.yml b/assets/applications/executables/nwchem/nwchem.yml index f797c9e1..2db8ff89 100644 --- a/assets/applications/executables/nwchem/nwchem.yml +++ b/assets/applications/executables/nwchem/nwchem.yml @@ -1,21 +1,21 @@ isDefault: true hasAdvancedComputeOptions: false postProcessors: - - error_handler + - name: error_handler monitors: - - standard_output + - name: standard_output results: - - total_energy - - total_energy_contributions + - name: total_energy + - name: total_energy_contributions flavors: nwchem_total_energy: isDefault: true input: - name: nwchem_total_energy.inp results: - - total_energy - - total_energy_contributions + - name: total_energy + - name: total_energy_contributions monitors: - - standard_output + - name: standard_output applicationName: nwchem executableName: nwchem diff --git a/assets/applications/executables/python/python.yml b/assets/applications/executables/python/python.yml index d61d5469..a378630b 100644 --- a/assets/applications/executables/python/python.yml +++ b/assets/applications/executables/python/python.yml @@ -1,9 +1,9 @@ isDefault: true monitors: - - standard_output + - name: standard_output results: - - file_content - - 'workflow:pyml_predict' + - name: file_content + - name: 'workflow:pyml_predict' flavors: hello_world: isDefault: true @@ -12,7 +12,7 @@ flavors: templateName: hello_world.py - name: requirements.txt monitors: - - standard_output + - name: standard_output applicationName: python executableName: python @@ -20,7 +20,7 @@ flavors: input: - name: espresso_xml_get_qpt_irr.py monitors: - - standard_output + - name: standard_output applicationName: python executableName: python @@ -30,7 +30,7 @@ flavors: - name: requirements.txt templateName: requirements_empty.txt monitors: - - standard_output + - name: standard_output applicationName: python executableName: python @@ -56,7 +56,7 @@ flavors: - name: requirements.txt templateName: processing_requirements.txt monitors: - - standard_output + - name: standard_output applicationName: python executableName: python @@ -67,7 +67,7 @@ flavors: - name: requirements.txt templateName: processing_requirements.txt monitors: - - standard_output + - name: standard_output applicationName: python executableName: python @@ -78,7 +78,7 @@ flavors: - name: requirements.txt templateName: pyml_requirements.txt monitors: - - standard_output + - name: standard_output applicationName: python executableName: python @@ -89,7 +89,7 @@ flavors: - name: requirements.txt templateName: pyml_requirements.txt monitors: - - standard_output + - name: standard_output applicationName: python executableName: python @@ -100,7 +100,7 @@ flavors: - name: requirements.txt templateName: pyml_requirements.txt monitors: - - standard_output + - name: standard_output applicationName: python executableName: python @@ -111,7 +111,7 @@ flavors: - name: requirements.txt templateName: pyml_requirements.txt monitors: - - standard_output + - name: standard_output applicationName: python executableName: python @@ -122,7 +122,7 @@ flavors: - name: requirements.txt templateName: pyml_requirements.txt monitors: - - standard_output + - name: standard_output applicationName: python executableName: python @@ -133,7 +133,7 @@ flavors: - name: requirements.txt templateName: pyml_requirements.txt monitors: - - standard_output + - name: standard_output applicationName: python executableName: python @@ -144,7 +144,7 @@ flavors: - name: requirements.txt templateName: pyml_requirements.txt monitors: - - standard_output + - name: standard_output applicationName: python executableName: python @@ -155,7 +155,7 @@ flavors: - name: requirements.txt templateName: pyml_requirements.txt monitors: - - standard_output + - name: standard_output applicationName: python executableName: python @@ -166,9 +166,9 @@ flavors: - name: requirements.txt templateName: pyml_requirements.txt monitors: - - standard_output + - name: standard_output results: - - 'workflow:pyml_predict' + - name: 'workflow:pyml_predict' applicationName: python executableName: python @@ -179,9 +179,9 @@ flavors: - name: requirements.txt templateName: pyml_requirements.txt results: - - 'workflow:pyml_predict' + - name: 'workflow:pyml_predict' monitors: - - standard_output + - name: standard_output applicationName: python executableName: python @@ -192,9 +192,9 @@ flavors: - name: requirements.txt templateName: pyml_requirements.txt results: - - 'workflow:pyml_predict' + - name: 'workflow:pyml_predict' monitors: - - standard_output + - name: standard_output applicationName: python executableName: python @@ -205,9 +205,9 @@ flavors: - name: requirements.txt templateName: pyml_requirements.txt results: - - 'workflow:pyml_predict' + - name: 'workflow:pyml_predict' monitors: - - standard_output + - name: standard_output applicationName: python executableName: python @@ -218,9 +218,9 @@ flavors: - name: requirements.txt templateName: pyml_requirements.txt results: - - 'workflow:pyml_predict' + - name: 'workflow:pyml_predict' monitors: - - standard_output + - name: standard_output applicationName: python executableName: python @@ -231,9 +231,9 @@ flavors: - name: requirements.txt templateName: pyml_requirements.txt results: - - 'workflow:pyml_predict' + - name: 'workflow:pyml_predict' monitors: - - standard_output + - name: standard_output applicationName: python executableName: python @@ -244,9 +244,9 @@ flavors: - name: requirements.txt templateName: pyml_requirements.txt results: - - 'workflow:pyml_predict' + - name: 'workflow:pyml_predict' monitors: - - standard_output + - name: standard_output applicationName: python executableName: python @@ -257,9 +257,9 @@ flavors: - name: requirements.txt templateName: pyml_requirements.txt results: - - 'workflow:pyml_predict' + - name: 'workflow:pyml_predict' monitors: - - standard_output + - name: standard_output applicationName: python executableName: python @@ -270,9 +270,9 @@ flavors: - name: requirements.txt templateName: pyml_requirements.txt results: - - 'workflow:pyml_predict' + - name: 'workflow:pyml_predict' monitors: - - standard_output + - name: standard_output applicationName: python executableName: python @@ -283,9 +283,9 @@ flavors: - name: requirements.txt templateName: pyml_requirements.txt results: - - 'workflow:pyml_predict' + - name: 'workflow:pyml_predict' monitors: - - standard_output + - name: standard_output applicationName: python executableName: python @@ -296,9 +296,9 @@ flavors: - name: requirements.txt templateName: pyml_requirements.txt results: - - 'workflow:pyml_predict' + - name: 'workflow:pyml_predict' monitors: - - standard_output + - name: standard_output applicationName: python executableName: python @@ -309,9 +309,9 @@ flavors: - name: requirements.txt templateName: pyml_requirements.txt results: - - 'workflow:pyml_predict' + - name: 'workflow:pyml_predict' monitors: - - standard_output + - name: standard_output applicationName: python executableName: python @@ -322,9 +322,9 @@ flavors: - name: requirements.txt templateName: pyml_requirements.txt results: - - 'workflow:pyml_predict' + - name: 'workflow:pyml_predict' monitors: - - standard_output + - name: standard_output applicationName: python executableName: python @@ -335,9 +335,9 @@ flavors: - name: requirements.txt templateName: pyml_requirements.txt results: - - file_content + - name: file_content monitors: - - standard_output + - name: standard_output applicationName: python executableName: python @@ -348,9 +348,9 @@ flavors: - name: requirements.txt templateName: pyml_requirements.txt results: - - file_content + - name: file_content monitors: - - standard_output + - name: standard_output applicationName: python executableName: python @@ -361,8 +361,8 @@ flavors: - name: requirements.txt templateName: pyml_requirements.txt results: - - file_content + - name: file_content monitors: - - standard_output + - name: standard_output applicationName: python executableName: python diff --git a/assets/applications/executables/shell/sh.yml b/assets/applications/executables/shell/sh.yml index 98f27ffc..9fa6dce9 100644 --- a/assets/applications/executables/shell/sh.yml +++ b/assets/applications/executables/shell/sh.yml @@ -1,33 +1,33 @@ isDefault: true monitors: - - standard_output + - name: standard_output results: - - atomic_forces - - band_gaps - - band_structure - - density_of_states - - fermi_energy - - phonon_dispersions - - phonon_dos - - pressure - - stress_tensor - - total_energy - - total_energy_contributions - - total_force - - zero_point_energy - - final_structure - - magnetic_moments - - reaction_energy_barrier - - reaction_energy_profile - - potential_profile - - charge_density_profile + - name: atomic_forces + - name: band_gaps + - name: band_structure + - name: density_of_states + - name: fermi_energy + - name: phonon_dispersions + - name: phonon_dos + - name: pressure + - name: stress_tensor + - name: total_energy + - name: total_energy_contributions + - name: total_force + - name: zero_point_energy + - name: final_structure + - name: magnetic_moments + - name: reaction_energy_barrier + - name: reaction_energy_profile + - name: potential_profile + - name: charge_density_profile flavors: hello_world: isDefault: true input: - name: hello_world.sh monitors: - - standard_output + - name: standard_output applicationName: shell executableName: sh @@ -35,7 +35,7 @@ flavors: input: - name: job_espresso_pw_scf.sh monitors: - - standard_output + - name: standard_output applicationName: shell executableName: sh @@ -43,7 +43,7 @@ flavors: input: - name: espresso_link_outdir_save.sh monitors: - - standard_output + - name: standard_output applicationName: shell executableName: sh @@ -51,7 +51,7 @@ flavors: input: - name: espresso_collect_dynmat.sh monitors: - - standard_output + - name: standard_output applicationName: shell executableName: sh @@ -60,6 +60,6 @@ flavors: input: - name: bash_vasp_prepare_neb_images.sh monitors: - - standard_output + - name: standard_output applicationName: shell executableName: sh diff --git a/assets/applications/executables/vasp/vasp.yml b/assets/applications/executables/vasp/vasp.yml index 88500b77..88c7eafa 100644 --- a/assets/applications/executables/vasp/vasp.yml +++ b/assets/applications/executables/vasp/vasp.yml @@ -1,30 +1,30 @@ isDefault: true postProcessors: - - error_handler - - prepare_restart - - remove_non_zero_weight_kpoints + - name: error_handler + - name: prepare_restart + - name: remove_non_zero_weight_kpoints monitors: - - standard_output - - convergence_ionic - - convergence_electronic + - name: standard_output + - name: convergence_ionic + - name: convergence_electronic results: - - atomic_forces - - band_gaps - - band_structure - - density_of_states - - fermi_energy - - pressure - - stress_tensor - - total_energy - - total_energy_contributions - - total_force - - zero_point_energy - - final_structure - - magnetic_moments - - reaction_energy_barrier - - reaction_energy_profile - - potential_profile - - charge_density_profile + - name: atomic_forces + - name: band_gaps + - name: band_structure + - name: density_of_states + - name: fermi_energy + - name: pressure + - name: stress_tensor + - name: total_energy + - name: total_energy_contributions + - name: total_force + - name: zero_point_energy + - name: final_structure + - name: magnetic_moments + - name: reaction_energy_barrier + - name: reaction_energy_profile + - name: potential_profile + - name: charge_density_profile flavors: vasp: isDefault: true @@ -33,16 +33,16 @@ flavors: - name: KPOINTS - name: POSCAR results: - - total_energy - - total_energy_contributions - - pressure - - fermi_energy - - atomic_forces - - total_force - - stress_tensor + - name: total_energy + - name: total_energy_contributions + - name: pressure + - name: fermi_energy + - name: atomic_forces + - name: total_force + - name: stress_tensor monitors: - - standard_output - - convergence_electronic + - name: standard_output + - name: convergence_electronic applicationName: vasp executableName: vasp @@ -53,16 +53,16 @@ flavors: - name: KPOINTS - name: POSCAR results: - - total_energy - - total_energy_contributions - - pressure - - fermi_energy - - atomic_forces - - total_force - - stress_tensor + - name: total_energy + - name: total_energy_contributions + - name: pressure + - name: fermi_energy + - name: atomic_forces + - name: total_force + - name: stress_tensor monitors: - - standard_output - - convergence_electronic + - name: standard_output + - name: convergence_electronic applicationName: vasp executableName: vasp @@ -75,10 +75,10 @@ flavors: - name: POSCAR templateName: '' results: - - band_structure + - name: band_structure monitors: - - standard_output - - convergence_electronic + - name: standard_output + - name: convergence_electronic applicationName: vasp executableName: vasp @@ -91,11 +91,11 @@ flavors: - name: POSCAR templateName: POSCAR results: - - band_gaps - - fermi_energy + - name: band_gaps + - name: fermi_energy monitors: - - standard_output - - convergence_electronic + - name: standard_output + - name: convergence_electronic applicationName: vasp executableName: vasp @@ -107,16 +107,16 @@ flavors: - name: KPOINTS - name: POSCAR results: - - total_energy - - total_energy_contributions - - pressure - - fermi_energy - - atomic_forces - - total_force - - stress_tensor + - name: total_energy + - name: total_energy_contributions + - name: pressure + - name: fermi_energy + - name: atomic_forces + - name: total_force + - name: stress_tensor monitors: - - standard_output - - convergence_electronic + - name: standard_output + - name: convergence_electronic applicationName: vasp executableName: vasp @@ -130,10 +130,10 @@ flavors: - name: POSCAR templateName: '' results: - - band_structure + - name: band_structure monitors: - - standard_output - - convergence_electronic + - name: standard_output + - name: convergence_electronic applicationName: vasp executableName: vasp @@ -147,11 +147,11 @@ flavors: - name: POSCAR templateName: POSCAR results: - - band_gaps - - fermi_energy + - name: band_gaps + - name: fermi_energy monitors: - - standard_output - - convergence_electronic + - name: standard_output + - name: convergence_electronic applicationName: vasp executableName: vasp @@ -164,19 +164,19 @@ flavors: - name: POSCAR templateName: POSCAR results: - - total_energy - - atomic_forces - - fermi_energy - - pressure - - stress_tensor - - total_force - - final_structure + - name: total_energy + - name: atomic_forces + - name: fermi_energy + - name: pressure + - name: stress_tensor + - name: total_force + - name: final_structure monitors: - - standard_output - - convergence_electronic - - convergence_ionic + - name: standard_output + - name: convergence_electronic + - name: convergence_ionic postProcessors: - - prepare_restart + - name: prepare_restart applicationName: vasp executableName: vasp @@ -189,19 +189,19 @@ flavors: - name: POSCAR templateName: POSCAR results: - - total_energy - - atomic_forces - - fermi_energy - - pressure - - stress_tensor - - total_force - - final_structure + - name: total_energy + - name: atomic_forces + - name: fermi_energy + - name: pressure + - name: stress_tensor + - name: total_force + - name: final_structure monitors: - - standard_output - - convergence_electronic - - convergence_ionic + - name: standard_output + - name: convergence_electronic + - name: convergence_ionic postProcessors: - - prepare_restart + - name: prepare_restart applicationName: vasp executableName: vasp @@ -214,17 +214,17 @@ flavors: - name: POSCAR templateName: POSCAR results: - - total_energy - - fermi_energy - - pressure - - atomic_forces - - stress_tensor - - total_force - - zero_point_energy + - name: total_energy + - name: fermi_energy + - name: pressure + - name: atomic_forces + - name: stress_tensor + - name: total_force + - name: zero_point_energy monitors: - - standard_output - - convergence_electronic - - convergence_ionic + - name: standard_output + - name: convergence_electronic + - name: convergence_ionic applicationName: vasp executableName: vasp @@ -238,16 +238,16 @@ flavors: - name: POSCAR templateName: POSCAR results: - - total_energy - - total_energy_contributions - - pressure - - fermi_energy - - atomic_forces - - total_force - - stress_tensor + - name: total_energy + - name: total_energy_contributions + - name: pressure + - name: fermi_energy + - name: atomic_forces + - name: total_force + - name: stress_tensor monitors: - - standard_output - - convergence_electronic + - name: standard_output + - name: convergence_electronic applicationName: vasp executableName: vasp @@ -260,17 +260,17 @@ flavors: - name: POSCAR templateName: POSCAR results: - - total_energy - - total_energy_contributions - - pressure - - fermi_energy - - atomic_forces - - total_force - - stress_tensor + - name: total_energy + - name: total_energy_contributions + - name: pressure + - name: fermi_energy + - name: atomic_forces + - name: total_force + - name: stress_tensor monitors: - - standard_output - - convergence_electronic - - convergence_ionic + - name: standard_output + - name: convergence_electronic + - name: convergence_ionic applicationName: vasp executableName: vasp @@ -282,10 +282,10 @@ flavors: - name: KPOINTS templateName: KPOINTS results: - - reaction_energy_barrier - - reaction_energy_profile + - name: reaction_energy_barrier + - name: reaction_energy_profile monitors: - - standard_output + - name: standard_output applicationName: vasp executableName: vasp @@ -298,16 +298,16 @@ flavors: - name: POSCAR templateName: POSCAR_NEB_INITIAL results: - - total_energy - - total_energy_contributions - - pressure - - fermi_energy - - atomic_forces - - total_force - - stress_tensor + - name: total_energy + - name: total_energy_contributions + - name: pressure + - name: fermi_energy + - name: atomic_forces + - name: total_force + - name: stress_tensor monitors: - - standard_output - - convergence_electronic + - name: standard_output + - name: convergence_electronic applicationName: vasp executableName: vasp @@ -320,15 +320,15 @@ flavors: - name: POSCAR templateName: POSCAR_NEB_FINAL results: - - total_energy - - total_energy_contributions - - pressure - - fermi_energy - - atomic_forces - - total_force - - stress_tensor + - name: total_energy + - name: total_energy_contributions + - name: pressure + - name: fermi_energy + - name: atomic_forces + - name: total_force + - name: stress_tensor monitors: - - standard_output - - convergence_electronic + - name: standard_output + - name: convergence_electronic applicationName: vasp executableName: vasp diff --git a/assets/applications/input_files_templates/espresso/cp.j2.in b/assets/applications/input_files_templates/espresso/cp.j2.in index 9cb1b5f5..80ff3e54 100644 --- a/assets/applications/input_files_templates/espresso/cp.j2.in +++ b/assets/applications/input_files_templates/espresso/cp.j2.in @@ -39,8 +39,20 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES }} +{% for specie in input.ATOMIC_SPECIES -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} diff --git a/assets/applications/input_files_templates/espresso/cp_wf.j2.in b/assets/applications/input_files_templates/espresso/cp_wf.j2.in index b1a6c529..cfd3d36a 100644 --- a/assets/applications/input_files_templates/espresso/cp_wf.j2.in +++ b/assets/applications/input_files_templates/espresso/cp_wf.j2.in @@ -48,8 +48,20 @@ wf_friction = 0.3d0, / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES }} +{% for specie in input.ATOMIC_SPECIES -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} diff --git a/assets/applications/input_files_templates/espresso/neb.j2.in b/assets/applications/input_files_templates/espresso/neb.j2.in index 06f8ca84..85e43870 100644 --- a/assets/applications/input_files_templates/espresso/neb.j2.in +++ b/assets/applications/input_files_templates/espresso/neb.j2.in @@ -35,22 +35,50 @@ BEGIN_ENGINE_INPUT mixing_beta = 0.3 / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES }} +{% for specie in input.ATOMIC_SPECIES -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} BEGIN_POSITIONS FIRST_IMAGE ATOMIC_POSITIONS crystal -{{ input.FIRST_IMAGE }} +{%- set print_constraints_first = false %} +{%- for position in input.FIRST_IMAGE %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints_first = true %} + {%- endif %} +{%- endfor %} +{% for position in input.FIRST_IMAGE -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints_first %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} {%- for IMAGE in input.INTERMEDIATE_IMAGES %} INTERMEDIATE_IMAGE ATOMIC_POSITIONS crystal -{{ IMAGE }} +{%- set print_constraints_intermediate = false %} +{%- for position in IMAGE %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints_intermediate = true %} + {%- endif %} +{%- endfor %} +{% for position in IMAGE -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints_intermediate %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} {%- endfor %} LAST_IMAGE ATOMIC_POSITIONS crystal -{{ input.LAST_IMAGE }} +{%- set print_constraints_last = false %} +{%- for position in input.LAST_IMAGE %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints_last = true %} + {%- endif %} +{%- endfor %} +{% for position in input.LAST_IMAGE -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints_last %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} END_POSITIONS CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS automatic {% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %} END_ENGINE_INPUT diff --git a/assets/applications/input_files_templates/espresso/pw_bands.j2.in b/assets/applications/input_files_templates/espresso/pw_bands.j2.in index 886d1b2f..c5dab9b0 100644 --- a/assets/applications/input_files_templates/espresso/pw_bands.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_bands.j2.in @@ -34,11 +34,23 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES }} +{% for specie in input.ATOMIC_SPECIES -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS crystal_b {{kpath.length}} {% for point in kpath -%} diff --git a/assets/applications/input_files_templates/espresso/pw_bands_dft_j_magn.j2.in b/assets/applications/input_files_templates/espresso/pw_bands_dft_j_magn.j2.in index 1af971ee..b750237b 100644 --- a/assets/applications/input_files_templates/espresso/pw_bands_dft_j_magn.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_bands_dft_j_magn.j2.in @@ -41,11 +41,23 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES_WITH_LABELS }} +{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS crystal_b {{kpath.length}} {% for point in kpath -%} diff --git a/assets/applications/input_files_templates/espresso/pw_bands_dft_u_magn.j2.in b/assets/applications/input_files_templates/espresso/pw_bands_dft_u_magn.j2.in index 66b39e71..f0d8eaf9 100644 --- a/assets/applications/input_files_templates/espresso/pw_bands_dft_u_magn.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_bands_dft_u_magn.j2.in @@ -41,11 +41,23 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES_WITH_LABELS }} +{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS crystal_b {{kpath.length}} {% for point in kpath -%} diff --git a/assets/applications/input_files_templates/espresso/pw_bands_dft_u_magn_legacy.j2.in b/assets/applications/input_files_templates/espresso/pw_bands_dft_u_magn_legacy.j2.in index 5c7a2253..9f12c369 100644 --- a/assets/applications/input_files_templates/espresso/pw_bands_dft_u_magn_legacy.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_bands_dft_u_magn_legacy.j2.in @@ -47,11 +47,23 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES_WITH_LABELS }} +{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS crystal_b {{kpath.length}} {% for point in kpath -%} diff --git a/assets/applications/input_files_templates/espresso/pw_bands_dft_u_soc.j2.in b/assets/applications/input_files_templates/espresso/pw_bands_dft_u_soc.j2.in index 2d8448f8..8d2506bb 100644 --- a/assets/applications/input_files_templates/espresso/pw_bands_dft_u_soc.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_bands_dft_u_soc.j2.in @@ -63,11 +63,23 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES_WITH_LABELS }} +{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS crystal_b {{kpath.length}} {% for point in kpath -%} diff --git a/assets/applications/input_files_templates/espresso/pw_bands_dft_u_soc_legacy.j2.in b/assets/applications/input_files_templates/espresso/pw_bands_dft_u_soc_legacy.j2.in index 78c3b6c9..a156af76 100644 --- a/assets/applications/input_files_templates/espresso/pw_bands_dft_u_soc_legacy.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_bands_dft_u_soc_legacy.j2.in @@ -69,11 +69,23 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES_WITH_LABELS }} +{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS crystal_b {{kpath.length}} {% for point in kpath -%} diff --git a/assets/applications/input_files_templates/espresso/pw_bands_dft_v_magn.j2.in b/assets/applications/input_files_templates/espresso/pw_bands_dft_v_magn.j2.in index 064e607c..d4599403 100644 --- a/assets/applications/input_files_templates/espresso/pw_bands_dft_v_magn.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_bands_dft_v_magn.j2.in @@ -41,11 +41,23 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES_WITH_LABELS }} +{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS crystal_b {{kpath.length}} {% for point in kpath -%} diff --git a/assets/applications/input_files_templates/espresso/pw_bands_magn.j2.in b/assets/applications/input_files_templates/espresso/pw_bands_magn.j2.in index daa2c43e..b3316c5a 100644 --- a/assets/applications/input_files_templates/espresso/pw_bands_magn.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_bands_magn.j2.in @@ -41,11 +41,23 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES_WITH_LABELS }} +{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS crystal_b {{kpath.length}} {% for point in kpath -%} diff --git a/assets/applications/input_files_templates/espresso/pw_bands_soc.j2.in b/assets/applications/input_files_templates/espresso/pw_bands_soc.j2.in index e33d8e11..810d8a87 100644 --- a/assets/applications/input_files_templates/espresso/pw_bands_soc.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_bands_soc.j2.in @@ -60,11 +60,23 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES_WITH_LABELS }} +{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS crystal_b {{kpath.length}} {% for point in kpath -%} diff --git a/assets/applications/input_files_templates/espresso/pw_esm.j2.in b/assets/applications/input_files_templates/espresso/pw_esm.j2.in index c7540da8..f42f0af8 100644 --- a/assets/applications/input_files_templates/espresso/pw_esm.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_esm.j2.in @@ -37,10 +37,22 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES }} +{% for specie in input.ATOMIC_SPECIES -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS automatic {% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %} diff --git a/assets/applications/input_files_templates/espresso/pw_esm_relax.j2.in b/assets/applications/input_files_templates/espresso/pw_esm_relax.j2.in index 8e22cd09..446f5667 100644 --- a/assets/applications/input_files_templates/espresso/pw_esm_relax.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_esm_relax.j2.in @@ -37,10 +37,22 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES }} +{% for specie in input.ATOMIC_SPECIES -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS automatic {% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %} diff --git a/assets/applications/input_files_templates/espresso/pw_md.j2.in b/assets/applications/input_files_templates/espresso/pw_md.j2.in index 4684fbb1..1a7364b9 100644 --- a/assets/applications/input_files_templates/espresso/pw_md.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_md.j2.in @@ -38,12 +38,24 @@ / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES }} +{% for specie in input.ATOMIC_SPECIES -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS gamma diff --git a/assets/applications/input_files_templates/espresso/pw_nscf.j2.in b/assets/applications/input_files_templates/espresso/pw_nscf.j2.in index efbe0e46..00a27c6d 100644 --- a/assets/applications/input_files_templates/espresso/pw_nscf.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_nscf.j2.in @@ -35,10 +35,22 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES }} +{% for specie in input.ATOMIC_SPECIES -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS automatic {% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %} diff --git a/assets/applications/input_files_templates/espresso/pw_nscf_dft_j_magn.j2.in b/assets/applications/input_files_templates/espresso/pw_nscf_dft_j_magn.j2.in index e4d58843..39e25469 100644 --- a/assets/applications/input_files_templates/espresso/pw_nscf_dft_j_magn.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_nscf_dft_j_magn.j2.in @@ -42,11 +42,23 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES_WITH_LABELS }} +{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS automatic {% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %} HUBBARD {ortho-atomic} diff --git a/assets/applications/input_files_templates/espresso/pw_nscf_dft_u_magn.j2.in b/assets/applications/input_files_templates/espresso/pw_nscf_dft_u_magn.j2.in index 8f8c0aed..1bdf6a47 100644 --- a/assets/applications/input_files_templates/espresso/pw_nscf_dft_u_magn.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_nscf_dft_u_magn.j2.in @@ -42,11 +42,23 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES_WITH_LABELS }} +{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS automatic {% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %} HUBBARD {ortho-atomic} diff --git a/assets/applications/input_files_templates/espresso/pw_nscf_dft_u_magn_legacy.j2.in b/assets/applications/input_files_templates/espresso/pw_nscf_dft_u_magn_legacy.j2.in index de0ee6a9..535dfa75 100644 --- a/assets/applications/input_files_templates/espresso/pw_nscf_dft_u_magn_legacy.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_nscf_dft_u_magn_legacy.j2.in @@ -48,10 +48,22 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES_WITH_LABELS }} +{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS automatic {% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %} diff --git a/assets/applications/input_files_templates/espresso/pw_nscf_dft_u_soc.j2.in b/assets/applications/input_files_templates/espresso/pw_nscf_dft_u_soc.j2.in index ee5e6856..2ed1871b 100644 --- a/assets/applications/input_files_templates/espresso/pw_nscf_dft_u_soc.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_nscf_dft_u_soc.j2.in @@ -64,11 +64,23 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES_WITH_LABELS }} +{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS automatic {% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %} HUBBARD {ortho-atomic} diff --git a/assets/applications/input_files_templates/espresso/pw_nscf_dft_u_soc_legacy.j2.in b/assets/applications/input_files_templates/espresso/pw_nscf_dft_u_soc_legacy.j2.in index a9736f7c..1aca2eca 100644 --- a/assets/applications/input_files_templates/espresso/pw_nscf_dft_u_soc_legacy.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_nscf_dft_u_soc_legacy.j2.in @@ -70,10 +70,22 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES_WITH_LABELS }} +{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS automatic {% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %} diff --git a/assets/applications/input_files_templates/espresso/pw_nscf_dft_v_magn.j2.in b/assets/applications/input_files_templates/espresso/pw_nscf_dft_v_magn.j2.in index 14d71073..ef693912 100644 --- a/assets/applications/input_files_templates/espresso/pw_nscf_dft_v_magn.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_nscf_dft_v_magn.j2.in @@ -42,11 +42,23 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES_WITH_LABELS }} +{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS automatic {% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %} HUBBARD {ortho-atomic} diff --git a/assets/applications/input_files_templates/espresso/pw_nscf_magn.j2.in b/assets/applications/input_files_templates/espresso/pw_nscf_magn.j2.in index 0be82431..7b44594b 100644 --- a/assets/applications/input_files_templates/espresso/pw_nscf_magn.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_nscf_magn.j2.in @@ -42,10 +42,22 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES_WITH_LABELS }} +{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS automatic {% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %} diff --git a/assets/applications/input_files_templates/espresso/pw_nscf_soc.j2.in b/assets/applications/input_files_templates/espresso/pw_nscf_soc.j2.in index 28b6fefa..aa72d325 100644 --- a/assets/applications/input_files_templates/espresso/pw_nscf_soc.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_nscf_soc.j2.in @@ -64,10 +64,22 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES_WITH_LABELS }} +{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS automatic {% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %} diff --git a/assets/applications/input_files_templates/espresso/pw_relax.j2.in b/assets/applications/input_files_templates/espresso/pw_relax.j2.in index 6233913d..925d5fcd 100644 --- a/assets/applications/input_files_templates/espresso/pw_relax.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_relax.j2.in @@ -33,10 +33,22 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES }} +{% for specie in input.ATOMIC_SPECIES -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS automatic {% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %} diff --git a/assets/applications/input_files_templates/espresso/pw_scf.j2.in b/assets/applications/input_files_templates/espresso/pw_scf.j2.in index 818d9996..118c181f 100644 --- a/assets/applications/input_files_templates/espresso/pw_scf.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_scf.j2.in @@ -35,10 +35,22 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES }} +{% for specie in input.ATOMIC_SPECIES -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS automatic {% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %} diff --git a/assets/applications/input_files_templates/espresso/pw_scf_bands_hse.j2.in b/assets/applications/input_files_templates/espresso/pw_scf_bands_hse.j2.in index 4dbe120c..d0d90b42 100644 --- a/assets/applications/input_files_templates/espresso/pw_scf_bands_hse.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_scf_bands_hse.j2.in @@ -35,11 +35,23 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES }} +{% for specie in input.ATOMIC_SPECIES -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS crystal {{ '{{' }} {{ explicitKPath.length }} {% raw %} + KPOINTS|length {% endraw %} {{ '}}' }} {% raw %} diff --git a/assets/applications/input_files_templates/espresso/pw_scf_dft_j.j2.in b/assets/applications/input_files_templates/espresso/pw_scf_dft_j.j2.in index 388e38c1..c932fab5 100644 --- a/assets/applications/input_files_templates/espresso/pw_scf_dft_j.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_scf_dft_j.j2.in @@ -34,11 +34,23 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES }} +{% for specie in input.ATOMIC_SPECIES -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS automatic {% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %} HUBBARD {ortho-atomic} diff --git a/assets/applications/input_files_templates/espresso/pw_scf_dft_j_magn.j2.in b/assets/applications/input_files_templates/espresso/pw_scf_dft_j_magn.j2.in index 5faef8ef..57f5cc79 100644 --- a/assets/applications/input_files_templates/espresso/pw_scf_dft_j_magn.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_scf_dft_j_magn.j2.in @@ -42,11 +42,23 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES_WITH_LABELS }} +{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS automatic {% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %} HUBBARD {ortho-atomic} diff --git a/assets/applications/input_files_templates/espresso/pw_scf_dft_u.j2.in b/assets/applications/input_files_templates/espresso/pw_scf_dft_u.j2.in index 4d729e3a..07d6bf51 100644 --- a/assets/applications/input_files_templates/espresso/pw_scf_dft_u.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_scf_dft_u.j2.in @@ -34,11 +34,23 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES }} +{% for specie in input.ATOMIC_SPECIES -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS automatic {% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %} HUBBARD {ortho-atomic} diff --git a/assets/applications/input_files_templates/espresso/pw_scf_dft_u_legacy.j2.in b/assets/applications/input_files_templates/espresso/pw_scf_dft_u_legacy.j2.in index 05a0b552..3ff58ba6 100644 --- a/assets/applications/input_files_templates/espresso/pw_scf_dft_u_legacy.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_scf_dft_u_legacy.j2.in @@ -40,10 +40,22 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES }} +{% for specie in input.ATOMIC_SPECIES -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS automatic {% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %} diff --git a/assets/applications/input_files_templates/espresso/pw_scf_dft_u_magn.j2.in b/assets/applications/input_files_templates/espresso/pw_scf_dft_u_magn.j2.in index ede12835..b4faeccd 100644 --- a/assets/applications/input_files_templates/espresso/pw_scf_dft_u_magn.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_scf_dft_u_magn.j2.in @@ -42,11 +42,23 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES_WITH_LABELS }} +{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS automatic {% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %} HUBBARD {ortho-atomic} diff --git a/assets/applications/input_files_templates/espresso/pw_scf_dft_u_magn_legacy.j2.in b/assets/applications/input_files_templates/espresso/pw_scf_dft_u_magn_legacy.j2.in index 85fd76dc..4e3987d6 100644 --- a/assets/applications/input_files_templates/espresso/pw_scf_dft_u_magn_legacy.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_scf_dft_u_magn_legacy.j2.in @@ -48,10 +48,22 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES_WITH_LABELS }} +{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS automatic {% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %} diff --git a/assets/applications/input_files_templates/espresso/pw_scf_dft_u_soc.j2.in b/assets/applications/input_files_templates/espresso/pw_scf_dft_u_soc.j2.in index 1e08efdf..f5ab929e 100644 --- a/assets/applications/input_files_templates/espresso/pw_scf_dft_u_soc.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_scf_dft_u_soc.j2.in @@ -64,11 +64,23 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES_WITH_LABELS }} +{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS automatic {% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %} HUBBARD {ortho-atomic} diff --git a/assets/applications/input_files_templates/espresso/pw_scf_dft_u_soc_legacy.j2.in b/assets/applications/input_files_templates/espresso/pw_scf_dft_u_soc_legacy.j2.in index c51301ff..96aa18d5 100644 --- a/assets/applications/input_files_templates/espresso/pw_scf_dft_u_soc_legacy.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_scf_dft_u_soc_legacy.j2.in @@ -70,10 +70,22 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES_WITH_LABELS }} +{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS automatic {% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %} diff --git a/assets/applications/input_files_templates/espresso/pw_scf_dft_v.j2.in b/assets/applications/input_files_templates/espresso/pw_scf_dft_v.j2.in index d27451ce..57fb2c24 100644 --- a/assets/applications/input_files_templates/espresso/pw_scf_dft_v.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_scf_dft_v.j2.in @@ -34,11 +34,23 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES }} +{% for specie in input.ATOMIC_SPECIES -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS automatic {% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %} HUBBARD {ortho-atomic} diff --git a/assets/applications/input_files_templates/espresso/pw_scf_dft_v_magn.j2.in b/assets/applications/input_files_templates/espresso/pw_scf_dft_v_magn.j2.in index 736aa405..75f489fa 100644 --- a/assets/applications/input_files_templates/espresso/pw_scf_dft_v_magn.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_scf_dft_v_magn.j2.in @@ -42,11 +42,23 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES_WITH_LABELS }} +{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS automatic {% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %} HUBBARD {ortho-atomic} diff --git a/assets/applications/input_files_templates/espresso/pw_scf_hse.j2.in b/assets/applications/input_files_templates/espresso/pw_scf_hse.j2.in index 73f93621..f552d157 100644 --- a/assets/applications/input_files_templates/espresso/pw_scf_hse.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_scf_hse.j2.in @@ -38,10 +38,22 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES }} +{% for specie in input.ATOMIC_SPECIES -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS automatic {% for d in kgrid.dimensions %}{% if d%2 == 0 %}{{d}} {% else %}{{d+1}} {% endif %}{% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %} diff --git a/assets/applications/input_files_templates/espresso/pw_scf_kpt_conv.j2.in b/assets/applications/input_files_templates/espresso/pw_scf_kpt_conv.j2.in index 7ff3c6de..f8352723 100644 --- a/assets/applications/input_files_templates/espresso/pw_scf_kpt_conv.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_scf_kpt_conv.j2.in @@ -32,10 +32,22 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES }} +{% for specie in input.ATOMIC_SPECIES -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS automatic {% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0{% endraw %} diff --git a/assets/applications/input_files_templates/espresso/pw_scf_magn.j2.in b/assets/applications/input_files_templates/espresso/pw_scf_magn.j2.in index f0a65d15..70ab95f4 100644 --- a/assets/applications/input_files_templates/espresso/pw_scf_magn.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_scf_magn.j2.in @@ -42,10 +42,22 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES_WITH_LABELS }} +{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS automatic {% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %} diff --git a/assets/applications/input_files_templates/espresso/pw_scf_soc.j2.in b/assets/applications/input_files_templates/espresso/pw_scf_soc.j2.in index 057dc617..6e17ea91 100644 --- a/assets/applications/input_files_templates/espresso/pw_scf_soc.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_scf_soc.j2.in @@ -64,10 +64,22 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES_WITH_LABELS }} +{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS automatic {% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %} diff --git a/assets/applications/input_files_templates/espresso/pw_vc_relax.j2.in b/assets/applications/input_files_templates/espresso/pw_vc_relax.j2.in index b8c6be06..44b1899a 100644 --- a/assets/applications/input_files_templates/espresso/pw_vc_relax.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_vc_relax.j2.in @@ -32,10 +32,22 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES }} +{% for specie in input.ATOMIC_SPECIES -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS automatic {% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %} diff --git a/assets/applications/input_files_templates/espresso/pw_vc_relax_conv.j2.in b/assets/applications/input_files_templates/espresso/pw_vc_relax_conv.j2.in index 4ef888e3..710d0288 100644 --- a/assets/applications/input_files_templates/espresso/pw_vc_relax_conv.j2.in +++ b/assets/applications/input_files_templates/espresso/pw_vc_relax_conv.j2.in @@ -32,10 +32,22 @@ &CELL / ATOMIC_SPECIES -{{ input.ATOMIC_SPECIES }} +{% for specie in input.ATOMIC_SPECIES -%} +{{ specie.X }} {{ specie.Mass_X|sprintf("%f") }} {{ specie.PseudoPot_X }} +{% endfor %} ATOMIC_POSITIONS crystal -{{ input.ATOMIC_POSITIONS }} +{%- set print_constraints = false %} +{%- for position in input.ATOMIC_POSITIONS %} + {%- if position["if_pos(1)"] != 1 or position["if_pos(2)"] != 1 or position["if_pos(3)"] != 1 %} + {%- set print_constraints = true %} + {%- endif %} +{%- endfor %} +{% for position in input.ATOMIC_POSITIONS -%} +{{ position.X|sprintf("%-3s") }} {{ position.x|sprintf("%14.9f") }} {{ position.y|sprintf("%14.9f") }} {{ position.z|sprintf("%14.9f") }}{% if print_constraints %} {{ position["if_pos(1)"] }} {{ position["if_pos(2)"] }} {{ position["if_pos(3)"] }}{% endif %} +{% endfor %} CELL_PARAMETERS angstrom -{{ input.CELL_PARAMETERS }} +{{ input.CELL_PARAMETERS.v1[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v2[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf("%14.9f") }} +{{ input.CELL_PARAMETERS.v3[0]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf("%14.9f") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf("%14.9f") }} K_POINTS automatic {% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0{% endraw %} diff --git a/dist/js/application.d.ts b/dist/js/application.d.ts index 5bfbc511..edb4fd29 100644 --- a/dist/js/application.d.ts +++ b/dist/js/application.d.ts @@ -1,12 +1,12 @@ -import type { TemplateSchema } from "@mat3ra/esse/dist/js/types"; +import type { ApplicationSchema, TemplateSchema } from "@mat3ra/esse/dist/js/types"; import { Standata } from "./base"; -import { ApplicationExecutableTree, ApplicationVersionsMapType, DefaultApplicationConfig } from "./types/application"; +import { ApplicationVersionsMapType } from "./types/application"; export declare enum TAGS { DEFAULT = "default", DEFAULT_VERSION = "default_version", DEFAULT_BUILD = "default_build" } -export declare class ApplicationStandata extends Standata { +export declare class ApplicationStandata extends Standata { static runtimeData: { filesMapByName: { "espresso/espresso_gnu_6.3.json": { @@ -66,7 +66,7 @@ export declare class ApplicationStandata extends Standata; getAllAppTemplates(): TemplateSchema[]; getAllAppTree(): { espresso: { @@ -1446,11 +1446,17 @@ export declare class ApplicationStandata extends Standata entity.name === appName); } static getDefaultVersionForApplication(appName) { - const applicationVersionsMap = new applicationVersionMap_1.ApplicationVersionsMap(applicationVersionsMapByApplication_json_1.default[appName]); + const applicationVersionsMap = new applicationVersionMap_1.ApplicationVersionsMap(APP_VERSIONS[appName]); return applicationVersionsMap.defaultVersion; } static getDefaultBuildForApplicationAndVersion(appName, version) { - const applicationVersionsMap = new applicationVersionMap_1.ApplicationVersionsMap(applicationVersionsMapByApplication_json_1.default[appName]); + const applicationVersionsMap = new applicationVersionMap_1.ApplicationVersionsMap(APP_VERSIONS[appName]); const versionConfig = applicationVersionsMap.versionConfigs.find((config) => config.version === version && config.isDefault); if (!versionConfig) { throw new Error(`No default build found for ${appName} with version ${version}`); diff --git a/dist/js/cli.js b/dist/js/cli.js index 5e556ebf..48a13b20 100644 --- a/dist/js/cli.js +++ b/dist/js/cli.js @@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? ( }) : function(o, v) { o["default"] = v; }); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; +var __importStar = (this && this.__importStar) || (function () { + var ownKeys = function(o) { + ownKeys = Object.getOwnPropertyNames || function (o) { + var ar = []; + for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; + return ar; + }; + return ownKeys(o); + }; + return function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); + __setModuleDefault(result, mod); + return result; + }; +})(); var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; diff --git a/dist/js/method.js b/dist/js/method.js index 37f27952..14d5cb18 100644 --- a/dist/js/method.js +++ b/dist/js/method.js @@ -5,8 +5,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) { Object.defineProperty(exports, "__esModule", { value: true }); exports.MethodStandata = void 0; const base_1 = require("./base"); -const methods_json_1 = __importDefault(require("./runtime_data/methods.json")); const modelMethodFilter_1 = require("./modelMethodFilter"); +const methods_json_1 = __importDefault(require("./runtime_data/methods.json")); const category_1 = require("./utils/category"); class MethodStandata extends base_1.Standata { getByName(name) { diff --git a/dist/js/modelMethodFilter.js b/dist/js/modelMethodFilter.js index c858b04d..9fccc16d 100644 --- a/dist/js/modelMethodFilter.js +++ b/dist/js/modelMethodFilter.js @@ -3,7 +3,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); -exports.filterMethodsByModel = exports.ModelMethodFilter = void 0; +exports.ModelMethodFilter = void 0; +exports.filterMethodsByModel = filterMethodsByModel; const modelMethodMap_json_1 = __importDefault(require("./runtime_data/models/modelMethodMap.json")); class ModelMethodFilter { constructor() { @@ -85,4 +86,3 @@ function filterMethodsByModel({ methodList, model, }) { const modelMethodFilter = new ModelMethodFilter(); return modelMethodFilter.getCompatibleMethods(model, methodList); } -exports.filterMethodsByModel = filterMethodsByModel; diff --git a/dist/js/runtime_data/applications.json b/dist/js/runtime_data/applications.json index a4540716..a01c314a 100644 --- a/dist/js/runtime_data/applications.json +++ b/dist/js/runtime_data/applications.json @@ -1 +1 @@ -{"filesMapByName":{"espresso/espresso_gnu_6.3.json":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"nwchem/nwchem_gnu_7.0.2.json":{"build":"GNU","isDefault":true,"name":"nwchem","shortName":"nwchem","summary":"NWChem","version":"7.0.2"},"python/python_gnu_3.10.13.json":{"build":"GNU","isDefault":true,"name":"python","shortName":"py","summary":"Python Script","version":"3.10.13"},"shell/shell_gnu_5.1.8.json":{"build":"GNU","isDefault":true,"name":"shell","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"vasp/vasp_gnu_5.4.4.json":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"}},"standataConfig":{"categories":{"defaults":["default_version","default_build","default"],"language_type":["scripting","compiled"],"model":["atomistic","macroscopic","mesoscopic","quantum-mechanical","statistical"],"purpose":["modeling","programming_language"]},"entities":[{"categories":["quantum-mechanical","modeling","compiled","default_version","default_build","default"],"filename":"espresso/espresso_gnu_6.3.json"},{"categories":["quantum-mechanical","modeling","compiled","default_version","default_build","default"],"filename":"vasp/vasp_gnu_5.4.4.json"},{"categories":["quantum-mechanical","modeling","compiled","default_version","default_build","default"],"filename":"nwchem/nwchem_gnu_7.0.2.json"},{"categories":["programming_language","scripting","default_version","default"],"filename":"python/python_gnu_3.10.13.json"},{"categories":["programming_language","scripting","default_version","default"],"filename":"shell/shell_gnu_5.1.8.json"}]}} +{ "filesMapByName": { "espresso/espresso_gnu_6.3.json": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "nwchem/nwchem_gnu_7.0.2.json": { "build": "GNU", "isDefault": true, "name": "nwchem", "shortName": "nwchem", "summary": "NWChem", "version": "7.0.2" }, "python/python_gnu_3.10.13.json": { "build": "GNU", "isDefault": true, "name": "python", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "shell/shell_gnu_5.1.8.json": { "build": "GNU", "isDefault": true, "name": "shell", "shortName": "sh", "summary": "Shell Script", "version": "5.1.8" }, "vasp/vasp_gnu_5.4.4.json": { "build": "GNU", "isDefault": true, "isLicensed": true, "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "version": "5.4.4" } }, "standataConfig": { "categories": { "defaults": ["default_version", "default_build", "default"], "language_type": ["scripting", "compiled"], "model": ["atomistic", "macroscopic", "mesoscopic", "quantum-mechanical", "statistical"], "purpose": ["modeling", "programming_language"] }, "entities": [{ "categories": ["quantum-mechanical", "modeling", "compiled", "default_version", "default_build", "default"], "filename": "espresso/espresso_gnu_6.3.json" }, { "categories": ["quantum-mechanical", "modeling", "compiled", "default_version", "default_build", "default"], "filename": "vasp/vasp_gnu_5.4.4.json" }, { "categories": ["quantum-mechanical", "modeling", "compiled", "default_version", "default_build", "default"], "filename": "nwchem/nwchem_gnu_7.0.2.json" }, { "categories": ["programming_language", "scripting", "default_version", "default"], "filename": "python/python_gnu_3.10.13.json" }, { "categories": ["programming_language", "scripting", "default_version", "default"], "filename": "shell/shell_gnu_5.1.8.json" }] } } diff --git a/dist/js/runtime_data/applications/applicationVersionsMapByApplication.json b/dist/js/runtime_data/applications/applicationVersionsMapByApplication.json index 7fddd66c..e6db3bc9 100644 --- a/dist/js/runtime_data/applications/applicationVersionsMapByApplication.json +++ b/dist/js/runtime_data/applications/applicationVersionsMapByApplication.json @@ -1 +1 @@ -{"espresso":{"defaultVersion":"6.3","name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","versions":[{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3"}]},"nwchem":{"defaultVersion":"7.0.2","name":"nwchem","shortName":"nwchem","summary":"NWChem","versions":[{"build":"GNU","isDefault":true,"version":"7.0.2"}]},"python":{"defaultVersion":"3.10.13","name":"python","shortName":"py","summary":"Python Script","versions":[{"build":"GNU","isDefault":true,"version":"3.10.13"}]},"shell":{"defaultVersion":"5.1.8","name":"shell","shortName":"sh","summary":"Shell Script","versions":[{"build":"GNU","isDefault":true,"version":"5.1.8"}]},"vasp":{"defaultVersion":"5.4.4","isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","versions":[{"build":"GNU","isDefault":true,"version":"5.4.4"}]}} +{ "espresso": { "defaultVersion": "6.3", "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "versions": [{ "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "version": "6.3" }] }, "nwchem": { "defaultVersion": "7.0.2", "name": "nwchem", "shortName": "nwchem", "summary": "NWChem", "versions": [{ "build": "GNU", "isDefault": true, "version": "7.0.2" }] }, "python": { "defaultVersion": "3.10.13", "name": "python", "shortName": "py", "summary": "Python Script", "versions": [{ "build": "GNU", "isDefault": true, "version": "3.10.13" }] }, "shell": { "defaultVersion": "5.1.8", "name": "shell", "shortName": "sh", "summary": "Shell Script", "versions": [{ "build": "GNU", "isDefault": true, "version": "5.1.8" }] }, "vasp": { "defaultVersion": "5.4.4", "isLicensed": true, "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "versions": [{ "build": "GNU", "isDefault": true, "version": "5.4.4" }] } } diff --git a/dist/js/runtime_data/applications/executableFlavorMapByApplication.json b/dist/js/runtime_data/applications/executableFlavorMapByApplication.json index 5daf2ddf..38b146cf 100644 --- a/dist/js/runtime_data/applications/executableFlavorMapByApplication.json +++ b/dist/js/runtime_data/applications/executableFlavorMapByApplication.json @@ -1 +1 @@ -{"espresso":{"abcoeff_to_eps.x":{"flavors":{"abcoeff_to_eps_simple":{"applicationName":"espresso","executableName":"abcoeff_to_eps.x","input":[{"name":"abcoeff_to_eps_simple.in"}],"monitors":["standard_output"],"results":[]}},"monitors":["standard_output"],"results":[]},"average.x":{"flavors":{"average":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":["standard_output"],"results":[]},"average_potential":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":["standard_output"],"results":["average_potential_profile"]}},"monitors":["standard_output"],"results":["average_potential_profile"]},"bands.x":{"flavors":{"bands":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"]},"bands_spin_dn":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_dn.in"}],"monitors":["standard_output"]},"bands_spin_up":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_up.in"}],"monitors":["standard_output"]}},"monitors":["standard_output"],"results":["band_structure"]},"cp.x":{"flavors":{"cp":{"applicationName":"espresso","executableName":"cp.x","input":[{"name":"cp.in"}],"isDefault":true,"monitors":["standard_output"],"results":[]},"cp_wf":{"applicationName":"espresso","executableName":"cp.x","input":[{"name":"cp_wf.in"}],"monitors":["standard_output"],"results":[]}},"monitors":["standard_output"],"results":[]},"dos.x":{"flavors":{"dos":{"applicationName":"espresso","executableName":"dos.x","input":[{"name":"dos.in"}],"monitors":["standard_output"],"results":["density_of_states"]}},"monitors":["standard_output"],"results":["density_of_states"]},"dynmat.x":{"flavors":{"dynmat":{"applicationName":"espresso","executableName":"dynmat.x","input":[{"name":"dynmat_grid.in"}],"monitors":["standard_output"],"results":[]}},"monitors":["standard_output"],"results":[]},"epsilon.x":{"flavors":{"dielectric_tensor":{"applicationName":"espresso","executableName":"epsilon.x","input":[{"name":"epsilon.in"}],"monitors":["standard_output"],"results":["dielectric_tensor"]}},"monitors":["standard_output"],"results":["dielectric_tensor"]},"gw.x":{"flavors":{"gw_bands_full_frequency":{"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_full_frequency.in"}],"monitors":["standard_output"],"results":["band_structure","fermi_energy","band_gaps"]},"gw_bands_plasmon_pole":{"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_plasmon_pole.in"}],"monitors":["standard_output"],"results":["band_structure","fermi_energy","band_gaps"]}},"monitors":["standard_output"],"results":["band_structure","fermi_energy","band_gaps"]},"gww.x":{"flavors":{"gww_simple":{"applicationName":"espresso","executableName":"gww.x","input":[{"name":"gww_simple.in"}],"monitors":["standard_output"],"results":[]}},"monitors":["standard_output"],"results":[]},"head.x":{"flavors":{"head_simple":{"applicationName":"espresso","executableName":"head.x","input":[{"name":"head_simple.in"}],"monitors":["standard_output"],"results":[]}},"monitors":["standard_output"],"results":[]},"hp.x":{"flavors":{"hp":{"applicationName":"espresso","executableName":"hp.x","input":[{"name":"hp.in"}],"monitors":["standard_output"],"results":["hubbard_u","hubbard_v_nn","hubbard_v"]}},"monitors":["standard_output"],"results":["hubbard_u","hubbard_v_nn","hubbard_v"],"supportedApplicationVersions":["7.0","7.2","7.3"]},"matdyn.x":{"flavors":{"matdyn_grid":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":["standard_output"],"results":["phonon_dos"]},"matdyn_path":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":["standard_output"],"results":["phonon_dispersions"]}},"monitors":["standard_output"],"results":["phonon_dos","phonon_dispersions"]},"neb.x":{"flavors":{"neb":{"applicationName":"espresso","executableName":"neb.x","input":[{"name":"neb.in"}],"isMultiMaterial":true,"monitors":["standard_output"],"results":["reaction_energy_barrier","reaction_energy_profile"]}},"monitors":["standard_output"],"results":["reaction_energy_barrier","reaction_energy_profile"]},"ph.x":{"flavors":{"ph_gamma":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"monitors":["standard_output"],"results":["zero_point_energy"]},"ph_grid":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":["standard_output"],"results":["phonon_dos"]},"ph_grid_restart":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid_restart.in"}],"monitors":["standard_output"],"results":[]},"ph_init_qpoints":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_init_qpoints.in"}],"monitors":["standard_output"],"results":[]},"ph_path":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_path.in"}],"monitors":["standard_output"],"results":["phonon_dispersions"]},"ph_single_irr_qpt":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_single_irr_qpt.in"}],"monitors":["standard_output"],"results":[]}},"monitors":["standard_output"],"results":["phonon_dos","phonon_dispersions","zero_point_energy"]},"pp.x":{"flavors":{"pp_density":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_density.in"}],"monitors":["standard_output"],"results":[]},"pp_electrostatic_potential":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":["standard_output"],"results":[]},"pp_wfn":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"monitors":["standard_output"],"results":["wavefunction_amplitude"]}},"monitors":["standard_output"],"results":[]},"projwfc.x":{"flavors":{"projwfc":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":["standard_output"],"results":["density_of_states"]}},"monitors":["standard_output"],"results":["density_of_states"]},"pw.x":{"flavors":{"pw_bands":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":["standard_output"],"results":["band_structure"]},"pw_bands_dft_u+j_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_dft_j_magn.in"}],"monitors":["standard_output"],"results":["band_structure"],"supportedApplicationVersions":["7.2","7.3"]},"pw_bands_dft_u+v_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_dft_v_magn.in"}],"monitors":["standard_output"],"results":["band_structure"],"supportedApplicationVersions":["7.2","7.3"]},"pw_bands_dft_u_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_dft_u_magn.in"}],"monitors":["standard_output"],"results":["band_structure"],"supportedApplicationVersions":["7.2","7.3"]},"pw_bands_dft_u_magn_legacy":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_dft_u_magn_legacy.in"}],"monitors":["standard_output"],"results":["band_structure"],"supportedApplicationVersions":["6.3","6.4.1","6.5.0","6.6.0","6.7.0","6.8.0","7.0"]},"pw_bands_dft_u_soc":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_dft_u_soc.in"}],"monitors":["standard_output"],"results":["band_structure"],"supportedApplicationVersions":["7.2","7.3"]},"pw_bands_dft_u_soc_legacy":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_dft_u_soc_legacy.in"}],"monitors":["standard_output"],"results":["band_structure"],"supportedApplicationVersions":["6.3","6.4.1","6.5.0","6.6.0","6.7.0","6.8.0","7.0"]},"pw_bands_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_magn.in"}],"monitors":["standard_output"],"results":["band_structure"]},"pw_bands_soc":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_soc.in"}],"monitors":["standard_output"],"results":["band_structure"]},"pw_esm":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm.in"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","potential_profile","charge_density_profile"]},"pw_esm_relax":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm_relax.in"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","potential_profile","charge_density_profile"]},"pw_md":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_md.in"}],"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},"pw_nscf":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":["standard_output"],"results":["fermi_energy","band_gaps"]},"pw_nscf_dft_u+j_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf_dft_j_magn.in"}],"monitors":["standard_output"],"results":["fermi_energy","band_gaps"],"supportedApplicationVersions":["7.2","7.3"]},"pw_nscf_dft_u+v_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf_dft_v_magn.in"}],"monitors":["standard_output"],"results":["fermi_energy","band_gaps"],"supportedApplicationVersions":["7.2","7.3"]},"pw_nscf_dft_u_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf_dft_u_magn.in"}],"monitors":["standard_output"],"results":["fermi_energy","band_gaps"],"supportedApplicationVersions":["7.2","7.3"]},"pw_nscf_dft_u_magn_legacy":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf_dft_u_magn_legacy.in"}],"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"supportedApplicationVersions":["6.3","6.4.1","6.5.0","6.6.0","6.7.0","6.8.0","7.0"]},"pw_nscf_dft_u_soc":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf_dft_u_soc.in"}],"monitors":["standard_output"],"results":["fermi_energy","band_gaps"],"supportedApplicationVersions":["7.2","7.3"]},"pw_nscf_dft_u_soc_legacy":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf_dft_u_soc_legacy.in"}],"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"supportedApplicationVersions":["6.3","6.4.1","6.5.0","6.6.0","6.7.0","6.8.0","7.0"]},"pw_nscf_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf_magn.in"}],"monitors":["standard_output"],"results":["fermi_energy","band_gaps"]},"pw_nscf_soc":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf_soc.in"}],"monitors":["standard_output"],"results":["fermi_energy","band_gaps"]},"pw_relax":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_relax.in"}],"monitors":["standard_output","convergence_electronic","convergence_ionic"],"results":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"]},"pw_scf":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},"pw_scf_bands_hse":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_bands_hse.in"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"]},"pw_scf_dft_u":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_dft_u.in"}],"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"supportedApplicationVersions":["7.2","7.3"]},"pw_scf_dft_u+j":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_dft_j.in"}],"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"supportedApplicationVersions":["7.2","7.3"]},"pw_scf_dft_u+j_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_dft_j_magn.in"}],"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"supportedApplicationVersions":["7.2","7.3"]},"pw_scf_dft_u+v":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_dft_v.in"}],"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"supportedApplicationVersions":["7.2","7.3"]},"pw_scf_dft_u+v_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_dft_v_magn.in"}],"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"supportedApplicationVersions":["7.2","7.3"]},"pw_scf_dft_u_legacy":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_dft_u_legacy.in"}],"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"supportedApplicationVersions":["6.3","6.4.1","6.5.0","6.6.0","6.7.0","6.8.0","7.0"]},"pw_scf_dft_u_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_dft_u_magn.in"}],"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"supportedApplicationVersions":["7.2","7.3"]},"pw_scf_dft_u_magn_legacy":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_dft_u_magn_legacy.in"}],"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"supportedApplicationVersions":["6.3","6.4.1","6.5.0","6.6.0","6.7.0","6.8.0","7.0"]},"pw_scf_dft_u_soc":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_dft_u_soc.in"}],"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"supportedApplicationVersions":["7.2","7.3"]},"pw_scf_dft_u_soc_legacy":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_dft_u_soc_legacy.in"}],"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"supportedApplicationVersions":["6.3","6.4.1","6.5.0","6.6.0","6.7.0","6.8.0","7.0"]},"pw_scf_hse":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_hse.in"}],"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},"pw_scf_kpt_conv":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_kpt_conv.in"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor"]},"pw_scf_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_magn.in"}],"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},"pw_scf_soc":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_soc.in"}],"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},"pw_vc-relax":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"monitors":["standard_output","convergence_electronic","convergence_ionic"],"results":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"]}},"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"results":["atomic_forces","band_gaps","band_structure","charge_density_profile","density_of_states","fermi_energy","final_structure","magnetic_moments","potential_profile","pressure","reaction_energy_barrier","reaction_energy_profile","stress_tensor","total_energy","total_energy_contributions","total_force"]},"pw4gww.x":{"flavors":{"pw4gww_simple":{"applicationName":"espresso","executableName":"pw4gww.x","input":[{"name":"pw4gww_simple.in"}],"monitors":["standard_output"],"results":[]}},"monitors":["standard_output"],"results":[]},"q2r.x":{"flavors":{"q2r":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":["standard_output"],"results":[]}},"monitors":["standard_output"],"results":[]},"simple.x":{"flavors":{"simple":{"applicationName":"espresso","executableName":"simple.x","input":[{"name":"simple.in"}],"monitors":["standard_output"],"results":[]}},"monitors":["standard_output"],"results":[]},"simple_bse.x":{"flavors":{"simple_bse":{"applicationName":"espresso","executableName":"simple_bse.x","input":[{"name":"simple_bse.in"}],"monitors":["standard_output"],"results":[]}},"monitors":["standard_output"],"results":[]},"simple_ip.x":{"flavors":{"simple_ip":{"applicationName":"espresso","executableName":"simple_ip.x","input":[{"name":"simple_ip.in"}],"monitors":["standard_output"],"results":[]}},"monitors":["standard_output"],"results":[]}},"nwchem":{"nwchem":{"flavors":{"nwchem_total_energy":{"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":["standard_output"],"results":["total_energy","total_energy_contributions"]}},"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":["standard_output"],"postProcessors":["error_handler"],"results":["total_energy","total_energy_contributions"]}},"python":{"python":{"flavors":{"espresso_extract_kpoints":{"applicationName":"python","executableName":"python","input":[{"name":"espresso_extract_kpoints.py"},{"name":"requirements.txt","templateName":"requirements_empty.txt"}],"monitors":["standard_output"]},"espresso_xml_get_qpt_irr":{"applicationName":"python","executableName":"python","input":[{"name":"espresso_xml_get_qpt_irr.py"}],"monitors":["standard_output"]},"generic:post_processing:plot:matplotlib":{"applicationName":"python","executableName":"python","input":[{"name":"plot.py","templateName":"matplotlib_basic.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":["standard_output"]},"generic:processing:find_extrema:scipy":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":["standard_output"]},"hello_world":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":["standard_output"]},"plot_wavefunction":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"monitors":["standard_output"],"results":[{"basename":"wf_r.png","filetype":"image","name":"file_content"}]},"pyml:custom":{"applicationName":"python","executableName":"python","input":[{"name":"pyml_custom.py","templateName":"pyml_custom.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"]},"pyml:data_input:read_csv:pandas":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"]},"pyml:data_input:train_test_split:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"]},"pyml:model:adaboosted_trees_regression:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_adaboosted_trees_regression_sklearn.py","templateName":"model_adaboosted_trees_regression_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["workflow:pyml_predict"]},"pyml:model:bagged_trees_regression:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_bagged_trees_regression_sklearn.py","templateName":"model_bagged_trees_regression_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["workflow:pyml_predict"]},"pyml:model:extreme_gradboosted_trees_classification:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_extreme_gradboosted_trees_classification_sklearn.py","templateName":"model_extreme_gradboosted_trees_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["workflow:pyml_predict"]},"pyml:model:extreme_gradboosted_trees_regression:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_extreme_gradboosted_trees_regression_sklearn.py","templateName":"model_extreme_gradboosted_trees_regression_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["workflow:pyml_predict"]},"pyml:model:gradboosted_trees_classification:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_gradboosted_trees_classification_sklearn.py","templateName":"model_gradboosted_trees_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["workflow:pyml_predict"]},"pyml:model:gradboosted_trees_regression:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_gradboosted_trees_regression_sklearn.py","templateName":"model_gradboosted_trees_regression_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["workflow:pyml_predict"]},"pyml:model:k_means_clustering:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_k_means_clustering_sklearn.py","templateName":"model_k_means_clustering_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["workflow:pyml_predict"]},"pyml:model:kernel_ridge_regression:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_kernel_ridge_regression_sklearn.py","templateName":"model_kernel_ridge_regression_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["workflow:pyml_predict"]},"pyml:model:lasso_regression:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_lasso_regression_sklearn.py","templateName":"model_lasso_regression_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["workflow:pyml_predict"]},"pyml:model:multilayer_perceptron:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["workflow:pyml_predict"]},"pyml:model:random_forest_classification:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["workflow:pyml_predict"]},"pyml:model:random_forest_regression:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_regression_sklearn.py","templateName":"model_random_forest_regression_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["workflow:pyml_predict"]},"pyml:model:ridge_regression:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_ridge_regression_sklearn.py","templateName":"model_ridge_regression_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["workflow:pyml_predict"]},"pyml:post_processing:parity_plot:matplotlib":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["file_content"]},"pyml:post_processing:pca_2d_clusters:matplotlib":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_pca_2d_clusters_matplotlib.py","templateName":"post_processing_pca_2d_clusters_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["file_content"]},"pyml:post_processing:roc_curve:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["file_content"]},"pyml:pre_processing:min_max_scaler:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_min_max_sklearn.py","templateName":"pre_processing_min_max_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"]},"pyml:pre_processing:remove_duplicates:pandas":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_remove_duplicates_pandas.py","templateName":"pre_processing_remove_duplicates_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"]},"pyml:pre_processing:remove_missing:pandas":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_remove_missing_pandas.py","templateName":"pre_processing_remove_missing_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"]},"pyml:pre_processing:standardization:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"]},"pyml:setup_variables_packages":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"]}},"isDefault":true,"monitors":["standard_output"],"results":["file_content","workflow:pyml_predict"]}},"shell":{"sh":{"flavors":{"bash_vasp_prepare_neb_images":{"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"isMultiMaterial":true,"monitors":["standard_output"]},"espresso_collect_dynmat":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_collect_dynmat.sh"}],"monitors":["standard_output"]},"espresso_link_outdir_save":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_link_outdir_save.sh"}],"monitors":["standard_output"]},"hello_world":{"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":["standard_output"]},"job_espresso_pw_scf":{"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"monitors":["standard_output"]}},"isDefault":true,"monitors":["standard_output"],"results":["atomic_forces","band_gaps","band_structure","density_of_states","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy","final_structure","magnetic_moments","reaction_energy_barrier","reaction_energy_profile","potential_profile","charge_density_profile"]}},"vasp":{"vasp":{"flavors":{"vasp":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"]},"vasp_bands":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":["standard_output","convergence_electronic"],"results":["band_structure"]},"vasp_bands_hse":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS_HSE"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"results":["band_structure"]},"vasp_hse":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_HSE"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"]},"vasp_kpt_conv":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"]},"vasp_neb":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB"},{"name":"KPOINTS","templateName":"KPOINTS"}],"isMultiMaterial":true,"monitors":["standard_output"],"results":["reaction_energy_barrier","reaction_energy_profile"]},"vasp_neb_final":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"isMultiMaterial":true,"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"]},"vasp_neb_initial":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"isMultiMaterial":true,"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"]},"vasp_nscf":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":["standard_output","convergence_electronic"],"results":["band_gaps","fermi_energy"]},"vasp_nscf_hse":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS_HSE"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"results":["band_gaps","fermi_energy"]},"vasp_relax":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":["standard_output","convergence_electronic","convergence_ionic"],"postProcessors":["prepare_restart"],"results":["total_energy","atomic_forces","fermi_energy","pressure","stress_tensor","total_force","final_structure"]},"vasp_symprec":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_SYMPREC"},{"name":"KPOINTS"},{"name":"POSCAR"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"]},"vasp_vc_relax":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_VC_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":["standard_output","convergence_electronic","convergence_ionic"],"postProcessors":["prepare_restart"],"results":["total_energy","atomic_forces","fermi_energy","pressure","stress_tensor","total_force","final_structure"]},"vasp_vc_relax_conv":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_VC_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":["standard_output","convergence_electronic","convergence_ionic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"]},"vasp_zpe":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_ZPE"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":["standard_output","convergence_electronic","convergence_ionic"],"results":["total_energy","fermi_energy","pressure","atomic_forces","stress_tensor","total_force","zero_point_energy"]}},"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"results":["atomic_forces","band_gaps","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy","final_structure","magnetic_moments","reaction_energy_barrier","reaction_energy_profile","potential_profile","charge_density_profile"]}}} +{ "espresso": { "abcoeff_to_eps.x": { "flavors": { "abcoeff_to_eps_simple": { "applicationName": "espresso", "executableName": "abcoeff_to_eps.x", "input": [{ "name": "abcoeff_to_eps_simple.in" }], "monitors": ["standard_output"], "results": [] } }, "monitors": ["standard_output"], "results": [] }, "average.x": { "flavors": { "average": { "applicationName": "espresso", "executableName": "average.x", "input": [{ "name": "average.in" }], "monitors": ["standard_output"], "results": [] }, "average_potential": { "applicationName": "espresso", "executableName": "average.x", "input": [{ "name": "average.in" }], "monitors": ["standard_output"], "results": ["average_potential_profile"] } }, "monitors": ["standard_output"], "results": ["average_potential_profile"] }, "bands.x": { "flavors": { "bands": { "applicationName": "espresso", "executableName": "bands.x", "input": [{ "name": "bands.in" }], "monitors": ["standard_output"] }, "bands_spin_dn": { "applicationName": "espresso", "executableName": "bands.x", "input": [{ "name": "bands_spin_dn.in" }], "monitors": ["standard_output"] }, "bands_spin_up": { "applicationName": "espresso", "executableName": "bands.x", "input": [{ "name": "bands_spin_up.in" }], "monitors": ["standard_output"] } }, "monitors": ["standard_output"], "results": ["band_structure"] }, "cp.x": { "flavors": { "cp": { "applicationName": "espresso", "executableName": "cp.x", "input": [{ "name": "cp.in" }], "isDefault": true, "monitors": ["standard_output"], "results": [] }, "cp_wf": { "applicationName": "espresso", "executableName": "cp.x", "input": [{ "name": "cp_wf.in" }], "monitors": ["standard_output"], "results": [] } }, "monitors": ["standard_output"], "results": [] }, "dos.x": { "flavors": { "dos": { "applicationName": "espresso", "executableName": "dos.x", "input": [{ "name": "dos.in" }], "monitors": ["standard_output"], "results": ["density_of_states"] } }, "monitors": ["standard_output"], "results": ["density_of_states"] }, "dynmat.x": { "flavors": { "dynmat": { "applicationName": "espresso", "executableName": "dynmat.x", "input": [{ "name": "dynmat_grid.in" }], "monitors": ["standard_output"], "results": [] } }, "monitors": ["standard_output"], "results": [] }, "epsilon.x": { "flavors": { "dielectric_tensor": { "applicationName": "espresso", "executableName": "epsilon.x", "input": [{ "name": "epsilon.in" }], "monitors": ["standard_output"], "results": ["dielectric_tensor"] } }, "monitors": ["standard_output"], "results": ["dielectric_tensor"] }, "gw.x": { "flavors": { "gw_bands_full_frequency": { "applicationName": "espresso", "executableName": "gw.x", "input": [{ "name": "gw_bands_full_frequency.in" }], "monitors": ["standard_output"], "results": ["band_structure", "fermi_energy", "band_gaps"] }, "gw_bands_plasmon_pole": { "applicationName": "espresso", "executableName": "gw.x", "input": [{ "name": "gw_bands_plasmon_pole.in" }], "monitors": ["standard_output"], "results": ["band_structure", "fermi_energy", "band_gaps"] } }, "monitors": ["standard_output"], "results": ["band_structure", "fermi_energy", "band_gaps"] }, "gww.x": { "flavors": { "gww_simple": { "applicationName": "espresso", "executableName": "gww.x", "input": [{ "name": "gww_simple.in" }], "monitors": ["standard_output"], "results": [] } }, "monitors": ["standard_output"], "results": [] }, "head.x": { "flavors": { "head_simple": { "applicationName": "espresso", "executableName": "head.x", "input": [{ "name": "head_simple.in" }], "monitors": ["standard_output"], "results": [] } }, "monitors": ["standard_output"], "results": [] }, "hp.x": { "flavors": { "hp": { "applicationName": "espresso", "executableName": "hp.x", "input": [{ "name": "hp.in" }], "monitors": ["standard_output"], "results": ["hubbard_u", "hubbard_v_nn", "hubbard_v"] } }, "monitors": ["standard_output"], "results": ["hubbard_u", "hubbard_v_nn", "hubbard_v"], "supportedApplicationVersions": ["7.0", "7.2", "7.3"] }, "matdyn.x": { "flavors": { "matdyn_grid": { "applicationName": "espresso", "executableName": "matdyn.x", "input": [{ "name": "matdyn_grid.in" }], "monitors": ["standard_output"], "results": ["phonon_dos"] }, "matdyn_path": { "applicationName": "espresso", "executableName": "matdyn.x", "input": [{ "name": "matdyn_path.in" }], "monitors": ["standard_output"], "results": ["phonon_dispersions"] } }, "monitors": ["standard_output"], "results": ["phonon_dos", "phonon_dispersions"] }, "neb.x": { "flavors": { "neb": { "applicationName": "espresso", "executableName": "neb.x", "input": [{ "name": "neb.in" }], "isMultiMaterial": true, "monitors": ["standard_output"], "results": ["reaction_energy_barrier", "reaction_energy_profile"] } }, "monitors": ["standard_output"], "results": ["reaction_energy_barrier", "reaction_energy_profile"] }, "ph.x": { "flavors": { "ph_gamma": { "applicationName": "espresso", "executableName": "ph.x", "input": [{ "name": "ph_gamma.in" }], "monitors": ["standard_output"], "results": ["zero_point_energy"] }, "ph_grid": { "applicationName": "espresso", "executableName": "ph.x", "input": [{ "name": "ph_grid.in" }], "monitors": ["standard_output"], "results": ["phonon_dos"] }, "ph_grid_restart": { "applicationName": "espresso", "executableName": "ph.x", "input": [{ "name": "ph_grid_restart.in" }], "monitors": ["standard_output"], "results": [] }, "ph_init_qpoints": { "applicationName": "espresso", "executableName": "ph.x", "input": [{ "name": "ph_init_qpoints.in" }], "monitors": ["standard_output"], "results": [] }, "ph_path": { "applicationName": "espresso", "executableName": "ph.x", "input": [{ "name": "ph_path.in" }], "monitors": ["standard_output"], "results": ["phonon_dispersions"] }, "ph_single_irr_qpt": { "applicationName": "espresso", "executableName": "ph.x", "input": [{ "name": "ph_single_irr_qpt.in" }], "monitors": ["standard_output"], "results": [] } }, "monitors": ["standard_output"], "results": ["phonon_dos", "phonon_dispersions", "zero_point_energy"] }, "pp.x": { "flavors": { "pp_density": { "applicationName": "espresso", "executableName": "pp.x", "input": [{ "name": "pp_density.in" }], "monitors": ["standard_output"], "results": [] }, "pp_electrostatic_potential": { "applicationName": "espresso", "executableName": "pp.x", "input": [{ "name": "pp_electrostatic_potential.in" }], "monitors": ["standard_output"], "results": [] } }, "monitors": ["standard_output"], "results": [] }, "projwfc.x": { "flavors": { "projwfc": { "applicationName": "espresso", "executableName": "projwfc.x", "input": [{ "name": "projwfc.in" }], "monitors": ["standard_output"], "results": ["density_of_states"] } }, "monitors": ["standard_output"], "results": ["density_of_states"] }, "pw.x": { "flavors": { "pw_bands": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_bands.in" }], "monitors": ["standard_output"], "results": ["band_structure"] }, "pw_bands_dft_u+j_magn": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_bands_dft_j_magn.in" }], "monitors": ["standard_output"], "results": ["band_structure"], "supportedApplicationVersions": ["7.2", "7.3"] }, "pw_bands_dft_u+v_magn": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_bands_dft_v_magn.in" }], "monitors": ["standard_output"], "results": ["band_structure"], "supportedApplicationVersions": ["7.2", "7.3"] }, "pw_bands_dft_u_magn": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_bands_dft_u_magn.in" }], "monitors": ["standard_output"], "results": ["band_structure"], "supportedApplicationVersions": ["7.2", "7.3"] }, "pw_bands_dft_u_magn_legacy": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_bands_dft_u_magn_legacy.in" }], "monitors": ["standard_output"], "results": ["band_structure"], "supportedApplicationVersions": ["6.3", "6.4.1", "6.5.0", "6.6.0", "6.7.0", "6.8.0", "7.0"] }, "pw_bands_dft_u_soc": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_bands_dft_u_soc.in" }], "monitors": ["standard_output"], "results": ["band_structure"], "supportedApplicationVersions": ["7.2", "7.3"] }, "pw_bands_dft_u_soc_legacy": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_bands_dft_u_soc_legacy.in" }], "monitors": ["standard_output"], "results": ["band_structure"], "supportedApplicationVersions": ["6.3", "6.4.1", "6.5.0", "6.6.0", "6.7.0", "6.8.0", "7.0"] }, "pw_bands_magn": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_bands_magn.in" }], "monitors": ["standard_output"], "results": ["band_structure"] }, "pw_bands_soc": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_bands_soc.in" }], "monitors": ["standard_output"], "results": ["band_structure"] }, "pw_esm": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_esm.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor", "potential_profile", "charge_density_profile"] }, "pw_esm_relax": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_esm_relax.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor", "potential_profile", "charge_density_profile"] }, "pw_md": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_md.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"] }, "pw_nscf": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_nscf.in" }], "monitors": ["standard_output"], "results": ["fermi_energy", "band_gaps"] }, "pw_nscf_dft_u+j_magn": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_nscf_dft_j_magn.in" }], "monitors": ["standard_output"], "results": ["fermi_energy", "band_gaps"], "supportedApplicationVersions": ["7.2", "7.3"] }, "pw_nscf_dft_u+v_magn": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_nscf_dft_v_magn.in" }], "monitors": ["standard_output"], "results": ["fermi_energy", "band_gaps"], "supportedApplicationVersions": ["7.2", "7.3"] }, "pw_nscf_dft_u_magn": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_nscf_dft_u_magn.in" }], "monitors": ["standard_output"], "results": ["fermi_energy", "band_gaps"], "supportedApplicationVersions": ["7.2", "7.3"] }, "pw_nscf_dft_u_magn_legacy": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_nscf_dft_u_magn_legacy.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "supportedApplicationVersions": ["6.3", "6.4.1", "6.5.0", "6.6.0", "6.7.0", "6.8.0", "7.0"] }, "pw_nscf_dft_u_soc": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_nscf_dft_u_soc.in" }], "monitors": ["standard_output"], "results": ["fermi_energy", "band_gaps"], "supportedApplicationVersions": ["7.2", "7.3"] }, "pw_nscf_dft_u_soc_legacy": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_nscf_dft_u_soc_legacy.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "supportedApplicationVersions": ["6.3", "6.4.1", "6.5.0", "6.6.0", "6.7.0", "6.8.0", "7.0"] }, "pw_nscf_magn": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_nscf_magn.in" }], "monitors": ["standard_output"], "results": ["fermi_energy", "band_gaps"] }, "pw_nscf_soc": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_nscf_soc.in" }], "monitors": ["standard_output"], "results": ["fermi_energy", "band_gaps"] }, "pw_relax": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_relax.in" }], "monitors": ["standard_output", "convergence_electronic", "convergence_ionic"], "results": ["total_energy", "fermi_energy", "pressure", "atomic_forces", "total_force", "stress_tensor", "final_structure"] }, "pw_scf": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf.in" }], "isDefault": true, "monitors": ["standard_output", "convergence_electronic"], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"] }, "pw_scf_bands_hse": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_bands_hse.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"] }, "pw_scf_dft_u": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_dft_u.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "supportedApplicationVersions": ["7.2", "7.3"] }, "pw_scf_dft_u+j": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_dft_j.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "supportedApplicationVersions": ["7.2", "7.3"] }, "pw_scf_dft_u+j_magn": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_dft_j_magn.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "supportedApplicationVersions": ["7.2", "7.3"] }, "pw_scf_dft_u+v": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_dft_v.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "supportedApplicationVersions": ["7.2", "7.3"] }, "pw_scf_dft_u+v_magn": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_dft_v_magn.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "supportedApplicationVersions": ["7.2", "7.3"] }, "pw_scf_dft_u_legacy": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_dft_u_legacy.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "supportedApplicationVersions": ["6.3", "6.4.1", "6.5.0", "6.6.0", "6.7.0", "6.8.0", "7.0"] }, "pw_scf_dft_u_magn": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_dft_u_magn.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "supportedApplicationVersions": ["7.2", "7.3"] }, "pw_scf_dft_u_magn_legacy": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_dft_u_magn_legacy.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "supportedApplicationVersions": ["6.3", "6.4.1", "6.5.0", "6.6.0", "6.7.0", "6.8.0", "7.0"] }, "pw_scf_dft_u_soc": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_dft_u_soc.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "supportedApplicationVersions": ["7.2", "7.3"] }, "pw_scf_dft_u_soc_legacy": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_dft_u_soc_legacy.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "supportedApplicationVersions": ["6.3", "6.4.1", "6.5.0", "6.6.0", "6.7.0", "6.8.0", "7.0"] }, "pw_scf_hse": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_hse.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"] }, "pw_scf_kpt_conv": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_kpt_conv.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["total_energy", "fermi_energy", "pressure", "atomic_forces", "total_force", "stress_tensor"] }, "pw_scf_magn": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_magn.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"] }, "pw_scf_soc": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_soc.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"] }, "pw_vc-relax": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_vc_relax.in" }], "monitors": ["standard_output", "convergence_electronic", "convergence_ionic"], "results": ["total_energy", "fermi_energy", "pressure", "atomic_forces", "total_force", "stress_tensor", "final_structure"] } }, "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "postProcessors": ["remove_non_zero_weight_kpoints"], "results": ["atomic_forces", "band_gaps", "band_structure", "charge_density_profile", "density_of_states", "fermi_energy", "final_structure", "magnetic_moments", "potential_profile", "pressure", "reaction_energy_barrier", "reaction_energy_profile", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"] }, "pw4gww.x": { "flavors": { "pw4gww_simple": { "applicationName": "espresso", "executableName": "pw4gww.x", "input": [{ "name": "pw4gww_simple.in" }], "monitors": ["standard_output"], "results": [] } }, "monitors": ["standard_output"], "results": [] }, "q2r.x": { "flavors": { "q2r": { "applicationName": "espresso", "executableName": "q2r.x", "input": [{ "name": "q2r.in" }], "monitors": ["standard_output"], "results": [] } }, "monitors": ["standard_output"], "results": [] }, "simple.x": { "flavors": { "simple": { "applicationName": "espresso", "executableName": "simple.x", "input": [{ "name": "simple.in" }], "monitors": ["standard_output"], "results": [] } }, "monitors": ["standard_output"], "results": [] }, "simple_bse.x": { "flavors": { "simple_bse": { "applicationName": "espresso", "executableName": "simple_bse.x", "input": [{ "name": "simple_bse.in" }], "monitors": ["standard_output"], "results": [] } }, "monitors": ["standard_output"], "results": [] }, "simple_ip.x": { "flavors": { "simple_ip": { "applicationName": "espresso", "executableName": "simple_ip.x", "input": [{ "name": "simple_ip.in" }], "monitors": ["standard_output"], "results": [] } }, "monitors": ["standard_output"], "results": [] } }, "nwchem": { "nwchem": { "flavors": { "nwchem_total_energy": { "applicationName": "nwchem", "executableName": "nwchem", "input": [{ "name": "nwchem_total_energy.inp" }], "isDefault": true, "monitors": ["standard_output"], "results": ["total_energy", "total_energy_contributions"] } }, "hasAdvancedComputeOptions": false, "isDefault": true, "monitors": ["standard_output"], "postProcessors": ["error_handler"], "results": ["total_energy", "total_energy_contributions"] } }, "python": { "python": { "flavors": { "espresso_extract_kpoints": { "applicationName": "python", "executableName": "python", "input": [{ "name": "espresso_extract_kpoints.py" }, { "name": "requirements.txt", "templateName": "requirements_empty.txt" }], "monitors": ["standard_output"] }, "espresso_xml_get_qpt_irr": { "applicationName": "python", "executableName": "python", "input": [{ "name": "espresso_xml_get_qpt_irr.py" }], "monitors": ["standard_output"] }, "generic:post_processing:plot:matplotlib": { "applicationName": "python", "executableName": "python", "input": [{ "name": "plot.py", "templateName": "matplotlib_basic.py" }, { "name": "requirements.txt", "templateName": "processing_requirements.txt" }], "monitors": ["standard_output"] }, "generic:processing:find_extrema:scipy": { "applicationName": "python", "executableName": "python", "input": [{ "name": "find_extrema.py", "templateName": "find_extrema.py" }, { "name": "requirements.txt", "templateName": "processing_requirements.txt" }], "monitors": ["standard_output"] }, "hello_world": { "applicationName": "python", "executableName": "python", "input": [{ "name": "script.py", "templateName": "hello_world.py" }, { "name": "requirements.txt" }], "isDefault": true, "monitors": ["standard_output"] }, "pyml:custom": { "applicationName": "python", "executableName": "python", "input": [{ "name": "pyml_custom.py", "templateName": "pyml_custom.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"] }, "pyml:data_input:read_csv:pandas": { "applicationName": "python", "executableName": "python", "input": [{ "name": "data_input_read_csv_pandas.py", "templateName": "data_input_read_csv_pandas.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"] }, "pyml:data_input:train_test_split:sklearn": { "applicationName": "python", "executableName": "python", "input": [{ "name": "data_input_train_test_split_sklearn.py", "templateName": "data_input_train_test_split_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"] }, "pyml:model:adaboosted_trees_regression:sklearn": { "applicationName": "python", "executableName": "python", "input": [{ "name": "model_adaboosted_trees_regression_sklearn.py", "templateName": "model_adaboosted_trees_regression_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "results": ["workflow:pyml_predict"] }, "pyml:model:bagged_trees_regression:sklearn": { "applicationName": "python", "executableName": "python", "input": [{ "name": "model_bagged_trees_regression_sklearn.py", "templateName": "model_bagged_trees_regression_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "results": ["workflow:pyml_predict"] }, "pyml:model:extreme_gradboosted_trees_classification:sklearn": { "applicationName": "python", "executableName": "python", "input": [{ "name": "model_extreme_gradboosted_trees_classification_sklearn.py", "templateName": "model_extreme_gradboosted_trees_classification_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "results": ["workflow:pyml_predict"] }, "pyml:model:extreme_gradboosted_trees_regression:sklearn": { "applicationName": "python", "executableName": "python", "input": [{ "name": "model_extreme_gradboosted_trees_regression_sklearn.py", "templateName": "model_extreme_gradboosted_trees_regression_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "results": ["workflow:pyml_predict"] }, "pyml:model:gradboosted_trees_classification:sklearn": { "applicationName": "python", "executableName": "python", "input": [{ "name": "model_gradboosted_trees_classification_sklearn.py", "templateName": "model_gradboosted_trees_classification_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "results": ["workflow:pyml_predict"] }, "pyml:model:gradboosted_trees_regression:sklearn": { "applicationName": "python", "executableName": "python", "input": [{ "name": "model_gradboosted_trees_regression_sklearn.py", "templateName": "model_gradboosted_trees_regression_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "results": ["workflow:pyml_predict"] }, "pyml:model:k_means_clustering:sklearn": { "applicationName": "python", "executableName": "python", "input": [{ "name": "model_k_means_clustering_sklearn.py", "templateName": "model_k_means_clustering_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "results": ["workflow:pyml_predict"] }, "pyml:model:kernel_ridge_regression:sklearn": { "applicationName": "python", "executableName": "python", "input": [{ "name": "model_kernel_ridge_regression_sklearn.py", "templateName": "model_kernel_ridge_regression_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "results": ["workflow:pyml_predict"] }, "pyml:model:lasso_regression:sklearn": { "applicationName": "python", "executableName": "python", "input": [{ "name": "model_lasso_regression_sklearn.py", "templateName": "model_lasso_regression_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "results": ["workflow:pyml_predict"] }, "pyml:model:multilayer_perceptron:sklearn": { "applicationName": "python", "executableName": "python", "input": [{ "name": "model_mlp_sklearn.py", "templateName": "model_mlp_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "results": ["workflow:pyml_predict"] }, "pyml:model:random_forest_classification:sklearn": { "applicationName": "python", "executableName": "python", "input": [{ "name": "model_random_forest_classification_sklearn.py", "templateName": "model_random_forest_classification_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "results": ["workflow:pyml_predict"] }, "pyml:model:random_forest_regression:sklearn": { "applicationName": "python", "executableName": "python", "input": [{ "name": "model_random_forest_regression_sklearn.py", "templateName": "model_random_forest_regression_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "results": ["workflow:pyml_predict"] }, "pyml:model:ridge_regression:sklearn": { "applicationName": "python", "executableName": "python", "input": [{ "name": "model_ridge_regression_sklearn.py", "templateName": "model_ridge_regression_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "results": ["workflow:pyml_predict"] }, "pyml:post_processing:parity_plot:matplotlib": { "applicationName": "python", "executableName": "python", "input": [{ "name": "post_processing_parity_plot_matplotlib.py", "templateName": "post_processing_parity_plot_matplotlib.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "results": ["file_content"] }, "pyml:post_processing:pca_2d_clusters:matplotlib": { "applicationName": "python", "executableName": "python", "input": [{ "name": "post_processing_pca_2d_clusters_matplotlib.py", "templateName": "post_processing_pca_2d_clusters_matplotlib.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "results": ["file_content"] }, "pyml:post_processing:roc_curve:sklearn": { "applicationName": "python", "executableName": "python", "input": [{ "name": "post_processing_roc_curve_sklearn.py", "templateName": "post_processing_roc_curve_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "results": ["file_content"] }, "pyml:pre_processing:min_max_scaler:sklearn": { "applicationName": "python", "executableName": "python", "input": [{ "name": "pre_processing_min_max_sklearn.py", "templateName": "pre_processing_min_max_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"] }, "pyml:pre_processing:remove_duplicates:pandas": { "applicationName": "python", "executableName": "python", "input": [{ "name": "pre_processing_remove_duplicates_pandas.py", "templateName": "pre_processing_remove_duplicates_pandas.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"] }, "pyml:pre_processing:remove_missing:pandas": { "applicationName": "python", "executableName": "python", "input": [{ "name": "pre_processing_remove_missing_pandas.py", "templateName": "pre_processing_remove_missing_pandas.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"] }, "pyml:pre_processing:standardization:sklearn": { "applicationName": "python", "executableName": "python", "input": [{ "name": "pre_processing_standardization_sklearn.py", "templateName": "pre_processing_standardization_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"] }, "pyml:setup_variables_packages": { "applicationName": "python", "executableName": "python", "input": [{ "name": "settings.py", "templateName": "pyml_settings.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"] } }, "isDefault": true, "monitors": ["standard_output"], "results": ["file_content", "workflow:pyml_predict"] } }, "shell": { "sh": { "flavors": { "bash_vasp_prepare_neb_images": { "applicationName": "shell", "executableName": "sh", "input": [{ "name": "bash_vasp_prepare_neb_images.sh" }], "isMultiMaterial": true, "monitors": ["standard_output"] }, "espresso_collect_dynmat": { "applicationName": "shell", "executableName": "sh", "input": [{ "name": "espresso_collect_dynmat.sh" }], "monitors": ["standard_output"] }, "espresso_link_outdir_save": { "applicationName": "shell", "executableName": "sh", "input": [{ "name": "espresso_link_outdir_save.sh" }], "monitors": ["standard_output"] }, "hello_world": { "applicationName": "shell", "executableName": "sh", "input": [{ "name": "hello_world.sh" }], "isDefault": true, "monitors": ["standard_output"] }, "job_espresso_pw_scf": { "applicationName": "shell", "executableName": "sh", "input": [{ "name": "job_espresso_pw_scf.sh" }], "monitors": ["standard_output"] } }, "isDefault": true, "monitors": ["standard_output"], "results": ["atomic_forces", "band_gaps", "band_structure", "density_of_states", "fermi_energy", "phonon_dispersions", "phonon_dos", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "zero_point_energy", "final_structure", "magnetic_moments", "reaction_energy_barrier", "reaction_energy_profile", "potential_profile", "charge_density_profile"] } }, "vasp": { "vasp": { "flavors": { "vasp": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR" }, { "name": "KPOINTS" }, { "name": "POSCAR" }], "isDefault": true, "monitors": ["standard_output", "convergence_electronic"], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"] }, "vasp_bands": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_BANDS" }, { "name": "KPOINTS", "templateName": "KPOINTS_BANDS" }, { "name": "POSCAR", "templateName": "" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["band_structure"] }, "vasp_bands_hse": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_BANDS_HSE" }, { "name": "KPOINTS", "templateName": "KPOINTS_BANDS" }, { "name": "POSCAR", "templateName": "" }], "isDefault": false, "monitors": ["standard_output", "convergence_electronic"], "results": ["band_structure"] }, "vasp_hse": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_HSE" }, { "name": "KPOINTS" }, { "name": "POSCAR" }], "isDefault": false, "monitors": ["standard_output", "convergence_electronic"], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"] }, "vasp_kpt_conv": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR" }, { "name": "KPOINTS", "templateName": "KPOINTS_CONV" }, { "name": "POSCAR", "templateName": "POSCAR" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"] }, "vasp_neb": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_NEB" }, { "name": "KPOINTS", "templateName": "KPOINTS" }], "isMultiMaterial": true, "monitors": ["standard_output"], "results": ["reaction_energy_barrier", "reaction_energy_profile"] }, "vasp_neb_final": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_NEB_INITIAL_FINAL" }, { "name": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR_NEB_FINAL" }], "isMultiMaterial": true, "monitors": ["standard_output", "convergence_electronic"], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"] }, "vasp_neb_initial": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_NEB_INITIAL_FINAL" }, { "name": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR_NEB_INITIAL" }], "isMultiMaterial": true, "monitors": ["standard_output", "convergence_electronic"], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"] }, "vasp_nscf": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_BANDS" }, { "name": "KPOINTS", "templateName": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["band_gaps", "fermi_energy"] }, "vasp_nscf_hse": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_BANDS_HSE" }, { "name": "KPOINTS", "templateName": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR" }], "isDefault": false, "monitors": ["standard_output", "convergence_electronic"], "results": ["band_gaps", "fermi_energy"] }, "vasp_relax": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_RELAX" }, { "name": "KPOINTS", "templateName": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR" }], "monitors": ["standard_output", "convergence_electronic", "convergence_ionic"], "postProcessors": ["prepare_restart"], "results": ["total_energy", "atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_force", "final_structure"] }, "vasp_symprec": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_SYMPREC" }, { "name": "KPOINTS" }, { "name": "POSCAR" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"] }, "vasp_vc_relax": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_VC_RELAX" }, { "name": "KPOINTS", "templateName": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR" }], "monitors": ["standard_output", "convergence_electronic", "convergence_ionic"], "postProcessors": ["prepare_restart"], "results": ["total_energy", "atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_force", "final_structure"] }, "vasp_vc_relax_conv": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_VC_RELAX" }, { "name": "KPOINTS", "templateName": "KPOINTS_CONV" }, { "name": "POSCAR", "templateName": "POSCAR" }], "monitors": ["standard_output", "convergence_electronic", "convergence_ionic"], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"] }, "vasp_zpe": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_ZPE" }, { "name": "KPOINTS", "templateName": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR" }], "monitors": ["standard_output", "convergence_electronic", "convergence_ionic"], "results": ["total_energy", "fermi_energy", "pressure", "atomic_forces", "stress_tensor", "total_force", "zero_point_energy"] } }, "isDefault": true, "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "results": ["atomic_forces", "band_gaps", "band_structure", "density_of_states", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "zero_point_energy", "final_structure", "magnetic_moments", "reaction_energy_barrier", "reaction_energy_profile", "potential_profile", "charge_density_profile"] } } } diff --git a/dist/js/runtime_data/applications/modelMethodMapByApplication.json b/dist/js/runtime_data/applications/modelMethodMapByApplication.json index 62cd193a..222b9dfb 100644 --- a/dist/js/runtime_data/applications/modelMethodMapByApplication.json +++ b/dist/js/runtime_data/applications/modelMethodMapByApplication.json @@ -1 +1 @@ -{"methods":{"espresso":{"6.3":{"GNU":{"pw.x":{"pw_scf":[{"path":"/qm/wf/none/pw/none"},{"path":"/qm/wf/none/smearing/gaussian"},{"defaultPath":"/qm/wf/none/psp/us","regex":"\\/qm\\/wf\\/none\\/psp\\/(nc|nc-fr|us|paw)"},{"path":"/linalg/diag/none/davidson/none"}],"pw_scf_bands_hse":[{"path":"/qm/wf/none/pw/none"},{"path":"/qm/wf/none/smearing/gaussian"},{"defaultPath":"/qm/wf/none/psp/us","regex":"\\/qm\\/wf\\/none\\/psp\\/(nc|nc-fr|us|paw)"},{"path":"/linalg/diag/none/davidson/none"}]}}}},"nwchem":{"7.0.2":{"GNU":{"nwchem":{"nwchem_total_energy":[{"path":"/qm/wf/none/ao/pople?basisSlug=6-31G"}]}}}},"vasp":{"5.4.4":{"GNU":{"vasp":{"vasp":[{"path":"/qm/wf/none/pw/none"},{"path":"/qm/wf/none/psp/paw"},{"path":"/linalg/diag/none/davidson/none"},{"defaultPath":"/qm/wf/none/smearing/gaussian","regex":"\\/qm\\/wf\\/none\\/smearing\\/(fermi-dirac|gaussian|methfessel-paxton)"}]}}}}},"models":{"espresso":{"6.3":{"GNU":{"pw.x":{"pw_esm":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbesol"}],"pw_esm_relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbesol"}],"pw_nscf":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbesol"}],"pw_relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbesol"}],"pw_scf":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbesol"}],"pw_scf_bands_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"pw_vc-relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbesol"}]}}}},"nwchem":{"7.0.2":{"GNU":{"nwchem":{"nwchem_total_energy":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=b3lyp"}]}}}},"vasp":{"5.4.4":{"GNU":{"vasp":{"vasp":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_bands":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_bands_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_kpt_conv":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_ncsf":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb_final":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb_initial":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_nscf_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_vc_relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_vc_relax_conv":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_zpe":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}]}},"Non-collinear":{"vasp":{"vasp":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_bands":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_bands_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_kpt_conv":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_ncsf":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb_final":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb_initial":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_nscf_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_vc_relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_vc_relax_conv":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_zpe":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}]}},"VTST":{"vasp":{"vasp":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_bands":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_bands_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_kpt_conv":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_ncsf":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb_final":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb_initial":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_nscf_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_vc_relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_vc_relax_conv":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_zpe":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}]}}}}}} +{ "methods": { "espresso": { "6.3": { "GNU": { "pw.x": { "pw_scf": [{ "path": "/qm/wf/none/pw/none" }, { "path": "/qm/wf/none/smearing/gaussian" }, { "defaultPath": "/qm/wf/none/psp/us", "regex": "\\/qm\\/wf\\/none\\/psp\\/(nc|nc-fr|us|paw)" }, { "path": "/linalg/diag/none/davidson/none" }], "pw_scf_bands_hse": [{ "path": "/qm/wf/none/pw/none" }, { "path": "/qm/wf/none/smearing/gaussian" }, { "defaultPath": "/qm/wf/none/psp/us", "regex": "\\/qm\\/wf\\/none\\/psp\\/(nc|nc-fr|us|paw)" }, { "path": "/linalg/diag/none/davidson/none" }] } } } }, "nwchem": { "7.0.2": { "GNU": { "nwchem": { "nwchem_total_energy": [{ "path": "/qm/wf/none/ao/pople?basisSlug=6-31G" }] } } } }, "vasp": { "5.4.4": { "GNU": { "vasp": { "vasp": [{ "path": "/qm/wf/none/pw/none" }, { "path": "/qm/wf/none/psp/paw" }, { "path": "/linalg/diag/none/davidson/none" }, { "defaultPath": "/qm/wf/none/smearing/gaussian", "regex": "\\/qm\\/wf\\/none\\/smearing\\/(fermi-dirac|gaussian|methfessel-paxton)" }] } } } } }, "models": { "espresso": { "6.3": { "GNU": { "pw.x": { "pw_esm": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbesol" }], "pw_esm_relax": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbesol" }], "pw_nscf": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbesol" }], "pw_relax": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbesol" }], "pw_scf": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbesol" }], "pw_scf_bands_hse": [{ "path": "/pb/qm/dft/ksdft/hybrid?functional=hse06" }], "pw_vc-relax": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbesol" }] } } } }, "nwchem": { "7.0.2": { "GNU": { "nwchem": { "nwchem_total_energy": [{ "path": "/pb/qm/dft/ksdft/hybrid?functional=b3lyp" }] } } } }, "vasp": { "5.4.4": { "GNU": { "vasp": { "vasp": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_bands": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_bands_hse": [{ "path": "/pb/qm/dft/ksdft/hybrid?functional=hse06" }], "vasp_hse": [{ "path": "/pb/qm/dft/ksdft/hybrid?functional=hse06" }], "vasp_kpt_conv": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_ncsf": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_neb": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_neb_final": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_neb_initial": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_nscf_hse": [{ "path": "/pb/qm/dft/ksdft/hybrid?functional=hse06" }], "vasp_relax": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_vc_relax": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_vc_relax_conv": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_zpe": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }] } }, "Non-collinear": { "vasp": { "vasp": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_bands": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_bands_hse": [{ "path": "/pb/qm/dft/ksdft/hybrid?functional=hse06" }], "vasp_hse": [{ "path": "/pb/qm/dft/ksdft/hybrid?functional=hse06" }], "vasp_kpt_conv": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_ncsf": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_neb": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_neb_final": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_neb_initial": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_nscf_hse": [{ "path": "/pb/qm/dft/ksdft/hybrid?functional=hse06" }], "vasp_relax": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_vc_relax": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_vc_relax_conv": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_zpe": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }] } }, "VTST": { "vasp": { "vasp": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_bands": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_bands_hse": [{ "path": "/pb/qm/dft/ksdft/hybrid?functional=hse06" }], "vasp_hse": [{ "path": "/pb/qm/dft/ksdft/hybrid?functional=hse06" }], "vasp_kpt_conv": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_ncsf": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_neb": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_neb_final": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_neb_initial": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_nscf_hse": [{ "path": "/pb/qm/dft/ksdft/hybrid?functional=hse06" }], "vasp_relax": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_vc_relax": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_vc_relax_conv": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_zpe": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }] } } } } } } diff --git a/dist/js/runtime_data/applications/templatesList.json b/dist/js/runtime_data/applications/templatesList.json index 4b5f853a..f14c9cf3 100644 --- a/dist/js/runtime_data/applications/templatesList.json +++ b/dist/js/runtime_data/applications/templatesList.json @@ -1 +1 @@ -[{"applicationName":"espresso","content":"100 ! Total number of Lanczos steps\n100 ! Number of Lanczos steps to consider\n0. ! E_min (eV)\n5. ! E_max (eV)\n0.2 ! delta\n2000 ! number of energy steps\n1080.04 ! omega\n8 ! nk, number of k points\n2 ! nspin\n0.0 ! energy offset (eV)\n\n! Please see https://gitlab.com/QEF/q-e/-/blob/qe-7.3/GWW/util/abcoeff_to_eps.f90\n","contextProviders":[],"executableName":"abcoeff_to_eps.x","name":"abcoeff_to_eps_simple.in"},{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in"},{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in"},{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_up.dat'{% endraw %}\n spin_component = 1\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_up.in"},{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_dn.dat'{% endraw %}\n spin_component = 2\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_dn.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'cp'\n restart_mode = '{{ input.RESTART_MODE }}'\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}'{% endraw %}\n prefix = 'cp'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n nstep = {{ dynamics.numberOfSteps }}\n iprint = 1\n dt = {{ dynamics.timeStep }}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n nr1b = 20\n nr2b = 20\n nr3b = 20\n/\n&ELECTRONS\n electron_dynamics = 'verlet'\n electron_velocities = 'zero'\n emass = {{ dynamics.electronMass }}\n!! consider the below parameters if orthogonalization fails\n! orthogonalization = 'ortho'\n! ortho_eps = 1d-11\n/\n&IONS\n ion_dynamics = 'verlet'\n ion_velocities = 'zero'\n tempw = {{ dynamics.temperature }}\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"IonDynamicsContextProvider"}],"executableName":"cp.x","name":"cp.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'cp-wf'\n restart_mode = '{{ input.RESTART_MODE }}'\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}'{% endraw %}\n prefix = 'cp_wf'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n nstep = {{ dynamics.numberOfSteps }}\n iprint = 1\n dt = {{ dynamics.timeStep }}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n! TODO: figure out the runtime error when `ecutrho` is set.\n! In the meantime, using Norm-conserving pseudopotentials works.\n! ecutrho = {{ cutoffs.density }}\n nr1b = 20\n nr2b = 20\n nr3b = 20\n/\n&ELECTRONS\n electron_dynamics = 'verlet'\n electron_velocities = 'zero'\n emass = {{ dynamics.electronMass }}\n/\n&IONS\n ion_dynamics = 'verlet'\n ion_velocities = 'zero'\n tempw = {{ dynamics.temperature }}\n/\n&CELL\n/\n&WANNIER\n nit = 60,\n calwf = 3,\n tolw = 1.D-6,\n nsteps = 50,\n adapt = .FALSE.\n wfdt = 2.0D0,\n wf_q = 500.D0,\n wf_friction = 0.3d0,\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"IonDynamicsContextProvider"}],"executableName":"cp.x","name":"cp_wf.in"},{"applicationName":"espresso","content":"&DOS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n/\n","contextProviders":[],"executableName":"dos.x","name":"dos.in"},{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"dynmat.x","name":"dynmat_grid.in"},{"applicationName":"espresso","content":"&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n","contextProviders":[],"executableName":"epsilon.x","name":"epsilon.in"},{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_plasmon_pole.in"},{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_full_frequency.in"},{"applicationName":"espresso","content":"&inputgww\n ggwin%prefix = '__prefix__'\n ggwin%outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n ggwin%n = 97,\n ggwin%n_fit = 120,\n ggwin%max_i = 32,\n ggwin%i_min = 1\n ggwin%i_max = 32\n ggwin%l_truncated_coulomb = .false.\n ggwin%grid_time = 3\n ggwin%grid_freq = 5\n ggwin%second_grid_i = 1\n ggwin%second_grid_n = 10\n ggwin%omega = 20\n ggwin%omega_fit = 20\n ggwin%n_grid_fit = 240\n ggwin%tau = 9.8\n ggwin%n_set_pola = 16\n/\n","contextProviders":[],"executableName":"gww.x","name":"gww_simple.in"},{"applicationName":"espresso","content":"calculation of head\n&inputph\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n trans = .false.\n l_head = .true.\n tr2_ph = 1.d-4\n omega_gauss = 20.0\n n_gauss = 97\n grid_type = 5\n second_grid_i = 1\n second_grid_n = 10\n niter_ph = 1\n nsteps_lanczos = 30\n/\n0.0 0.0 0.0\n","contextProviders":[],"executableName":"head.x","name":"head_simple.in"},{"applicationName":"espresso","content":"&inputhp\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n {%- for d in qgrid.dimensions %}\n nq{{ loop.index }} = {{ d }}\n {%- endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"hp.x","name":"hp.in"},{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in"},{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in"},{"applicationName":"espresso","content":"BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = {{ 2 + (input.INTERMEDIATE_IMAGES.length or neb.nImages) }},\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\n{{ input.FIRST_IMAGE }}\n{%- for IMAGE in input.INTERMEDIATE_IMAGES %}\nINTERMEDIATE_IMAGE\nATOMIC_POSITIONS crystal\n{{ IMAGE }}\n{%- endfor %}\nLAST_IMAGE\nATOMIC_POSITIONS crystal\n{{ input.LAST_IMAGE }}\nEND_POSITIONS\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nEND_ENGINE_INPUT\nEND\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"NEBFormDataManager"},{"name":"QENEBInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"neb.x","name":"neb.in"},{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in"},{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n{% for point in qpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor %}\n{% endfor %}\n","contextProviders":[{"name":"QPathFormDataManager"}],"executableName":"ph.x","name":"ph_path.in"},{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in"},{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_init_qpoints.in"},{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid_restart.in"},{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_single_irr_qpt.in"},{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_density.in"},{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in"},{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_wfn.in"},{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in"},{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n {% for d in qgrid.dimensions -%}\n nqx{{loop.index}} = {{d}}\n {% endfor %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal\n{{ '{{' }} {{ explicitKPath.length }} {% raw %} + KPOINTS|length {% endraw %} {{ '}}' }}\n{% raw %}\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n{% endraw %}\n{% for point in explicitKPath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}0.0000001\n{% endfor %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPathFormDataManager"}],"executableName":"pw.x","name":"pw_scf_bands_hse.in"},{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm.in"},{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm_relax.in"},{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0{% endraw %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_kpt_conv.in"},{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in"},{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_relax.in"},{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = {% if kgrid.dimensions[0]%2 == 0 %}{{kgrid.dimensions[0]/2}}{% else %}{{(kgrid.dimensions[0]+1)/2}}{% endif %}, nqx2 = {% if kgrid.dimensions[1]%2 == 0 %}{{kgrid.dimensions[1]/2}}{% else %}{{(kgrid.dimensions[1]+1)/2}}{% endif %}, nqx3 = {% if kgrid.dimensions[2]%2 == 0 %}{{kgrid.dimensions[2]/2}}{% else %}{{(kgrid.dimensions[2]+1)/2}}{% endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{% if d%2 == 0 %}{{d}} {% else %}{{d+1}} {% endif %}{% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_hse.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'fixed'\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_u -%}\nU {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.hubbardUValue }}\n{% endfor -%}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardUContextManager"}],"executableName":"pw.x","name":"pw_scf_dft_u.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'fixed'\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_u -%}\nU {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.hubbardUValue }}\n{% endfor -%}\n{% for row in hubbard_v -%}\nV {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.atomicSpecies2 }}-{{ row.atomicOrbital2 }} {{ row.siteIndex }} {{ row.siteIndex2 }} {{ row.hubbardVValue }}\n{% endfor -%}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardUContextManager"},{"name":"HubbardVContextManager"}],"executableName":"pw.x","name":"pw_scf_dft_v.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'fixed'\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_j -%}\n{{ row.paramType }} {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.value }}\n{% endfor -%}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardJContextManager"}],"executableName":"pw.x","name":"pw_scf_dft_j.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'fixed'\n lda_plus_u = .true.\n lda_plus_u_kind = 0\n U_projection_type = 'ortho-atomic'\n {%- for row in hubbard_legacy %}\n Hubbard_U({{ row.atomicSpeciesIndex }}) = {{ row.hubbardUValue }}\n {%- endfor %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardContextManagerLegacy"}],"executableName":"pw.x","name":"pw_scf_dft_u_legacy.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_u -%}\nU {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.hubbardUValue }}\n{% endfor -%}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardUContextManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_dft_u_magn.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_u -%}\nU {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.hubbardUValue }}\n{% endfor -%}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardUContextManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_dft_u_soc.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_u -%}\nU {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.hubbardUValue }}\n{% endfor -%}\n{% for row in hubbard_v -%}\nV {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.atomicSpecies2 }}-{{ row.atomicOrbital2 }} {{ row.siteIndex }} {{ row.siteIndex2 }} {{ row.hubbardVValue }}\n{% endfor -%}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardUContextManager"},{"name":"HubbardVContextManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_dft_v_magn.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_j -%}\n{{ row.paramType }} {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.value }}\n{% endfor -%}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardJContextManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_dft_j_magn.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n lda_plus_u = .true.\n lda_plus_u_kind = 0\n U_projection_type = 'ortho-atomic'\n{%- for row in hubbard_legacy %}\n Hubbard_U({{ row.atomicSpeciesIndex }}) = {{ row.hubbardUValue }}\n{%- endfor %}\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardContextManagerLegacy"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_dft_u_magn_legacy.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n lda_plus_u = .true.\n lda_plus_u_kind = 0\n U_projection_type = 'ortho-atomic'\n{%- for row in hubbard_legacy %}\n Hubbard_U({{ row.atomicSpeciesIndex }}) = {{ row.hubbardUValue }}\n{%- endfor %}\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardContextManagerLegacy"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_dft_u_soc_legacy.in"},{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_u -%}\nU {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.hubbardUValue }}\n{% endfor -%}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardUContextManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_nscf_dft_u_magn.in"},{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_u -%}\nU {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.hubbardUValue }}\n{% endfor -%}\n{% for row in hubbard_v -%}\nV {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.atomicSpecies2 }}-{{ row.atomicOrbital2 }} {{ row.siteIndex }} {{ row.siteIndex2 }} {{ row.hubbardVValue }}\n{% endfor -%}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardUContextManager"},{"name":"HubbardVContextManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_nscf_dft_v_magn.in"},{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_j -%}\n{{ row.paramType }} {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.value }}\n{% endfor -%}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardJContextManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_nscf_dft_j_magn.in"},{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n lda_plus_u = .true.\n lda_plus_u_kind = 0\n U_projection_type = 'ortho-atomic'\n {%- for row in hubbard_legacy %}\n Hubbard_U({{ row.atomicSpeciesIndex }}) = {{ row.hubbardUValue }}\n {%- endfor %}\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardContextManagerLegacy"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_nscf_dft_u_magn_legacy.in"},{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_u -%}\nU {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.hubbardUValue }}\n{% endfor -%}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardUContextManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_nscf_dft_u_soc.in"},{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n lda_plus_u = .true.\n lda_plus_u_kind = 0\n U_projection_type = 'ortho-atomic'\n {%- for row in hubbard_legacy %}\n Hubbard_U({{ row.atomicSpeciesIndex }}) = {{ row.hubbardUValue }}\n {%- endfor %}\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardContextManagerLegacy"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_nscf_dft_u_soc_legacy.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_u -%}\nU {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.hubbardUValue }}\n{% endfor -%}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardUContextManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_dft_u_magn.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_u -%}\nU {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.hubbardUValue }}\n{% endfor -%}\n{% for row in hubbard_v -%}\nV {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.atomicSpecies2 }}-{{ row.atomicOrbital2 }} {{ row.siteIndex }} {{ row.siteIndex2 }} {{ row.hubbardVValue }}\n{% endfor -%}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardUContextManager"},{"name":"HubbardVContextManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_dft_v_magn.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_j -%}\n{{ row.paramType }} {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.value }}\n{% endfor -%}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardJContextManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_dft_j_magn.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n lda_plus_u = .true.\n lda_plus_u_kind = 0\n U_projection_type = 'ortho-atomic'\n {%- for row in hubbard_legacy %}\n Hubbard_U({{ row.atomicSpeciesIndex }}) = {{ row.hubbardUValue }}\n {%- endfor %}\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardContextManagerLegacy"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_dft_u_magn_legacy.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_u -%}\nU {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.hubbardUValue }}\n{% endfor -%}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardUContextManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_dft_u_soc.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&control\n calculation = 'md'\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n! 1 a.u. = 0.048378 fs, 20 a.u. ~ 1 fs, dt unit is different in pw.x and cp.x\n dt = 20\n nstep = 100\n/\n\n&system\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n nosym = .true.\n/\n\n&electrons\n conv_thr = 1e-8\n/\n\n&ions\n pot_extrapolation = 'second-order'\n wfc_extrapolation = 'second-order'\n ion_temperature = 'initial'\n tempw = 300\n/\n\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\n\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\n\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\n\nK_POINTS gamma\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_md.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_magn.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_soc.in"},{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_nscf_magn.in"},{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_nscf_soc.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_magn.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_soc.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n lda_plus_u = .true.\n lda_plus_u_kind = 0\n U_projection_type = 'ortho-atomic'\n {%- for row in hubbard_legacy %}\n Hubbard_U({{ row.atomicSpeciesIndex }}) = {{ row.hubbardUValue }}\n {%- endfor %}\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardContextManagerLegacy"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_dft_u_soc_legacy.in"},{"applicationName":"espresso","content":"&inputpw4gww\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n num_nbndv(1) = 16\n num_nbnds = 32\n l_truncated_coulomb = .false.\n numw_prod = 100\n pmat_cutoff = 3d0\n s_self_lanczos = 1d-8\n l_simple = .true.\n/\n","contextProviders":[],"executableName":"pw4gww.x","name":"pw4gww_simple.in"},{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in"},{"applicationName":"espresso","content":"&inputsimple\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n calc_mode = 0\n num_nbndv = 16\n num_val = 16\n num_cond = 24\n s_bands = 0.1\n s_product = 1.0\n nkpoints(1) = 2\n nkpoints(2) = 2\n nkpoints(3) = 2\n w_type = 0\n l_truncated_coulomb = .false.\n numpw = 100\n/\n","contextProviders":[],"executableName":"simple.x","name":"simple.in"},{"applicationName":"espresso","content":"&inputsimple\n simple_in%prefix = '__prefix__'\n simple_in%outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n simple_in%scissor = 0.6\n simple_in%spin_state = 1\n simple_in%h_level = 3\n simple_in%task = 1\n simple_in%lanczos_step = 100\n/\n","contextProviders":[],"executableName":"simple_bse.x","name":"simple_bse.in"},{"applicationName":"espresso","content":"&inputsimpleip\n simpleip_in%prefix = '__prefix__'\n simpleip_in%outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n simpleip_in%interp_grid(1) = 20\n simpleip_in%interp_grid(2) = 20\n simpleip_in%interp_grid(3) = 20\n simpleip_in%fermi_degauss = 0.02205\n simpleip_in%fermi_ngauss = -1\n simpleip_in%drude_degauss = 0.0142\n simpleip_in%wmin = 0.0\n simpleip_in%wmax = 0.735\n simpleip_in%nw = 1000\n simpleip_in%inter_broadening = 0.0142\n simpleip_in%intra_broadening = 0.0142\n simpleip_in%nonlocal_commutator = .false.\n simpleip_in%nonlocal_interpolation = .true.\n/\n","contextProviders":[],"executableName":"simple_ip.x","name":"simple_ip.in"},{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp"},{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"hello_world.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt"},{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n","contextProviders":[],"executableName":"python","name":"requirements_empty.txt"},{"applicationName":"python","content":"# -------------------------------------------------------------------------------\n# This script contains a few helpful commands for basic plotting with matplotlib.\n# The commented out blocks are optional suggestions and included for convenience.\n# -------------------------------------------------------------------------------\nimport matplotlib.pyplot as plt\nimport matplotlib.ticker as ticker\nimport numpy as np\n\n# Plot Settings\n# -------------\nfigure_size = (6.4, 4.8) # width, height [inches]\ndpi = 100 # resolution [dots-per-inch]\nfont_size_title = 16 # font size of title\nfont_size_axis = 12 # font size of axis label\nfont_size_tick = 12 # font size of tick label\nfont_size_legend = 14 # font size of legend\nx_axis_label = None # label for x-axis\ny_axis_label = None # label for y-axis\ntitle = None # figure title\nshow_legend = False # whether to show legend\nsave_name = \"plot.pdf\" # output filename (with suffix), e.g. 'plot.pdf'\nx_view_limits = {\"left\": None, \"right\": None} # view limits for x-axis\ny_view_limits = {\"top\": None, \"bottom\": None} # view limits for y-axis\nx_tick_spacing = None # custom tick spacing for x-axis (optional)\ny_tick_spacing = None # custom tick spacing for y-axis (optional)\nx_tick_labels = None # custom tick labels for x-axis (optional)\ny_tick_labels = None # custom tick labels for y-axis (optional)\n\n\n# Figure & axes objects\n# ---------------------\nfig = plt.figure(figsize=figure_size, dpi=dpi)\nax = fig.add_subplot(111)\n\n# Example plot (REPLACE ACCORDINGLY)\n# ------------\nx = np.linspace(0, 7, num=100)\ny = np.sin(x)\nax.plot(x, y, \"g-\", zorder=3)\n\n\n# Help lines\n# ----------\n# ax.axhline(y=0, color=\"0.25\", linewidth=0.6, zorder=1)\n# ax.axvline(x=0, color=\"0.25\", linewidth=0.6, zorder=1)\n\n\n# View limits\n# -----------\nax.set_xlim(**x_view_limits)\nax.set_ylim(**y_view_limits)\n\n\n# Grid lines\n# ----------\n# grid_style = {\n# \"linestyle\" : \"dotted\",\n# \"linewidth\" : 0.6,\n# \"color\" : \"0.25\",\n# }\n# ax.grid(**grid_style)\n\n# Custom tick spacing\n# -------------------\n# ax.xaxis.set_major_locator(ticker.MultipleLocator(x_tick_spacing))\n# ax.yaxis.set_major_locator(ticker.MultipleLocator(y_tick_spacing))\n\n# Custom tick labels\n# ------------------\nif x_tick_labels is not None:\n ax.set_xticklabels(x_tick_labels, fontdict={\"fontsize\": font_size_tick}, minor=False)\nif y_tick_labels is not None:\n ax.set_yticklabels(y_tick_labels, fontdict={\"fontsize\": font_size_tick}, minor=False)\n\n# Other tick settings\n# -------------------\n# ax.tick_params(axis=\"both\", which=\"major\", labelsize=font_size_tick, direction=\"in\")\n# ax.tick_params(axis=\"x\", which=\"major\", pad=10)\n# ax.tick_params(axis=\"x\", which=\"minor\", bottom=False, top=False)\n\n\n# Axis labels\n# -----------\nif x_axis_label is not None:\n ax.set_xlabel(x_axis_label, size=font_size_axis)\nif y_axis_label is not None:\n ax.set_ylabel(y_axis_label, size=font_size_axis)\n\n# Figure title\n# ------------\nif title is not None:\n ax.set_title(title, fontsize=font_size_title)\n\n# Legend\n# ------\nif show_legend:\n ax.legend(prop={'size': font_size_legend})\n\n# Save figure\n# -----------\nif save_name is not None:\n save_format = save_name.split(\".\")[-1]\n fig.savefig(save_name, format=save_format, bbox_inches=\"tight\")\n","contextProviders":[],"executableName":"python","name":"matplotlib_basic.py"},{"applicationName":"python","content":"# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n{# JOB_WORK_DIR will be initialized at runtime => avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_xml_get_qpt_irr.py"},{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"plot_wavefunction.py"},{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements_plot_wavefunction.txt"},{"applicationName":"python","content":"import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_extract_kpoints.py"},{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"processing_requirements.txt"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"pyml_requirements.txt"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"pyml_settings.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Custom workflow unit template for the Exabyte.io platform #\n# #\n# This file imports a set of workflow-specific context variables #\n# from settings.py. It then uses a context manager to save and #\n# load Python objects. When saved, these objects can then be #\n# loaded either later in the same workflow, or by subsequent #\n# predict jobs. #\n# #\n# Any pickle-able Python object can be saved using #\n# settings.context. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport settings\n\n# The context manager exists to facilitate\n# saving and loading objects across Python units within a workflow.\n\n# To load an object, simply do to \\`context.load(\"name-of-the-saved-object\")\\`\n# To save an object, simply do \\`context.save(\"name-for-the-object\", object_here)\\`\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Do some transformations to the data here\n\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n descriptors = context.load(\"descriptors\")\n\n # Do some predictions or transformation to the data here\n","contextProviders":[],"executableName":"python","name":"pyml_custom.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn MinMax Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it is on interval #\n# [0,1]. It then saves the data for use further down #\n# the road in the workflow, for use in un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the min and max of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor MinMax Scaler\n scaler = sklearn.preprocessing.MinMaxScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_min_max_sklearn.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Pandas Remove Duplicates workflow unit #\n# #\n# This workflow unit drops all duplicate rows, if it is running #\n# in the \"train\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Drop duplicates from the training set\n df = pandas.DataFrame(train_target, columns=[\"target\"])\n df = df.join(pandas.DataFrame(train_descriptors))\n df = df.drop_duplicates()\n train_target = df.pop(\"target\").to_numpy()\n train_target = train_target.reshape(-1, 1)\n train_descriptors = df.to_numpy()\n\n # Drop duplicates from the testing set\n df = pandas.DataFrame(test_target, columns=[\"target\"])\n df = df.join(pandas.DataFrame(test_descriptors))\n df = df.drop_duplicates()\n test_target = df.pop(\"target\").to_numpy()\n test_target = test_target.reshape(-1, 1)\n test_descriptors = df.to_numpy()\n\n # Store the data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[],"executableName":"python","name":"pre_processing_remove_duplicates_pandas.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Pandas Remove Missing Workflow Unit #\n# #\n# This workflow unit allows missing rows and/or columns to be #\n# dropped from the dataset by configuring the `to_drop` #\n# parameter. #\n# #\n# Valid values for `to_drop`: #\n# - \"rows\": rows with missing values will be removed #\n# - \"columns\": columns with missing values will be removed #\n# - \"both\": rows and columns with missing values will be removed #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\n\n# `to_drop` can either be \"rows\" or \"columns\"\n# If it is set to \"rows\" (by default), then all rows with missing values will be dropped.\n# If it is set to \"columns\", then all columns with missing values will be dropped.\n# If it is set to \"both\", then all rows and columns with missing values will be dropped.\nto_drop = \"rows\"\n\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Drop missing from the training set\n df = pandas.DataFrame(train_target, columns=[\"target\"])\n df = df.join(pandas.DataFrame(train_descriptors))\n\n directions = {\n \"rows\": (\"index\",),\n \"columns\": (\"columns\",),\n \"both\": (\"index\", \"columns\"),\n }[to_drop]\n for direction in directions:\n df = df.dropna(direction)\n\n train_target = df.pop(\"target\").to_numpy()\n train_target = train_target.reshape(-1, 1)\n train_descriptors = df.to_numpy()\n\n # Drop missing from the testing set\n df = pandas.DataFrame(test_target, columns=[\"target\"])\n df = df.join(pandas.DataFrame(test_descriptors))\n df = df.dropna()\n test_target = df.pop(\"target\").to_numpy()\n test_target = test_target.reshape(-1, 1)\n test_descriptors = df.to_numpy()\n\n # Store the data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[],"executableName":"python","name":"pre_processing_remove_missing_pandas.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py"},{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a ridge-regression model in Scikit-Learn. #\n# Alpha is taken from Scikit-Learn's defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\nimport sklearn.tree\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Base Estimator\n base_estimator = sklearn.tree.DecisionTreeRegressor(\n criterion=\"mse\",\n splitter=\"best\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=None,\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n ccp_alpha=0.0,\n )\n\n # Initialize the Model\n model = sklearn.ensemble.AdaBoostRegressor(\n n_estimators=50,\n learning_rate=1,\n loss=\"linear\",\n base_estimator=base_estimator,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"adaboosted_trees\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"adaboosted_trees\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_adaboosted_trees_regression_sklearn.py"},{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a bagged trees regression model with #\n# Scikit-Learn. Parameters for the estimator and ensemble are #\n# derived from Scikit-Learn's Defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\nimport sklearn.tree\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Base Estimator\n base_estimator = sklearn.tree.DecisionTreeRegressor(\n criterion=\"mse\",\n splitter=\"best\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=None,\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n ccp_alpha=0.0,\n )\n\n # Initialize the Model\n model = sklearn.ensemble.BaggingRegressor(\n n_estimators=10,\n max_samples=1.0,\n max_features=1.0,\n bootstrap=True,\n bootstrap_features=False,\n oob_score=False,\n verbose=0,\n base_estimator=base_estimator,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"bagged_trees\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"bagged_trees\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_bagged_trees_regression_sklearn.py"},{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for gradient-boosted tree regression with #\n# Scikit-Learn. Parameters for the estimator and ensemble are #\n# derived from Scikit-Learn's Defaults. Note: In the gradient- #\n# boosted trees ensemble used, the weak learners used as #\n# estimators cannot be tuned with the same level of fidelity #\n# allowed in the adaptive-boosted trees ensemble. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.GradientBoostingRegressor(\n loss=\"ls\",\n learning_rate=0.1,\n n_estimators=100,\n subsample=1.0,\n criterion=\"friedman_mse\",\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_depth=3,\n min_impurity_decrease=0.0,\n max_features=None,\n alpha=0.9,\n verbose=0,\n max_leaf_nodes=None,\n validation_fraction=0.1,\n n_iter_no_change=None,\n tol=0.0001,\n ccp_alpha=0.0,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"gradboosted_trees\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"gradboosted_trees\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_gradboosted_trees_regression_sklearn.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow unit for eXtreme Gradient-Boosted trees regression #\n# with XGBoost's wrapper to Scikit-Learn. Parameters for the #\n# estimator and ensemble are derived from sklearn defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). #\n# #\n# When the workflow is run in Predict mode, the model is #\n# loaded, predictions are made, they are un-transformed using #\n# the trained scaler from the training run, and they are #\n# written to a filed named \"predictions.csv\" #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport xgboost\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the model\n model = xgboost.XGBRegressor(booster='gbtree',\n verbosity=1,\n learning_rate=0.3,\n min_split_loss=0,\n max_depth=6,\n min_child_weight=1,\n max_delta_step=0,\n colsample_bytree=1,\n reg_lambda=1,\n reg_alpha=0,\n scale_pos_weight=1,\n objective='reg:squarederror',\n eval_metric='rmse')\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"extreme_gradboosted_tree_regression\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"extreme_gradboosted_tree_regression\")\n\n # Make some predictions and unscale\n predictions = model.predict(descriptors)\n predictions = predictions.reshape(-1, 1)\n target_scaler = context.load(\"target_scaler\")\n\n predictions = target_scaler.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\")\n","contextProviders":[],"executableName":"python","name":"model_extreme_gradboosted_trees_regression_sklearn.py"},{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_k_means_clustering_sklearn.py"},{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a kernelized ridge-regression model with #\n# Scikit-Learn. Model parameters are derived from Scikit- #\n# Learn's defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.kernel_ridge\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.kernel_ridge.KernelRidge(\n alpha=1.0,\n kernel=\"linear\",\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"kernel_ridge\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"kernel_ridge\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_kernel_ridge_regression_sklearn.py"},{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a LASSO-regression model with Scikit- #\n# Learn. Model parameters derived from Scikit-Learn's #\n# Defaults. Alpha has been lowered from the default of 1.0, to #\n# 0.1. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.linear_model\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.linear_model.Lasso(\n alpha=0.1,\n fit_intercept=True,\n normalize=False,\n precompute=False,\n tol=0.0001,\n positive=True,\n selection=\"cyclic\",\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"LASSO\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"LASSO\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_lasso_regression_sklearn.py"},{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py"},{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow unit for a gradient boosted classification model with #\n# Scikit-Learn. Parameters derived from sklearn's defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. #\n# #\n# When the workflow is run in Predict mode, the model is #\n# loaded, predictions are made, they are un-transformed using #\n# the trained scaler from the training run, and they are #\n# written to a filed named \"predictions.csv\" #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the model\n model = sklearn.ensemble.GradientBoostingClassifier(loss='deviance',\n learning_rate=0.1,\n n_estimators=100,\n subsample=1.0,\n criterion='friedman_mse',\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_depth=3,\n min_impurity_decrease=0.0,\n min_impurity_split=None,\n init=None,\n random_state=None,\n max_features=None,\n verbose=0,\n max_leaf_nodes=None,\n warm_start=False,\n validation_fraction=0.1,\n n_iter_no_change=None,\n tol=0.0001,\n ccp_alpha=0.0)\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"gradboosted_trees_classification\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target,\n test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n # Ensure predictions have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"gradboosted_trees_classification\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_gradboosted_trees_classification_sklearn.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow unit for eXtreme Gradient-Boosted trees classification #\n# with XGBoost's wrapper to Scikit-Learn. Parameters for the #\n# estimator and ensemble are derived from sklearn defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. #\n# #\n# When the workflow is run in Predict mode, the model is #\n# loaded, predictions are made, they are un-transformed using #\n# the trained scaler from the training run, and they are #\n# written to a filed named \"predictions.csv\" #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport xgboost\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the model\n model = xgboost.XGBClassifier(booster='gbtree',\n verbosity=1,\n learning_rate=0.3,\n min_split_loss=0,\n max_depth=6,\n min_child_weight=1,\n max_delta_step=0,\n colsample_bytree=1,\n reg_lambda=1,\n reg_alpha=0,\n scale_pos_weight=1,\n objective='binary:logistic',\n eval_metric='logloss',\n use_label_encoder=False)\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"extreme_gradboosted_tree_classification\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target,\n test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n # Ensure predictions have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"extreme_gradboosted_tree_classification\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_extreme_gradboosted_trees_classification_sklearn.py"},{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow for a random forest regression model with Scikit- #\n# Learn. Parameters are derived from Scikit-Learn's defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestRegressor(\n n_estimators=100,\n criterion=\"mse\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n max_samples=None,\n oob_score=False,\n ccp_alpha=0.0,\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_regression_sklearn.py"},{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a ridge regression model with Scikit- #\n# Learn. Alpha is taken from Scikit-Learn's default #\n# parameters. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.linear_model\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.linear_model.Ridge(\n alpha=1.0,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"ridge\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"ridge\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_ridge_regression_sklearn.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_pca_2d_clusters_matplotlib.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py"},{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh"},{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh"},{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_link_outdir_save.sh"},{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_collect_dynmat.sh"},{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n", "contextProviders": [], "executableName": "python", "name": "espresso_xml_get_qpt_irr.py" }, { "applicationName": "python", "content": "import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n", "contextProviders": [], "executableName": "python", "name": "espresso_extract_kpoints.py" }, { "applicationName": "python", "content": "# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n", "contextProviders": [], "executableName": "python", "name": "find_extrema.py" }, { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n", "contextProviders": [], "executableName": "python", "name": "processing_requirements.txt" }, { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "pyml_requirements.txt" }, { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", "contextProviders": [{ "name": "MLSettingsDataManager" }], "executableName": "python", "name": "pyml_settings.py" }, { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Custom workflow unit template for the Exabyte.io platform #\n# #\n# This file imports a set of workflow-specific context variables #\n# from settings.py. It then uses a context manager to save and #\n# load Python objects. When saved, these objects can then be #\n# loaded either later in the same workflow, or by subsequent #\n# predict jobs. #\n# #\n# Any pickle-able Python object can be saved using #\n# settings.context. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport settings\n\n# The context manager exists to facilitate\n# saving and loading objects across Python units within a workflow.\n\n# To load an object, simply do to \\`context.load(\"name-of-the-saved-object\")\\`\n# To save an object, simply do \\`context.save(\"name-for-the-object\", object_here)\\`\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Do some transformations to the data here\n\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n descriptors = context.load(\"descriptors\")\n\n # Do some predictions or transformation to the data here\n", "contextProviders": [], "executableName": "python", "name": "pyml_custom.py" }, { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", "contextProviders": [], "executableName": "python", "name": "data_input_read_csv_pandas.py" }, { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "contextProviders": [{ "name": "MLTrainTestSplitDataManager" }], "executableName": "python", "name": "data_input_train_test_split_sklearn.py" }, { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Sklearn MinMax Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it is on interval #\n# [0,1]. It then saves the data for use further down #\n# the road in the workflow, for use in un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the min and max of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor MinMax Scaler\n scaler = sklearn.preprocessing.MinMaxScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", "contextProviders": [], "executableName": "python", "name": "pre_processing_min_max_sklearn.py" }, { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Pandas Remove Duplicates workflow unit #\n# #\n# This workflow unit drops all duplicate rows, if it is running #\n# in the \"train\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Drop duplicates from the training set\n df = pandas.DataFrame(train_target, columns=[\"target\"])\n df = df.join(pandas.DataFrame(train_descriptors))\n df = df.drop_duplicates()\n train_target = df.pop(\"target\").to_numpy()\n train_target = train_target.reshape(-1, 1)\n train_descriptors = df.to_numpy()\n\n # Drop duplicates from the testing set\n df = pandas.DataFrame(test_target, columns=[\"target\"])\n df = df.join(pandas.DataFrame(test_descriptors))\n df = df.drop_duplicates()\n test_target = df.pop(\"target\").to_numpy()\n test_target = test_target.reshape(-1, 1)\n test_descriptors = df.to_numpy()\n\n # Store the data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "contextProviders": [], "executableName": "python", "name": "pre_processing_remove_duplicates_pandas.py" }, { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Pandas Remove Missing Workflow Unit #\n# #\n# This workflow unit allows missing rows and/or columns to be #\n# dropped from the dataset by configuring the `to_drop` #\n# parameter. #\n# #\n# Valid values for `to_drop`: #\n# - \"rows\": rows with missing values will be removed #\n# - \"columns\": columns with missing values will be removed #\n# - \"both\": rows and columns with missing values will be removed #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\n\n# `to_drop` can either be \"rows\" or \"columns\"\n# If it is set to \"rows\" (by default), then all rows with missing values will be dropped.\n# If it is set to \"columns\", then all columns with missing values will be dropped.\n# If it is set to \"both\", then all rows and columns with missing values will be dropped.\nto_drop = \"rows\"\n\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Drop missing from the training set\n df = pandas.DataFrame(train_target, columns=[\"target\"])\n df = df.join(pandas.DataFrame(train_descriptors))\n\n directions = {\n \"rows\": (\"index\",),\n \"columns\": (\"columns\",),\n \"both\": (\"index\", \"columns\"),\n }[to_drop]\n for direction in directions:\n df = df.dropna(direction)\n\n train_target = df.pop(\"target\").to_numpy()\n train_target = train_target.reshape(-1, 1)\n train_descriptors = df.to_numpy()\n\n # Drop missing from the testing set\n df = pandas.DataFrame(test_target, columns=[\"target\"])\n df = df.join(pandas.DataFrame(test_descriptors))\n df = df.dropna()\n test_target = df.pop(\"target\").to_numpy()\n test_target = test_target.reshape(-1, 1)\n test_descriptors = df.to_numpy()\n\n # Store the data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "contextProviders": [], "executableName": "python", "name": "pre_processing_remove_missing_pandas.py" }, { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", "contextProviders": [], "executableName": "python", "name": "pre_processing_standardization_sklearn.py" }, { "applicationName": "python", "content": "# ------------------------------------------------------------ #\n# Workflow unit for a ridge-regression model in Scikit-Learn. #\n# Alpha is taken from Scikit-Learn's defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\nimport sklearn.tree\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Base Estimator\n base_estimator = sklearn.tree.DecisionTreeRegressor(\n criterion=\"mse\",\n splitter=\"best\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=None,\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n ccp_alpha=0.0,\n )\n\n # Initialize the Model\n model = sklearn.ensemble.AdaBoostRegressor(\n n_estimators=50,\n learning_rate=1,\n loss=\"linear\",\n base_estimator=base_estimator,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"adaboosted_trees\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"adaboosted_trees\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "contextProviders": [], "executableName": "python", "name": "model_adaboosted_trees_regression_sklearn.py" }, { "applicationName": "python", "content": "# ------------------------------------------------------------ #\n# Workflow unit for a bagged trees regression model with #\n# Scikit-Learn. Parameters for the estimator and ensemble are #\n# derived from Scikit-Learn's Defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\nimport sklearn.tree\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Base Estimator\n base_estimator = sklearn.tree.DecisionTreeRegressor(\n criterion=\"mse\",\n splitter=\"best\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=None,\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n ccp_alpha=0.0,\n )\n\n # Initialize the Model\n model = sklearn.ensemble.BaggingRegressor(\n n_estimators=10,\n max_samples=1.0,\n max_features=1.0,\n bootstrap=True,\n bootstrap_features=False,\n oob_score=False,\n verbose=0,\n base_estimator=base_estimator,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"bagged_trees\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"bagged_trees\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "contextProviders": [], "executableName": "python", "name": "model_bagged_trees_regression_sklearn.py" }, { "applicationName": "python", "content": "# ------------------------------------------------------------ #\n# Workflow unit for gradient-boosted tree regression with #\n# Scikit-Learn. Parameters for the estimator and ensemble are #\n# derived from Scikit-Learn's Defaults. Note: In the gradient- #\n# boosted trees ensemble used, the weak learners used as #\n# estimators cannot be tuned with the same level of fidelity #\n# allowed in the adaptive-boosted trees ensemble. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.GradientBoostingRegressor(\n loss=\"ls\",\n learning_rate=0.1,\n n_estimators=100,\n subsample=1.0,\n criterion=\"friedman_mse\",\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_depth=3,\n min_impurity_decrease=0.0,\n max_features=None,\n alpha=0.9,\n verbose=0,\n max_leaf_nodes=None,\n validation_fraction=0.1,\n n_iter_no_change=None,\n tol=0.0001,\n ccp_alpha=0.0,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"gradboosted_trees\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"gradboosted_trees\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "contextProviders": [], "executableName": "python", "name": "model_gradboosted_trees_regression_sklearn.py" }, { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow unit for eXtreme Gradient-Boosted trees regression #\n# with XGBoost's wrapper to Scikit-Learn. Parameters for the #\n# estimator and ensemble are derived from sklearn defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). #\n# #\n# When the workflow is run in Predict mode, the model is #\n# loaded, predictions are made, they are un-transformed using #\n# the trained scaler from the training run, and they are #\n# written to a filed named \"predictions.csv\" #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport xgboost\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the model\n model = xgboost.XGBRegressor(booster='gbtree',\n verbosity=1,\n learning_rate=0.3,\n min_split_loss=0,\n max_depth=6,\n min_child_weight=1,\n max_delta_step=0,\n colsample_bytree=1,\n reg_lambda=1,\n reg_alpha=0,\n scale_pos_weight=1,\n objective='reg:squarederror',\n eval_metric='rmse')\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"extreme_gradboosted_tree_regression\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"extreme_gradboosted_tree_regression\")\n\n # Make some predictions and unscale\n predictions = model.predict(descriptors)\n predictions = predictions.reshape(-1, 1)\n target_scaler = context.load(\"target_scaler\")\n\n predictions = target_scaler.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\")\n", "contextProviders": [], "executableName": "python", "name": "model_extreme_gradboosted_trees_regression_sklearn.py" }, { "applicationName": "python", "content": "# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "contextProviders": [], "executableName": "python", "name": "model_k_means_clustering_sklearn.py" }, { "applicationName": "python", "content": "# ------------------------------------------------------------ #\n# Workflow unit for a kernelized ridge-regression model with #\n# Scikit-Learn. Model parameters are derived from Scikit- #\n# Learn's defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.kernel_ridge\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.kernel_ridge.KernelRidge(\n alpha=1.0,\n kernel=\"linear\",\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"kernel_ridge\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"kernel_ridge\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "contextProviders": [], "executableName": "python", "name": "model_kernel_ridge_regression_sklearn.py" }, { "applicationName": "python", "content": "# ------------------------------------------------------------ #\n# Workflow unit for a LASSO-regression model with Scikit- #\n# Learn. Model parameters derived from Scikit-Learn's #\n# Defaults. Alpha has been lowered from the default of 1.0, to #\n# 0.1. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.linear_model\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.linear_model.Lasso(\n alpha=0.1,\n fit_intercept=True,\n normalize=False,\n precompute=False,\n tol=0.0001,\n positive=True,\n selection=\"cyclic\",\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"LASSO\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"LASSO\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "contextProviders": [], "executableName": "python", "name": "model_lasso_regression_sklearn.py" }, { "applicationName": "python", "content": "# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "contextProviders": [], "executableName": "python", "name": "model_mlp_sklearn.py" }, { "applicationName": "python", "content": "# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "contextProviders": [], "executableName": "python", "name": "model_random_forest_classification_sklearn.py" }, { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow unit for a gradient boosted classification model with #\n# Scikit-Learn. Parameters derived from sklearn's defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. #\n# #\n# When the workflow is run in Predict mode, the model is #\n# loaded, predictions are made, they are un-transformed using #\n# the trained scaler from the training run, and they are #\n# written to a filed named \"predictions.csv\" #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the model\n model = sklearn.ensemble.GradientBoostingClassifier(loss='deviance',\n learning_rate=0.1,\n n_estimators=100,\n subsample=1.0,\n criterion='friedman_mse',\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_depth=3,\n min_impurity_decrease=0.0,\n min_impurity_split=None,\n init=None,\n random_state=None,\n max_features=None,\n verbose=0,\n max_leaf_nodes=None,\n warm_start=False,\n validation_fraction=0.1,\n n_iter_no_change=None,\n tol=0.0001,\n ccp_alpha=0.0)\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"gradboosted_trees_classification\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target,\n test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n # Ensure predictions have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"gradboosted_trees_classification\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "contextProviders": [], "executableName": "python", "name": "model_gradboosted_trees_classification_sklearn.py" }, { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow unit for eXtreme Gradient-Boosted trees classification #\n# with XGBoost's wrapper to Scikit-Learn. Parameters for the #\n# estimator and ensemble are derived from sklearn defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. #\n# #\n# When the workflow is run in Predict mode, the model is #\n# loaded, predictions are made, they are un-transformed using #\n# the trained scaler from the training run, and they are #\n# written to a filed named \"predictions.csv\" #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport xgboost\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the model\n model = xgboost.XGBClassifier(booster='gbtree',\n verbosity=1,\n learning_rate=0.3,\n min_split_loss=0,\n max_depth=6,\n min_child_weight=1,\n max_delta_step=0,\n colsample_bytree=1,\n reg_lambda=1,\n reg_alpha=0,\n scale_pos_weight=1,\n objective='binary:logistic',\n eval_metric='logloss',\n use_label_encoder=False)\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"extreme_gradboosted_tree_classification\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target,\n test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n # Ensure predictions have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"extreme_gradboosted_tree_classification\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "contextProviders": [], "executableName": "python", "name": "model_extreme_gradboosted_trees_classification_sklearn.py" }, { "applicationName": "python", "content": "# ------------------------------------------------------------ #\n# Workflow for a random forest regression model with Scikit- #\n# Learn. Parameters are derived from Scikit-Learn's defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestRegressor(\n n_estimators=100,\n criterion=\"mse\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n max_samples=None,\n oob_score=False,\n ccp_alpha=0.0,\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "contextProviders": [], "executableName": "python", "name": "model_random_forest_regression_sklearn.py" }, { "applicationName": "python", "content": "# ------------------------------------------------------------ #\n# Workflow unit for a ridge regression model with Scikit- #\n# Learn. Alpha is taken from Scikit-Learn's default #\n# parameters. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.linear_model\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.linear_model.Ridge(\n alpha=1.0,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"ridge\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"ridge\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "contextProviders": [], "executableName": "python", "name": "model_ridge_regression_sklearn.py" }, { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "contextProviders": [], "executableName": "python", "name": "post_processing_parity_plot_matplotlib.py" }, { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "contextProviders": [], "executableName": "python", "name": "post_processing_pca_2d_clusters_matplotlib.py" }, { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "contextProviders": [], "executableName": "python", "name": "post_processing_roc_curve_sklearn.py" }, { "applicationName": "shell", "content": "#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n", "contextProviders": [], "executableName": "sh", "name": "hello_world.sh" }, { "applicationName": "shell", "content": "#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n", "contextProviders": [], "executableName": "sh", "name": "job_espresso_pw_scf.sh" }, { "applicationName": "shell", "content": "{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n", "contextProviders": [], "executableName": "sh", "name": "espresso_link_outdir_save.sh" }, { "applicationName": "shell", "content": "{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n", "contextProviders": [], "executableName": "sh", "name": "espresso_collect_dynmat.sh" }, { "applicationName": "shell", "content": "#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR <=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema"}],"name":"Set Average ESP Value","operand":"AVG_ESP","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},"espresso/average_electrostatic_potential_via_band_structure.json":{"_id":"09f5f4ff-7dbd-59ae-ad27-5af1bdfc2bd0","application":{"name":"espresso"},"isMultiMaterial":true,"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Band Structure + average ESP","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_gaps","average_potential_profile"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"2d360607-c739-54ad-97a0-8a83f0971f2c","head":true,"input":[],"name":"Set Material Index","next":"9fc7a088-5533-5f70-bb33-f676ec65f565","operand":"MATERIAL_INDEX","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap"}],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"name":"Set Valence Band Maximum","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","operand":"VBM","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands","next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pp_electrostatic_potential","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","head":false,"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"average.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":["standard_output"],"name":"average_potential","results":["average_potential_profile"],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential","head":false,"input":[{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","rendered":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential"}],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},"espresso/band_gap.json":{"_id":"233bb8cf-3b4a-5378-84d9-a6a95a2ab43d","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Band Gap","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","fermi_energy","band_gaps"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_nscf","results":["fermi_energy","band_gaps"],"schemaVersion":"2022.8.16"},"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","head":false,"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","rendered":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_gap_hse_dos.json":{"_id":"f1341a29-777d-5ca3-8933-78a5e0d3f6f2","application":{"name":"espresso"},"model":{"functional":{"slug":"hse06"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"hybrid","type":"dft"},"name":"HSE Band Gap","properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","density_of_states"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_hse.in"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf_hse","results":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"f494cdb2-304f-5da2-b979-ce3fbba3a6c4","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = {% if kgrid.dimensions[0]%2 == 0 %}{{kgrid.dimensions[0]/2}}{% else %}{{(kgrid.dimensions[0]+1)/2}}{% endif %}, nqx2 = {% if kgrid.dimensions[1]%2 == 0 %}{{kgrid.dimensions[1]/2}}{% else %}{{(kgrid.dimensions[1]+1)/2}}{% endif %}, nqx3 = {% if kgrid.dimensions[2]%2 == 0 %}{{kgrid.dimensions[2]/2}}{% else %}{{(kgrid.dimensions[2]+1)/2}}{% endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{% if d%2 == 0 %}{{d}} {% else %}{{d+1}} {% endif %}{% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_hse.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = 1, nqx2 = 1, nqx3 = 1\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_hse","next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"projwfc.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"isDefault":false,"monitors":["standard_output"],"name":"projwfc","results":["density_of_states"],"schemaVersion":"2022.8.16"},"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","head":false,"input":[{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","rendered":"&PROJWFC\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n degauss = 0.01\n deltaE = 0.05\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure.json":{"_id":"26d32e68-c2b5-50e9-8933-15f684fcc039","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Band Structure","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"d618df45-5af3-5da5-8882-d74a27e00b04","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure_dos.json":{"_id":"fa594399-6b98-5d79-986c-0713601dc06c","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Band Structure + Density of States","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure","fermi_energy","band_gaps","density_of_states"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"d618df45-5af3-5da5-8882-d74a27e00b04","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands","next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_nscf","results":["fermi_energy","band_gaps"],"schemaVersion":"2022.8.16"},"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","head":false,"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","rendered":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_nscf","next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"projwfc.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"isDefault":false,"monitors":["standard_output"],"name":"projwfc","results":["density_of_states"],"schemaVersion":"2022.8.16"},"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","head":false,"input":[{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","rendered":"&PROJWFC\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n degauss = 0.01\n deltaE = 0.05\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure_hse.json":{"_id":"ef3089f3-7460-56f2-9aa2-172d5339d3be","application":{"name":"espresso"},"model":{"functional":{"slug":"hse06"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"hybrid","type":"dft"},"name":"Band Structure - HSE","properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_bands_hse.in"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf_bands_hse","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"08bd7e4a-2454-53b7-8cc9-9a95975f7e6f","head":true,"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n {% for d in qgrid.dimensions -%}\n nqx{{loop.index}} = {{d}}\n {% endfor %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal\n{{ '{{' }} {{ explicitKPath.length }} {% raw %} + KPOINTS|length {% endraw %} {{ '}}' }}\n{% raw %}\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n{% endraw %}\n{% for point in explicitKPath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}0.0000001\n{% endfor %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPathFormDataManager"}],"executableName":"pw.x","name":"pw_scf_bands_hse.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n nqx1 = 1\n nqx2 = 1\n nqx3 = 1\n \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal\n{{ 101 + KPOINTS|length }}\n\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n\n 0.000000000 0.000000000 0.000000000 0.0000001\n 0.050000000 0.000000000 0.050000000 0.0000001\n 0.100000000 0.000000000 0.100000000 0.0000001\n 0.150000000 0.000000000 0.150000000 0.0000001\n 0.200000000 0.000000000 0.200000000 0.0000001\n 0.250000000 0.000000000 0.250000000 0.0000001\n 0.300000000 0.000000000 0.300000000 0.0000001\n 0.350000000 0.000000000 0.350000000 0.0000001\n 0.400000000 0.000000000 0.400000000 0.0000001\n 0.450000000 0.000000000 0.450000000 0.0000001\n 0.500000000 0.000000000 0.500000000 0.0000001\n 0.500000000 0.025000000 0.525000000 0.0000001\n 0.500000000 0.050000000 0.550000000 0.0000001\n 0.500000000 0.075000000 0.575000000 0.0000001\n 0.500000000 0.100000000 0.600000000 0.0000001\n 0.500000000 0.125000000 0.625000000 0.0000001\n 0.500000000 0.150000000 0.650000000 0.0000001\n 0.500000000 0.175000000 0.675000000 0.0000001\n 0.500000000 0.200000000 0.700000000 0.0000001\n 0.500000000 0.225000000 0.725000000 0.0000001\n 0.500000000 0.250000000 0.750000000 0.0000001\n 0.487500000 0.262500000 0.750000000 0.0000001\n 0.475000000 0.275000000 0.750000000 0.0000001\n 0.462500000 0.287500000 0.750000000 0.0000001\n 0.450000000 0.300000000 0.750000000 0.0000001\n 0.437500000 0.312500000 0.750000000 0.0000001\n 0.425000000 0.325000000 0.750000000 0.0000001\n 0.412500000 0.337500000 0.750000000 0.0000001\n 0.400000000 0.350000000 0.750000000 0.0000001\n 0.387500000 0.362500000 0.750000000 0.0000001\n 0.375000000 0.375000000 0.750000000 0.0000001\n 0.337500000 0.337500000 0.675000000 0.0000001\n 0.300000000 0.300000000 0.600000000 0.0000001\n 0.262500000 0.262500000 0.525000000 0.0000001\n 0.225000000 0.225000000 0.450000000 0.0000001\n 0.187500000 0.187500000 0.375000000 0.0000001\n 0.150000000 0.150000000 0.300000000 0.0000001\n 0.112500000 0.112500000 0.225000000 0.0000001\n 0.075000000 0.075000000 0.150000000 0.0000001\n 0.037500000 0.037500000 0.075000000 0.0000001\n 0.000000000 0.000000000 0.000000000 0.0000001\n 0.050000000 0.050000000 0.050000000 0.0000001\n 0.100000000 0.100000000 0.100000000 0.0000001\n 0.150000000 0.150000000 0.150000000 0.0000001\n 0.200000000 0.200000000 0.200000000 0.0000001\n 0.250000000 0.250000000 0.250000000 0.0000001\n 0.300000000 0.300000000 0.300000000 0.0000001\n 0.350000000 0.350000000 0.350000000 0.0000001\n 0.400000000 0.400000000 0.400000000 0.0000001\n 0.450000000 0.450000000 0.450000000 0.0000001\n 0.500000000 0.500000000 0.500000000 0.0000001\n 0.512500000 0.475000000 0.512500000 0.0000001\n 0.525000000 0.450000000 0.525000000 0.0000001\n 0.537500000 0.425000000 0.537500000 0.0000001\n 0.550000000 0.400000000 0.550000000 0.0000001\n 0.562500000 0.375000000 0.562500000 0.0000001\n 0.575000000 0.350000000 0.575000000 0.0000001\n 0.587500000 0.325000000 0.587500000 0.0000001\n 0.600000000 0.300000000 0.600000000 0.0000001\n 0.612500000 0.275000000 0.612500000 0.0000001\n 0.625000000 0.250000000 0.625000000 0.0000001\n 0.612500000 0.250000000 0.637500000 0.0000001\n 0.600000000 0.250000000 0.650000000 0.0000001\n 0.587500000 0.250000000 0.662500000 0.0000001\n 0.575000000 0.250000000 0.675000000 0.0000001\n 0.562500000 0.250000000 0.687500000 0.0000001\n 0.550000000 0.250000000 0.700000000 0.0000001\n 0.537500000 0.250000000 0.712500000 0.0000001\n 0.525000000 0.250000000 0.725000000 0.0000001\n 0.512500000 0.250000000 0.737500000 0.0000001\n 0.500000000 0.250000000 0.750000000 0.0000001\n 0.500000000 0.275000000 0.725000000 0.0000001\n 0.500000000 0.300000000 0.700000000 0.0000001\n 0.500000000 0.325000000 0.675000000 0.0000001\n 0.500000000 0.350000000 0.650000000 0.0000001\n 0.500000000 0.375000000 0.625000000 0.0000001\n 0.500000000 0.400000000 0.600000000 0.0000001\n 0.500000000 0.425000000 0.575000000 0.0000001\n 0.500000000 0.450000000 0.550000000 0.0000001\n 0.500000000 0.475000000 0.525000000 0.0000001\n 0.500000000 0.500000000 0.500000000 0.0000001\n 0.512500000 0.475000000 0.512500000 0.0000001\n 0.525000000 0.450000000 0.525000000 0.0000001\n 0.537500000 0.425000000 0.537500000 0.0000001\n 0.550000000 0.400000000 0.550000000 0.0000001\n 0.562500000 0.375000000 0.562500000 0.0000001\n 0.575000000 0.350000000 0.575000000 0.0000001\n 0.587500000 0.325000000 0.587500000 0.0000001\n 0.600000000 0.300000000 0.600000000 0.0000001\n 0.612500000 0.275000000 0.612500000 0.0000001\n 0.625000000 0.250000000 0.625000000 0.0000001\n 0.612500000 0.225000000 0.612500000 0.0000001\n 0.600000000 0.200000000 0.600000000 0.0000001\n 0.587500000 0.175000000 0.587500000 0.0000001\n 0.575000000 0.150000000 0.575000000 0.0000001\n 0.562500000 0.125000000 0.562500000 0.0000001\n 0.550000000 0.100000000 0.550000000 0.0000001\n 0.537500000 0.075000000 0.537500000 0.0000001\n 0.525000000 0.050000000 0.525000000 0.0000001\n 0.512500000 0.025000000 0.512500000 0.0000001\n 0.500000000 0.000000000 0.500000000 0.0000001\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_bands_hse","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure_magn.json":{"_id":"4a7dced1-224e-57d7-a616-cbad99062c7b","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Spin magnetic bandstructure","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_magn.in"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf_magn","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"c229d2a0-3c19-5f13-b3e0-ceb86cb9fbc1","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_magn.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n nspin = 2\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_magn","next":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_magn.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_bands_magn","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_magn.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n nspin = 2\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands_magn","next":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_up.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands_spin_up","schemaVersion":"2022.8.16"},"flowchartId":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_up.dat'{% endraw %}\n spin_component = 1\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_up.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands_up.dat'\n spin_component = 1\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands_spin_up","next":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_dn.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands_spin_dn","schemaVersion":"2022.8.16"},"flowchartId":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_dn.dat'{% endraw %}\n spin_component = 2\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_dn.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands_dn.dat'\n spin_component = 2\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands_spin_dn","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure_soc.json":{"_id":"51e6fb82-538a-58ee-8d4e-991c8446f657","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{"searchText":"nc-fr"},"subtype":"nc-fr","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Spin orbit coupling bandstructure","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_soc.in"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf_soc","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"74ec024a-f247-5f15-9c21-cc169bcb62c7","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_soc.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_soc","next":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_soc.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_bands_soc","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_soc.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands_soc","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/dielectric_tensor.json":{"_id":"38340b52-83ad-5862-bc18-c140bdc0cb72","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"nc","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Compute Dielectric Function","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","fermi_energy","band_gaps","dielectric_tensor"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"3b230ec3-0791-52f7-a4db-625390b8718f","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"3b230ec3-0791-52f7-a4db-625390b8718f","head":false,"input":[],"name":"Set No-Symmetry Flag","next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","operand":"NO_SYMMETRY_NO_INVERSION","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":true},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_nscf","results":["fermi_energy","band_gaps"],"schemaVersion":"2022.8.16"},"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","head":false,"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","rendered":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_nscf","next":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"epsilon.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"epsilon.x","input":[{"name":"epsilon.in"}],"isDefault":false,"monitors":["standard_output"],"name":"dielectric_tensor","results":["dielectric_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","head":false,"input":[{"applicationName":"espresso","content":"&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n","contextProviders":[],"executableName":"epsilon.x","name":"epsilon.in","rendered":"&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Compute dielectric function","postProcessors":[],"preProcessors":[],"results":[{"name":"dielectric_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/dos.json":{"_id":"2cf317f3-3306-5a96-bc9b-e9103ebcd5be","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Density of States","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","fermi_energy","band_gaps","density_of_states"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_nscf","results":["fermi_energy","band_gaps"],"schemaVersion":"2022.8.16"},"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","head":false,"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","rendered":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_nscf","next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"projwfc.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"isDefault":false,"monitors":["standard_output"],"name":"projwfc","results":["density_of_states"],"schemaVersion":"2022.8.16"},"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","head":false,"input":[{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","rendered":"&PROJWFC\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n degauss = 0.01\n deltaE = 0.05\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/electronic_density_mesh.json":{"_id":"e2749c5a-fcd9-589c-819b-8b88c5c90924","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Electronic Density Mesh","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_density.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pp_density","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","head":false,"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_density.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pp_density","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/esm.json":{"_id":"0de669f6-a455-5dae-b331-19dc85f7090f","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Effective Screening Medium (ESM)","properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","potential_profile","charge_density_profile"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm.in"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"pw_esm","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","potential_profile","charge_density_profile"],"schemaVersion":"2022.8.16"},"flowchartId":"2f487bc6-c237-53e4-bad5-be60369662cb","head":true,"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = 'pbc'\n fcp_mu = 0\n esm_w = 0\n esm_efield = 0\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_esm","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/esm_relax.json":{"_id":"69728792-afeb-50aa-9b4e-6974a90f676a","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Effective Screening Medium (ESM) Relax","properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","potential_profile","charge_density_profile"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm_relax.in"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"pw_esm_relax","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","potential_profile","charge_density_profile"],"schemaVersion":"2022.8.16"},"flowchartId":"a2bec506-1fdd-5125-a787-85f31cde20c1","head":true,"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm_relax.in","rendered":"&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = 'pbc'\n fcp_mu = 0\n esm_w = 0\n esm_efield = 0\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_esm_relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/espresso_extract_kpoints.json":{"_id":"a2785cc5-2427-5c7a-b30f-7077475b948c","application":{"name":"espresso"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Extract KPOINTS","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"espresso_extract_kpoints.py"},{"name":"requirements.txt","templateName":"requirements_empty.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"espresso_extract_kpoints","schemaVersion":"2022.8.16"},"flowchartId":"a716b133-2d04-50b5-b497-100265e3fa24","head":true,"input":[{"applicationName":"python","content":"import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_extract_kpoints.py","rendered":"import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Extract kpoints","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/espresso_xml_get_qpt_irr.json":{"_id":"e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a","application":{"name":"espresso"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"espresso-xml-get-qpt-irr","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"espresso_xml_get_qpt_irr.py"}],"isDefault":false,"monitors":["standard_output"],"name":"espresso_xml_get_qpt_irr","schemaVersion":"2022.8.16"},"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","head":true,"input":[{"applicationName":"python","content":"# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n{# JOB_WORK_DIR will be initialized at runtime => avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_xml_get_qpt_irr.py","rendered":"# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n\n\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"python","next":"d0fd8654-2106-546b-8792-7bb46272befc","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"d0fd8654-2106-546b-8792-7bb46272befc","head":false,"input":[{"name":"STDOUT","scope":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219"}],"name":"assignment","operand":"Q_POINTS","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)"}]},"espresso/fixed_cell_relaxation.json":{"_id":"fb75e249-5489-5146-bd8a-786d33330d9c","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Fixed-cell Relaxation","properties":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_relax.in"}],"isDefault":false,"monitors":["standard_output","convergence_electronic","convergence_ionic"],"name":"pw_relax","results":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"c42871f6-ab79-5987-b228-c3bd80f16ffd","head":true,"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_relax.in","rendered":"&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/gw_band_structure_band_gap_full_frequency.json":{"_id":"46bcdcc8-628e-518e-b8c3-9bf38d7a2aef","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{"searchText":".*dojo-oncv.*"},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Full Frequency GW Band Structure + Band Gap","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure","fermi_energy","band_gaps"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"gw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_full_frequency.in"}],"isDefault":false,"monitors":["standard_output"],"name":"gw_bands_full_frequency","results":["band_structure","fermi_energy","band_gaps"],"schemaVersion":"2022.8.16"},"flowchartId":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","head":false,"input":[{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_full_frequency.in","rendered":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n\n ! the grid used for the linear response\n kpt_grid = 2, 2, 2\n qpt_grid = 1, 1, 1\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n101\n 0.000000000 0.000000000 0.000000000\n 0.028867513 -0.040824829 0.050000000\n 0.057735027 -0.081649658 0.100000000\n 0.086602540 -0.122474487 0.150000000\n 0.115470054 -0.163299316 0.200000000\n 0.144337567 -0.204124145 0.250000000\n 0.173205081 -0.244948974 0.300000000\n 0.202072594 -0.285773803 0.350000000\n 0.230940108 -0.326598632 0.400000000\n 0.259807621 -0.367423461 0.450000000\n 0.288675135 -0.408248290 0.500000000\n 0.274241378 -0.387835876 0.525000000\n 0.259807621 -0.367423461 0.550000000\n 0.245373864 -0.347011047 0.575000000\n 0.230940108 -0.326598632 0.600000000\n 0.216506351 -0.306186218 0.625000000\n 0.202072594 -0.285773803 0.650000000\n 0.187638837 -0.265361389 0.675000000\n 0.173205081 -0.244948974 0.700000000\n 0.158771324 -0.224536560 0.725000000\n 0.144337567 -0.204124145 0.750000000\n 0.129903811 -0.183711731 0.750000000\n 0.115470054 -0.163299316 0.750000000\n 0.101036297 -0.142886902 0.750000000\n 0.086602540 -0.122474487 0.750000000\n 0.072168784 -0.102062073 0.750000000\n 0.057735027 -0.081649658 0.750000000\n 0.043301270 -0.061237244 0.750000000\n 0.028867513 -0.040824829 0.750000000\n 0.014433757 -0.020412415 0.750000000\n -0.000000000 -0.000000000 0.750000000\n -0.000000000 -0.000000000 0.675000000\n -0.000000000 -0.000000000 0.600000000\n -0.000000000 -0.000000000 0.525000000\n -0.000000000 -0.000000000 0.450000000\n -0.000000000 -0.000000000 0.375000000\n -0.000000000 -0.000000000 0.300000000\n -0.000000000 -0.000000000 0.225000000\n -0.000000000 -0.000000000 0.150000000\n -0.000000000 -0.000000000 0.075000000\n 0.000000000 0.000000000 0.000000000\n 0.028867513 0.020412415 0.050000000\n 0.057735027 0.040824829 0.100000000\n 0.086602540 0.061237244 0.150000000\n 0.115470054 0.081649658 0.200000000\n 0.144337567 0.102062073 0.250000000\n 0.173205081 0.122474487 0.300000000\n 0.202072594 0.142886902 0.350000000\n 0.230940108 0.163299316 0.400000000\n 0.259807621 0.183711731 0.450000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.339193283 -0.204124145 0.637500000\n 0.317542648 -0.204124145 0.650000000\n 0.295892013 -0.204124145 0.662500000\n 0.274241378 -0.204124145 0.675000000\n 0.252590743 -0.204124145 0.687500000\n 0.230940108 -0.204124145 0.700000000\n 0.209289473 -0.204124145 0.712500000\n 0.187638837 -0.204124145 0.725000000\n 0.165988202 -0.204124145 0.737500000\n 0.144337567 -0.204124145 0.750000000\n 0.158771324 -0.163299316 0.725000000\n 0.173205081 -0.122474487 0.700000000\n 0.187638837 -0.081649658 0.675000000\n 0.202072594 -0.040824829 0.650000000\n 0.216506351 -0.000000000 0.625000000\n 0.230940108 0.040824829 0.600000000\n 0.245373864 0.081649658 0.575000000\n 0.259807621 0.122474487 0.550000000\n 0.274241378 0.163299316 0.525000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.353627040 -0.224536560 0.612500000\n 0.346410162 -0.244948974 0.600000000\n 0.339193283 -0.265361389 0.587500000\n 0.331976405 -0.285773803 0.575000000\n 0.324759526 -0.306186218 0.562500000\n 0.317542648 -0.326598632 0.550000000\n 0.310325770 -0.347011047 0.537500000\n 0.303108891 -0.367423461 0.525000000\n 0.295892013 -0.387835876 0.512500000\n 0.288675135 -0.408248290 0.500000000\n\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"gw_bands_full_frequency","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/gw_band_structure_band_gap_plasmon_pole.json":{"_id":"72b79a87-8eef-5fe2-9d6c-6c9c256dd56c","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{"searchText":".*dojo-oncv.*"},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Plasmon-Pole GW Band Structure + Band Gap","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure","fermi_energy","band_gaps"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"gw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_plasmon_pole.in"}],"isDefault":false,"monitors":["standard_output"],"name":"gw_bands_plasmon_pole","results":["band_structure","fermi_energy","band_gaps"],"schemaVersion":"2022.8.16"},"flowchartId":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","head":false,"input":[{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_plasmon_pole.in","rendered":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n\n ! the grid used for the linear response\n kpt_grid = 2, 2, 2\n qpt_grid = 1, 1, 1\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n101\n 0.000000000 0.000000000 0.000000000\n 0.028867513 -0.040824829 0.050000000\n 0.057735027 -0.081649658 0.100000000\n 0.086602540 -0.122474487 0.150000000\n 0.115470054 -0.163299316 0.200000000\n 0.144337567 -0.204124145 0.250000000\n 0.173205081 -0.244948974 0.300000000\n 0.202072594 -0.285773803 0.350000000\n 0.230940108 -0.326598632 0.400000000\n 0.259807621 -0.367423461 0.450000000\n 0.288675135 -0.408248290 0.500000000\n 0.274241378 -0.387835876 0.525000000\n 0.259807621 -0.367423461 0.550000000\n 0.245373864 -0.347011047 0.575000000\n 0.230940108 -0.326598632 0.600000000\n 0.216506351 -0.306186218 0.625000000\n 0.202072594 -0.285773803 0.650000000\n 0.187638837 -0.265361389 0.675000000\n 0.173205081 -0.244948974 0.700000000\n 0.158771324 -0.224536560 0.725000000\n 0.144337567 -0.204124145 0.750000000\n 0.129903811 -0.183711731 0.750000000\n 0.115470054 -0.163299316 0.750000000\n 0.101036297 -0.142886902 0.750000000\n 0.086602540 -0.122474487 0.750000000\n 0.072168784 -0.102062073 0.750000000\n 0.057735027 -0.081649658 0.750000000\n 0.043301270 -0.061237244 0.750000000\n 0.028867513 -0.040824829 0.750000000\n 0.014433757 -0.020412415 0.750000000\n -0.000000000 -0.000000000 0.750000000\n -0.000000000 -0.000000000 0.675000000\n -0.000000000 -0.000000000 0.600000000\n -0.000000000 -0.000000000 0.525000000\n -0.000000000 -0.000000000 0.450000000\n -0.000000000 -0.000000000 0.375000000\n -0.000000000 -0.000000000 0.300000000\n -0.000000000 -0.000000000 0.225000000\n -0.000000000 -0.000000000 0.150000000\n -0.000000000 -0.000000000 0.075000000\n 0.000000000 0.000000000 0.000000000\n 0.028867513 0.020412415 0.050000000\n 0.057735027 0.040824829 0.100000000\n 0.086602540 0.061237244 0.150000000\n 0.115470054 0.081649658 0.200000000\n 0.144337567 0.102062073 0.250000000\n 0.173205081 0.122474487 0.300000000\n 0.202072594 0.142886902 0.350000000\n 0.230940108 0.163299316 0.400000000\n 0.259807621 0.183711731 0.450000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.339193283 -0.204124145 0.637500000\n 0.317542648 -0.204124145 0.650000000\n 0.295892013 -0.204124145 0.662500000\n 0.274241378 -0.204124145 0.675000000\n 0.252590743 -0.204124145 0.687500000\n 0.230940108 -0.204124145 0.700000000\n 0.209289473 -0.204124145 0.712500000\n 0.187638837 -0.204124145 0.725000000\n 0.165988202 -0.204124145 0.737500000\n 0.144337567 -0.204124145 0.750000000\n 0.158771324 -0.163299316 0.725000000\n 0.173205081 -0.122474487 0.700000000\n 0.187638837 -0.081649658 0.675000000\n 0.202072594 -0.040824829 0.650000000\n 0.216506351 -0.000000000 0.625000000\n 0.230940108 0.040824829 0.600000000\n 0.245373864 0.081649658 0.575000000\n 0.259807621 0.122474487 0.550000000\n 0.274241378 0.163299316 0.525000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.353627040 -0.224536560 0.612500000\n 0.346410162 -0.244948974 0.600000000\n 0.339193283 -0.265361389 0.587500000\n 0.331976405 -0.285773803 0.575000000\n 0.324759526 -0.306186218 0.562500000\n 0.317542648 -0.326598632 0.550000000\n 0.310325770 -0.347011047 0.537500000\n 0.303108891 -0.367423461 0.525000000\n 0.295892013 -0.387835876 0.512500000\n 0.288675135 -0.408248290 0.500000000\n\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"gw_bands_plasmon_pole","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/kpoint_convergence.json":{"_id":"ff6a8fbc-2202-5786-9a26-67c843417d0b","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"K-point Convergence","properties":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"init-tolerance","head":true,"input":[],"name":"Init tolerance","next":"init-increment","operand":"TOL","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0.00001},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"init-increment","head":false,"input":[],"name":"Init increment","next":"init-result","operand":"INC","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"init-result","head":false,"input":[],"name":"Init result","next":"init-parameter","operand":"PREV_RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"init-parameter","head":false,"input":[],"name":"Init parameter","next":"pwscf-kpoint-convergence","operand":"PARAMETER","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_kpt_conv.in"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf_kpt_conv","results":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"pwscf-kpoint-convergence","head":false,"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0{% endraw %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_kpt_conv.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_kpt_conv","next":"store-result","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"store-result","head":false,"input":[{"name":"total_energy","scope":"pwscf-kpoint-convergence"}],"name":"store result","next":"check-convergence","operand":"RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"else":"update-result","flowchartId":"check-convergence","head":false,"input":[],"maxOccurrences":50,"name":"check convergence","next":"update-result","postProcessors":[],"preProcessors":[],"results":[],"statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","status":"idle","statusTrack":[],"tags":[],"then":"convergence-is-reached","type":"condition"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"update-result","head":false,"input":[{"name":"RESULT","scope":"global"}],"name":"update result","next":"increment-parameter","operand":"PREV_RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"RESULT"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"increment-parameter","head":false,"input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"name":"increment parameter","next":"pwscf-kpoint-convergence","operand":"PREV_RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER+INC"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"convergence-is-reached","head":false,"input":[{"name":"PARAMETER","scope":"global"}],"name":"exit","operand":"PARAMETER","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER"}]},"espresso/neb.json":{"_id":"c9034468-df28-5357-8912-02226f919042","application":{"name":"espresso"},"isMultiMaterial":true,"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Nudged Elastic Band (NEB)","properties":["reaction_energy_barrier","reaction_energy_profile"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"neb.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"neb.x","input":[{"name":"neb.in"}],"isDefault":false,"monitors":["standard_output"],"name":"neb","results":["reaction_energy_barrier","reaction_energy_profile"],"schemaVersion":"2022.8.16"},"flowchartId":"9f273ca0-d240-5b1f-89a9-64dd579304ac","head":true,"input":[{"applicationName":"espresso","content":"BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = {{ 2 + (input.INTERMEDIATE_IMAGES.length or neb.nImages) }},\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\n{{ input.FIRST_IMAGE }}\n{%- for IMAGE in input.INTERMEDIATE_IMAGES %}\nINTERMEDIATE_IMAGE\nATOMIC_POSITIONS crystal\n{{ IMAGE }}\n{%- endfor %}\nLAST_IMAGE\nATOMIC_POSITIONS crystal\n{{ input.LAST_IMAGE }}\nEND_POSITIONS\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nEND_ENGINE_INPUT\nEND\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"NEBFormDataManager"},{"name":"QENEBInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"neb.x","name":"neb.in","rendered":"BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = 3,\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\nSi 28.0855 \nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nLAST_IMAGE\nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nEND_POSITIONS\nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \nEND_ENGINE_INPUT\nEND\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"neb","postProcessors":[],"preProcessors":[],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/ph_init_qpoints.json":{"_id":"2f017bcb-f4ba-55b8-b939-1f780679a88e","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"ph-init-qpoints","properties":[],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_init_qpoints.in"}],"isDefault":false,"monitors":["standard_output"],"name":"ph_init_qpoints","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"b8ea6a33-38f3-5434-b17e-b5eae8fff9fc","head":true,"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_init_qpoints.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ph_init_qpoints","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/ph_single_irr_qpt.json":{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"ph-single-irr-qpt","properties":[],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_single_irr_qpt.in"}],"isDefault":false,"monitors":["standard_output"],"name":"ph_single_irr_qpt","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"8db9af08-d935-57a0-a824-e7db6d936de8","head":true,"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_single_irr_qpt.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n \n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n \n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = '{{ JOB_SCRATCH_DIR }}/outdir'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ph_single_irr_qpt","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/phonon_dispersions.json":{"_id":"bfb69b48-8fbf-5a0d-8949-448f20754766","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Phonon Dispersions","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","phonon_dos","phonon_dispersions"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"13bcafce-56ef-5b47-b079-317495eb6933","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"isDefault":false,"monitors":["standard_output"],"name":"ph_grid","results":["phonon_dos"],"schemaVersion":"2022.8.16"},"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","head":false,"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n ldisp = .true.\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ph_grid","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"q2r.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":["standard_output"],"name":"q2r","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","rendered":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"q2r","next":"a7fded20-889b-54fc-bbb0-456e82689ab1","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"isDefault":false,"monitors":["standard_output"],"name":"matdyn_path","results":["phonon_dispersions"],"schemaVersion":"2022.8.16"},"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","rendered":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/phonon_dos.json":{"_id":"2232051b-9f2a-5a48-9b4d-6231eb6e8297","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Phonon Density of States","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","phonon_dos"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"13bcafce-56ef-5b47-b079-317495eb6933","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"isDefault":false,"monitors":["standard_output"],"name":"ph_grid","results":["phonon_dos"],"schemaVersion":"2022.8.16"},"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","head":false,"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n ldisp = .true.\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ph_grid","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"q2r.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":["standard_output"],"name":"q2r","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","rendered":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"q2r","next":"8fe6a24b-c994-55a2-a448-88657292e8c2","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"isDefault":false,"monitors":["standard_output"],"name":"matdyn_grid","results":["phonon_dos"],"schemaVersion":"2022.8.16"},"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","rendered":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/phonon_dos_dispersion.json":{"_id":"291d25cd-378a-5be7-9d85-c8013a4b165b","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Phonon Density of States + Dispersions","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","phonon_dos","phonon_dispersions"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"13bcafce-56ef-5b47-b079-317495eb6933","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"isDefault":false,"monitors":["standard_output"],"name":"ph_grid","results":["phonon_dos"],"schemaVersion":"2022.8.16"},"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","head":false,"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n ldisp = .true.\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ph_grid","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"q2r.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":["standard_output"],"name":"q2r","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","rendered":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"q2r","next":"8fe6a24b-c994-55a2-a448-88657292e8c2","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"isDefault":false,"monitors":["standard_output"],"name":"matdyn_grid","results":["phonon_dos"],"schemaVersion":"2022.8.16"},"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","rendered":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","next":"a7fded20-889b-54fc-bbb0-456e82689ab1","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"isDefault":false,"monitors":["standard_output"],"name":"matdyn_path","results":["phonon_dispersions"],"schemaVersion":"2022.8.16"},"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","rendered":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/phonon_reduce.json":{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"reduce","properties":["phonon_dos","phonon_dispersions"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid_restart.in"}],"isDefault":false,"monitors":["standard_output"],"name":"ph_grid_restart","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb206177-a4af-599a-81ba-6c88d24253b6","head":true,"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid_restart.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ph_grid_restart","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"q2r.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":["standard_output"],"name":"q2r","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","rendered":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"q2r","next":"8fe6a24b-c994-55a2-a448-88657292e8c2","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"isDefault":false,"monitors":["standard_output"],"name":"matdyn_grid","results":["phonon_dos"],"schemaVersion":"2022.8.16"},"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","rendered":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","next":"a7fded20-889b-54fc-bbb0-456e82689ab1","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"isDefault":false,"monitors":["standard_output"],"name":"matdyn_path","results":["phonon_dispersions"],"schemaVersion":"2022.8.16"},"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","rendered":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/plot_wavefunction.json":{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","application":{"name":"espresso"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Plot Wavefunction","properties":["file_content"],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"plot_wavefunction","results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"57fca898-8e8b-5ef2-81a5-9d2b612bc18d","head":true,"input":[{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"script.py","rendered":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"plot WFN","postProcessors":[],"preProcessors":[],"results":[{"basename":"wf_r.png","filetype":"image","name":"file_content"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/post_processor.json":{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","application":{"name":"espresso"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"post-processor","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_collect_dynmat.sh"}],"isDefault":false,"monitors":["standard_output"],"name":"espresso_collect_dynmat","schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_collect_dynmat.sh","rendered":"\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/pre_processor.json":{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","application":{"name":"espresso"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"pre-processor","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_link_outdir_save.sh"}],"isDefault":false,"monitors":["standard_output"],"name":"espresso_link_outdir_save","schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_link_outdir_save.sh","rendered":"\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/pw_scf.json":{"_id":"f52b8039-83d0-5485-a1f1-0bc37cb01ed3","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"pw-scf","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/recalculate_bands.json":{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Recalculate Bands","properties":["band_structure"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/surface_energy.json":{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Surface Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"e463ef46-a36e-5168-87dd-e21eb980dfb8","head":true,"input":[{"endpoint":"materials","endpoint_options":{"params":{"projection":"{}","query":"{'_id': MATERIAL_ID}"}},"name":"DATA"}],"monitors":[],"name":"io-slab","next":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","postProcessors":[],"preProcessors":[],"results":[],"source":"api","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","head":false,"input":[{"name":"DATA","scope":"e463ef46-a36e-5168-87dd-e21eb980dfb8"}],"monitors":[],"name":"slab","next":"44263820-0c80-5bd1-b854-9da8d198eac1","operand":"SLAB","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"DATA[0]"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"44263820-0c80-5bd1-b854-9da8d198eac1","head":false,"input":[{"endpoint":"materials","endpoint_options":{"params":{"projection":"{}","query":"{'_id': SLAB.metadata.bulkId}"}},"name":"DATA"}],"monitors":[],"name":"io-bulk","next":"b70656f1-a394-57f4-b4de-00096969df4b","postProcessors":[],"preProcessors":[],"results":[],"source":"api","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"b70656f1-a394-57f4-b4de-00096969df4b","head":false,"input":[{"name":"DATA","scope":"44263820-0c80-5bd1-b854-9da8d198eac1"}],"monitors":[],"name":"bulk","next":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","operand":"BULK","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"DATA[0] if DATA else None"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"errorMessage":"Bulk material does not exist!","flowchartId":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","head":false,"monitors":[],"name":"assert-bulk","next":"490635e0-c593-5809-9eb2-c794b96cfed1","postProcessors":[],"preProcessors":[],"results":[],"statement":"BULK != None","status":"idle","statusTrack":[],"tags":[],"type":"assertion"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"490635e0-c593-5809-9eb2-c794b96cfed1","head":false,"input":[{"endpoint":"refined-properties","endpoint_options":{"params":{"projection":"{'sort': {'precision.value': -1}, 'limit': 1}","query":"{ 'exabyteId': BULK.exabyteId, 'data.name': 'total_energy', 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} }"}},"name":"DATA"}],"monitors":[],"name":"io-e-bulk","next":"bbe13b97-4243-5a85-8f61-a279d0b797aa","postProcessors":[],"preProcessors":[],"results":[],"source":"api","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"bbe13b97-4243-5a85-8f61-a279d0b797aa","head":false,"input":[{"name":"DATA","scope":"490635e0-c593-5809-9eb2-c794b96cfed1"}],"monitors":[],"name":"e-bulk","next":"a06c9f43-7670-5fd0-ac42-7028a472235a","operand":"E_BULK","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"DATA[0].data.value if DATA else None"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"errorMessage":"E_BULK does not exist!","flowchartId":"a06c9f43-7670-5fd0-ac42-7028a472235a","head":false,"monitors":[],"name":"assert-e-bulk","next":"cdf210be-26ed-585a-b4ac-d55795ba2975","postProcessors":[],"preProcessors":[],"results":[],"statement":"E_BULK != None","status":"idle","statusTrack":[],"tags":[],"type":"assertion"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"cdf210be-26ed-585a-b4ac-d55795ba2975","head":false,"input":[],"monitors":[],"name":"surface","next":"ffa8e43d-096a-555b-b8d0-6d283365ef47","operand":"A","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"ffa8e43d-096a-555b-b8d0-6d283365ef47","head":false,"input":[],"monitors":[],"name":"n-bulk","next":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","operand":"N_BULK","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"len(BULK.basis.elements)"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","head":false,"input":[],"monitors":[],"name":"n-slab","next":"9fc7a088-5533-5f70-bb33-f676ec65f565","operand":"N_SLAB","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"len(SLAB.basis.elements)"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"fcd88119-817c-5ac1-a430-ba892ac743eb","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"fcd88119-817c-5ac1-a430-ba892ac743eb","head":false,"input":[{"name":"total_energy","scope":"9fc7a088-5533-5f70-bb33-f676ec65f565"}],"monitors":[],"name":"e-slab","next":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","operand":"E_SLAB","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","head":false,"input":[],"monitors":[],"name":"surface-energy","operand":"SURFACE_ENERGY","postProcessors":[],"preProcessors":[],"results":[{"name":"surface_energy"}],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))"}]},"espresso/total_energy.json":{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Total Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"tags":["default"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/valence_band_offset_calc_from_previous_esp_vbm.json":{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","application":{"name":"espresso"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Calculate VBO","properties":["valence_band_offset"],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","head":true,"input":[],"name":"Difference of valence band maxima","next":"2626f7bb-d392-5fd4-ab71-329b508de347","operand":"VBM_DIFF","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"VBM_LEFT - VBM_RIGHT"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","head":false,"input":[],"name":"Difference of macroscopically averaged ESP in bulk","next":"b7307787-53e2-599b-ad12-d627b04074b4","operand":"AVG_ESP_DIFF","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","head":false,"input":[],"name":"Lineup of macroscopically averaged ESP in interface","next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","operand":"ESP_LINEUP","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","head":false,"input":[],"name":"Valence Band Offset","operand":"VALENCE_BAND_OFFSET","results":[{"name":"valence_band_offset"}],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))"}]},"espresso/variable_cell_relaxation.json":{"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Variable-cell Relaxation","properties":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"systemName":"espresso-variable-cell-relaxation","tags":["variable-cell_relaxation"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"isDefault":false,"monitors":["standard_output","convergence_electronic","convergence_ionic"],"name":"pw_vc-relax","results":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","head":true,"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","rendered":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/wavefunction_amplitude.json":{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Wavefunction Amplitude","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"tags":["wfn","wfn_plot"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"pw-scf","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"extract-band-energies","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"band_structure"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"extract-band-energies","head":false,"input":[{"name":"band_structure","scope":"pw-scf"}],"name":"Extract Band Energies","next":"indices-below-fermi","operand":"band_energies","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"indices-below-fermi","head":false,"input":[{"name":"fermi_energy","scope":"pw-scf"}],"name":"Find Indices Below Fermi","next":"8771dc7f-878e-5f13-a840-a3a416854f1e","operand":"indices_below_fermi","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"8771dc7f-878e-5f13-a840-a3a416854f1e","head":false,"input":[],"name":"Store Band Below EF","next":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","operand":"KBAND_VALUE_BELOW_EF","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","head":false,"input":[],"name":"Select Band","next":"pp-wfn","operand":"KBAND_VALUE","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"KBAND_VALUE_BELOW_EF"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pp_wfn","results":["wavefunction_amplitude"],"schemaVersion":"2022.8.16"},"flowchartId":"pp-wfn","head":false,"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_wfn.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {{ KBAND_VALUE | default(1) }}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = NaN\n nx = 200\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pp_wfn","postProcessors":[],"preProcessors":[],"results":[{"name":"wavefunction_amplitude"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/zero_point_energy.json":{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","application":{"name":"espresso"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Zero Point Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"107595d1-490f-53a2-8432-7f8a12f14d96","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"isDefault":false,"monitors":["standard_output"],"name":"ph_gamma","results":["zero_point_energy"],"schemaVersion":"2022.8.16"},"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","head":false,"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n/\n0 0 0\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ph_zpe","postProcessors":[],"preProcessors":[],"results":[{"name":"zero_point_energy"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"nwchem/total_energy.json":{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","application":{"name":"nwchem"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"pople","type":"localorbital"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Total Energy","properties":["total_energy","total_energy_contributions"],"units":[{"application":{"build":"GNU","isDefault":true,"name":"nwchem","schemaVersion":"2022.8.16","shortName":"nwchem","summary":"NWChem","version":"7.0.2"},"executable":{"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":["standard_output"],"name":"nwchem","postProcessors":["error_handler"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":["standard_output"],"name":"nwchem_total_energy","results":["total_energy","total_energy_contributions"],"schemaVersion":"2022.8.16"},"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","head":true,"input":[{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","rendered":" start nwchem\n title \"Test\"\n charge 0\n geometry units au noautosym\n Si 0.000000000 0.000000000 0.000000000 \nSi 1.116306745 0.789348070 1.933500000 \n end\n basis\n * library 6-31G\n end\n dft\n xc B3LYP\n mult 1\n end\n task dft energy\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"python/ml/classification_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"name":"python"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["workflow:pyml_predict","file_content"],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:model:random_forest_classification:sklearn","results":["workflow:pyml_predict"],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:post_processing:roc_curve:sklearn","results":["file_content"],"schemaVersion":"2022.8.16"},"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ROC Curve Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"basename":"my_roc_plot.png","filetype":"image","name":"file_content"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]},"python/ml/clustering_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"name":"python"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["workflow:pyml_predict","file_content"],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_k_means_clustering_sklearn.py","templateName":"model_k_means_clustering_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:model:k_means_clustering:sklearn","results":["workflow:pyml_predict"],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_k_means_clustering_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"9c95c27b-c8bd-5e8b-8829-d354611decef","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_pca_2d_clusters_matplotlib.py","templateName":"post_processing_pca_2d_clusters_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:post_processing:pca_2d_clusters:matplotlib","results":["file_content"],"schemaVersion":"2022.8.16"},"flowchartId":"9c95c27b-c8bd-5e8b-8829-d354611decef","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_pca_2d_clusters_matplotlib.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"2D PCA Clusters Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"basename":"train_test_split.png","filetype":"image","name":"file_content"},{"basename":"train_clusters.png","filetype":"image","name":"file_content"},{"basename":"test_clusters.png","filetype":"image","name":"file_content"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]},"python/ml/regression_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"name":"python"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["workflow:pyml_predict","file_content"],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:model:multilayer_perceptron:sklearn","results":["workflow:pyml_predict"],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:post_processing:parity_plot:matplotlib","results":["file_content"],"schemaVersion":"2022.8.16"},"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Parity Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"basename":"my_parity_plot.png","filetype":"image","name":"file_content"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]},"python/ml/train_head.json":{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"name":"python"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"head-set-predict-status","head":true,"input":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"name":"Fetch Dataset","next":"head-branch-on-predict-status","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"maxOccurrences":100,"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"end-of-ml-train-head","head":false,"input":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},"python/python_script.json":{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","application":{"name":"python"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Python Script","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":["standard_output"],"name":"hello_world","schemaVersion":"2022.8.16"},"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","head":true,"input":[{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","rendered":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"shell/batch_espresso_pwscf.json":{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","application":{"name":"shell"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Batch Job (Espresso PWSCF)","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"isDefault":false,"monitors":["standard_output"],"name":"job_espresso_pw_scf","schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","rendered":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"shell/hello_world.json":{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","application":{"name":"shell"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Hello World","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":["standard_output"],"name":"hello_world","schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","rendered":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/band_gap.json":{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","application":{"name":"vasp"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Band Gap","properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_gaps","fermi_energy"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"vasp","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"f0d65517-9592-5bc8-948e-a0851a766cbb","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_nscf","results":["band_gaps","fermi_energy"],"schemaVersion":"2022.8.16"},"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","head":false,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/band_structure.json":{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","application":{"name":"vasp"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Band Structure","properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_structure"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"vasp","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/band_structure_dos.json":{"_id":"d38fea11-9781-5151-8dae-d705381498be","application":{"name":"vasp"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Band Structure + Density of States","properties":["density_of_states","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_structure"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"vasp","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/dos.json":{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","application":{"name":"vasp"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Density of States","properties":["density_of_states","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"vasp","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/fixed_cell_relaxation.json":{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","application":{"name":"vasp"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Fixed-cell Relaxation","properties":["total_energy","atomic_forces","fermi_energy","pressure","stress_tensor","total_force","final_structure"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":["standard_output","convergence_electronic","convergence_ionic"],"name":"vasp_relax","postProcessors":["prepare_restart"],"results":["total_energy","atomic_forces","fermi_energy","pressure","stress_tensor","total_force","final_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","head":true,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","postProcessors":[{"name":"prepare_restart"}],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/initial_final_total_energies.json":{"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","application":{"name":"vasp"},"isMultiMaterial":true,"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Initial/Final Total Energies","properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_neb_initial","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","head":true,"input":[{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","next":"e65a17ce-10c8-5710-ad4d-fb3d42434091","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_neb_final","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","head":false,"input":[{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/kpoint_convergence.json":{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","application":{"name":"vasp"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"K-point Convergence","properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"init-tolerance","head":true,"input":[],"name":"Init tolerance","next":"init-increment","operand":"TOL","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0.00001},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"init-increment","head":false,"input":[],"name":"Init increment","next":"init-result","operand":"INC","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"init-result","head":false,"input":[],"name":"Init result","next":"init-parameter","operand":"PREV_RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"init-parameter","head":false,"input":[],"name":"Init parameter","next":"vasp-kpoint-convergence","operand":"PARAMETER","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_kpt_conv","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"vasp-kpoint-convergence","head":false,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic Mesh\n0\nGamma\n{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}\n0 0 0\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","next":"store-result","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"store-result","head":false,"input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"name":"store result","next":"check-convergence","operand":"RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"else":"update-result","flowchartId":"check-convergence","head":false,"input":[],"maxOccurrences":50,"name":"check convergence","next":"update-result","postProcessors":[],"preProcessors":[],"results":[],"statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","status":"idle","statusTrack":[],"tags":[],"then":"convergence-is-reached","type":"condition"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"update-result","head":false,"input":[{"name":"RESULT","scope":"global"}],"name":"update result","next":"increment-parameter","operand":"PREV_RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"RESULT"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"increment-parameter","head":false,"input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"name":"increment parameter","next":"vasp-kpoint-convergence","operand":"PREV_RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER+INC"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"convergence-is-reached","head":false,"input":[{"name":"PARAMETER","scope":"global"}],"name":"exit","operand":"PARAMETER","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER"}]},"vasp/neb_subworkflow.json":{"_id":"e6215fb9-e60c-541b-b73e-b077d64b3a95","application":{"name":"vasp"},"isMultiMaterial":true,"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Nudged Elastic Band (NEB)","properties":["reaction_energy_barrier","reaction_energy_profile"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB"},{"name":"KPOINTS","templateName":"KPOINTS"}],"isDefault":false,"monitors":["standard_output"],"name":"vasp_neb","results":["reaction_energy_barrier","reaction_energy_profile"],"schemaVersion":"2022.8.16"},"flowchartId":"9a1660ab-8067-5fad-9fb8-7c039f634636","head":true,"input":[{"applicationName":"vasp","content":"ISTART = 0\nIBRION = 1\nEDIFFG = -0.001\nENCUT = 500\nNELM = 100\nNSW = 100\nIMAGES = {{ input.INTERMEDIATE_IMAGES.length or neb.nImages }}\nSPRING = -5\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISTART = 0\nIBRION = 1\nEDIFFG = -0.001\nENCUT = 500\nNELM = 100\nNSW = 100\nIMAGES = 1\nSPRING = -5\nISPIN = 2\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"vasp_neb","postProcessors":[],"preProcessors":[],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/prepare_images.json":{"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","application":{"name":"vasp"},"isMultiMaterial":true,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Prepare Directories","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"isDefault":false,"monitors":["standard_output"],"name":"bash_vasp_prepare_neb_images","schemaVersion":"2022.8.16"},"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","head":true,"input":[{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < 00/POSCAR < 01/POSCAR <=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n", "schemaVersion": "2022.8.16" }], "next": "8fce780b-5555-5b73-b3d1-1bb24a4c759d" }, { "name": "Set Average ESP Value", "type": "assignment", "operand": "AVG_ESP_RIGHT", "value": "json.loads(STDOUT)['minima']", "input": [{ "name": "STDOUT", "scope": "python-find-extrema-right" }], "status": "idle", "statusTrack": [], "flowchartId": "8fce780b-5555-5b73-b3d1-1bb24a4c759d", "tags": [], "head": false, "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }] }, "espresso/average_electrostatic_potential_via_band_structure.json": { "isMultiMaterial": true, "_id": "aa611fe8-1e6a-5e5c-976a-f64bfaaaace9", "name": "BS + Avg ESP (interface right)", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "band_gaps", "average_potential_profile"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "name": "Set Material Index (Interface right)", "type": "assignment", "operand": "MATERIAL_INDEX", "value": "2", "input": [], "status": "idle", "statusTrack": [], "flowchartId": "a05809d1-cc0d-5a0b-bf5e-d43b90a6ac4b", "tags": [], "head": true, "next": "9fc7a088-5533-5f70-bb33-f676ec65f565", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "type": "execution", "name": "pw_scf", "head": false, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "pw-bands-calculate-band-gap-right" }, { "type": "execution", "name": "pw_bands", "head": false, "results": [{ "name": "band_gaps" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "pw-bands-calculate-band-gap-right", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_bands.in" }], "results": ["band_structure"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "pw_bands.in", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }], "next": "a667d9fd-35d5-5897-be0e-fa0247233649" }, { "name": "Select indirect band gap", "type": "assignment", "operand": "BAND_GAP_INDIRECT", "value": "[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]", "input": [{ "name": "band_gaps", "scope": "pw-bands-calculate-band-gap-right" }], "status": "idle", "statusTrack": [], "flowchartId": "a667d9fd-35d5-5897-be0e-fa0247233649", "tags": [], "head": false, "next": "08819369-b541-5b51-8a40-0ee135039482", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "name": "Set Valence Band Maximum", "type": "assignment", "operand": "VBM_RIGHT", "value": "BAND_GAP_INDIRECT['eigenvalueValence']", "input": [], "status": "idle", "statusTrack": [], "flowchartId": "08819369-b541-5b51-8a40-0ee135039482", "tags": [], "head": false, "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "type": "execution", "name": "bands", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "bands.in" }], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "bands.x", "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", "name": "bands.in", "contextProviders": [], "applicationName": "espresso", "executableName": "bands.x", "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n", "schemaVersion": "2022.8.16" }], "next": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde" }, { "type": "execution", "name": "Electrostatic Potential (ESP)", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "pp.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "pp_electrostatic_potential.in" }], "results": [], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pp.x", "name": "pp_electrostatic_potential", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", "name": "pp_electrostatic_potential.in", "contextProviders": [], "applicationName": "espresso", "executableName": "pp.x", "rendered": "&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", "schemaVersion": "2022.8.16" }], "next": "average-electrostatic-potential-right" }, { "type": "execution", "name": "average ESP", "head": false, "results": [{ "name": "average_potential_profile" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "average-electrostatic-potential-right", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "average.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "average.in" }], "results": ["average_potential_profile"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "average.x", "name": "average_potential", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", "name": "average.in", "contextProviders": [], "applicationName": "espresso", "executableName": "average.x", "rendered": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", "schemaVersion": "2022.8.16" }], "next": "c6c11873-91d7-5422-8302-3dcc1ce971e9" }, { "name": "Set Macroscopically Averaged ESP Data", "type": "assignment", "operand": "array_from_context", "value": "average_potential_profile['yDataSeries'][1]", "input": [{ "name": "average_potential_profile", "scope": "average-electrostatic-potential-right" }], "status": "idle", "statusTrack": [], "flowchartId": "c6c11873-91d7-5422-8302-3dcc1ce971e9", "tags": [], "head": false, "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }] }, "espresso/band_gap_hse_dos.json": { "_id": "f1341a29-777d-5ca3-8933-78a5e0d3f6f2", "name": "HSE Band Gap", "application": { "name": "espresso" }, "properties": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "density_of_states"], "model": { "type": "dft", "subtype": "hybrid", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "hse06" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf_hse", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "band_gaps" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "f494cdb2-304f-5da2-b979-ce3fbba3a6c4", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_scf_hse.in" }], "results": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf_hse", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = {% if kgrid.dimensions[0]%2 == 0 %}{{kgrid.dimensions[0]/2}}{% else %}{{(kgrid.dimensions[0]+1)/2}}{% endif %}, nqx2 = {% if kgrid.dimensions[1]%2 == 0 %}{{kgrid.dimensions[1]/2}}{% else %}{{(kgrid.dimensions[1]+1)/2}}{% endif %}, nqx3 = {% if kgrid.dimensions[2]%2 == 0 %}{{kgrid.dimensions[2]/2}}{% else %}{{(kgrid.dimensions[2]+1)/2}}{% endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{% if d%2 == 0 %}{{d}} {% else %}{{d+1}} {% endif %}{% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf_hse.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = 1, nqx2 = 1, nqx3 = 1\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651" }, { "type": "execution", "name": "projwfc", "head": false, "results": [{ "name": "density_of_states" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "projwfc.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "projwfc.in" }], "results": ["density_of_states"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "projwfc.x", "name": "projwfc", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n", "name": "projwfc.in", "contextProviders": [], "applicationName": "espresso", "executableName": "projwfc.x", "rendered": "&PROJWFC\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n degauss = 0.01\n deltaE = 0.05\n/\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/band_gap.json": { "_id": "233bb8cf-3b4a-5378-84d9-a6a95a2ab43d", "name": "Band Gap", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "fermi_energy", "band_gaps"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0" }, { "type": "execution", "name": "pw_nscf", "head": false, "results": [{ "name": "fermi_energy" }, { "name": "band_gaps" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_nscf.in" }], "results": ["fermi_energy", "band_gaps"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_nscf", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_nscf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }] }] }, "espresso/band_structure_dos.json": { "_id": "fa594399-6b98-5d79-986c-0713601dc06c", "name": "Band Structure + Density of States", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "band_structure", "fermi_energy", "band_gaps", "density_of_states"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "d618df45-5af3-5da5-8882-d74a27e00b04" }, { "type": "execution", "name": "pw_bands", "head": false, "results": [{ "name": "band_structure" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "d618df45-5af3-5da5-8882-d74a27e00b04", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_bands.in" }], "results": ["band_structure"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "pw_bands.in", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }], "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2" }, { "type": "execution", "name": "bands", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "bands.in" }], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "bands.x", "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", "name": "bands.in", "contextProviders": [], "applicationName": "espresso", "executableName": "bands.x", "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n", "schemaVersion": "2022.8.16" }], "next": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0" }, { "type": "execution", "name": "pw_nscf", "head": false, "results": [{ "name": "fermi_energy" }, { "name": "band_gaps" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_nscf.in" }], "results": ["fermi_energy", "band_gaps"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_nscf", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_nscf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651" }, { "type": "execution", "name": "projwfc", "head": false, "results": [{ "name": "density_of_states" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "projwfc.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "projwfc.in" }], "results": ["density_of_states"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "projwfc.x", "name": "projwfc", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n", "name": "projwfc.in", "contextProviders": [], "applicationName": "espresso", "executableName": "projwfc.x", "rendered": "&PROJWFC\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n degauss = 0.01\n deltaE = 0.05\n/\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/band_structure_hse.json": { "_id": "e47ca302-96f2-5726-9b4c-f34cdfaa7f72", "name": "Main HSE Run", "application": { "name": "espresso" }, "properties": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "model": { "type": "dft", "subtype": "hybrid", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "hse06" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf_bands_hse", "head": true, "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "08bd7e4a-2454-53b7-8cc9-9a95975f7e6f", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_scf_bands_hse.in" }], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf_bands_hse", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n {% for d in qgrid.dimensions -%}\n nqx{{loop.index}} = {{d}}\n {% endfor %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal\n{{ '{{' }} {{ explicitKPath.length }} {% raw %} + KPOINTS|length {% endraw %} {{ '}}' }}\n{% raw %}\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n{% endraw %}\n{% for point in explicitKPath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}0.0000001\n{% endfor %}\n", "name": "pw_scf_bands_hse.in", "contextProviders": [{ "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "QGridFormDataManager" }, { "name": "ExplicitKPathFormDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n nqx1 = 1\n nqx2 = 1\n nqx3 = 1\n \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal\n{{ 101 + KPOINTS|length }}\n\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n\n 0.000000000 0.000000000 0.000000000 0.0000001\n 0.050000000 0.000000000 0.050000000 0.0000001\n 0.100000000 0.000000000 0.100000000 0.0000001\n 0.150000000 0.000000000 0.150000000 0.0000001\n 0.200000000 0.000000000 0.200000000 0.0000001\n 0.250000000 0.000000000 0.250000000 0.0000001\n 0.300000000 0.000000000 0.300000000 0.0000001\n 0.350000000 0.000000000 0.350000000 0.0000001\n 0.400000000 0.000000000 0.400000000 0.0000001\n 0.450000000 0.000000000 0.450000000 0.0000001\n 0.500000000 0.000000000 0.500000000 0.0000001\n 0.500000000 0.025000000 0.525000000 0.0000001\n 0.500000000 0.050000000 0.550000000 0.0000001\n 0.500000000 0.075000000 0.575000000 0.0000001\n 0.500000000 0.100000000 0.600000000 0.0000001\n 0.500000000 0.125000000 0.625000000 0.0000001\n 0.500000000 0.150000000 0.650000000 0.0000001\n 0.500000000 0.175000000 0.675000000 0.0000001\n 0.500000000 0.200000000 0.700000000 0.0000001\n 0.500000000 0.225000000 0.725000000 0.0000001\n 0.500000000 0.250000000 0.750000000 0.0000001\n 0.487500000 0.262500000 0.750000000 0.0000001\n 0.475000000 0.275000000 0.750000000 0.0000001\n 0.462500000 0.287500000 0.750000000 0.0000001\n 0.450000000 0.300000000 0.750000000 0.0000001\n 0.437500000 0.312500000 0.750000000 0.0000001\n 0.425000000 0.325000000 0.750000000 0.0000001\n 0.412500000 0.337500000 0.750000000 0.0000001\n 0.400000000 0.350000000 0.750000000 0.0000001\n 0.387500000 0.362500000 0.750000000 0.0000001\n 0.375000000 0.375000000 0.750000000 0.0000001\n 0.337500000 0.337500000 0.675000000 0.0000001\n 0.300000000 0.300000000 0.600000000 0.0000001\n 0.262500000 0.262500000 0.525000000 0.0000001\n 0.225000000 0.225000000 0.450000000 0.0000001\n 0.187500000 0.187500000 0.375000000 0.0000001\n 0.150000000 0.150000000 0.300000000 0.0000001\n 0.112500000 0.112500000 0.225000000 0.0000001\n 0.075000000 0.075000000 0.150000000 0.0000001\n 0.037500000 0.037500000 0.075000000 0.0000001\n 0.000000000 0.000000000 0.000000000 0.0000001\n 0.050000000 0.050000000 0.050000000 0.0000001\n 0.100000000 0.100000000 0.100000000 0.0000001\n 0.150000000 0.150000000 0.150000000 0.0000001\n 0.200000000 0.200000000 0.200000000 0.0000001\n 0.250000000 0.250000000 0.250000000 0.0000001\n 0.300000000 0.300000000 0.300000000 0.0000001\n 0.350000000 0.350000000 0.350000000 0.0000001\n 0.400000000 0.400000000 0.400000000 0.0000001\n 0.450000000 0.450000000 0.450000000 0.0000001\n 0.500000000 0.500000000 0.500000000 0.0000001\n 0.512500000 0.475000000 0.512500000 0.0000001\n 0.525000000 0.450000000 0.525000000 0.0000001\n 0.537500000 0.425000000 0.537500000 0.0000001\n 0.550000000 0.400000000 0.550000000 0.0000001\n 0.562500000 0.375000000 0.562500000 0.0000001\n 0.575000000 0.350000000 0.575000000 0.0000001\n 0.587500000 0.325000000 0.587500000 0.0000001\n 0.600000000 0.300000000 0.600000000 0.0000001\n 0.612500000 0.275000000 0.612500000 0.0000001\n 0.625000000 0.250000000 0.625000000 0.0000001\n 0.612500000 0.250000000 0.637500000 0.0000001\n 0.600000000 0.250000000 0.650000000 0.0000001\n 0.587500000 0.250000000 0.662500000 0.0000001\n 0.575000000 0.250000000 0.675000000 0.0000001\n 0.562500000 0.250000000 0.687500000 0.0000001\n 0.550000000 0.250000000 0.700000000 0.0000001\n 0.537500000 0.250000000 0.712500000 0.0000001\n 0.525000000 0.250000000 0.725000000 0.0000001\n 0.512500000 0.250000000 0.737500000 0.0000001\n 0.500000000 0.250000000 0.750000000 0.0000001\n 0.500000000 0.275000000 0.725000000 0.0000001\n 0.500000000 0.300000000 0.700000000 0.0000001\n 0.500000000 0.325000000 0.675000000 0.0000001\n 0.500000000 0.350000000 0.650000000 0.0000001\n 0.500000000 0.375000000 0.625000000 0.0000001\n 0.500000000 0.400000000 0.600000000 0.0000001\n 0.500000000 0.425000000 0.575000000 0.0000001\n 0.500000000 0.450000000 0.550000000 0.0000001\n 0.500000000 0.475000000 0.525000000 0.0000001\n 0.500000000 0.500000000 0.500000000 0.0000001\n 0.512500000 0.475000000 0.512500000 0.0000001\n 0.525000000 0.450000000 0.525000000 0.0000001\n 0.537500000 0.425000000 0.537500000 0.0000001\n 0.550000000 0.400000000 0.550000000 0.0000001\n 0.562500000 0.375000000 0.562500000 0.0000001\n 0.575000000 0.350000000 0.575000000 0.0000001\n 0.587500000 0.325000000 0.587500000 0.0000001\n 0.600000000 0.300000000 0.600000000 0.0000001\n 0.612500000 0.275000000 0.612500000 0.0000001\n 0.625000000 0.250000000 0.625000000 0.0000001\n 0.612500000 0.225000000 0.612500000 0.0000001\n 0.600000000 0.200000000 0.600000000 0.0000001\n 0.587500000 0.175000000 0.587500000 0.0000001\n 0.575000000 0.150000000 0.575000000 0.0000001\n 0.562500000 0.125000000 0.562500000 0.0000001\n 0.550000000 0.100000000 0.550000000 0.0000001\n 0.537500000 0.075000000 0.537500000 0.0000001\n 0.525000000 0.050000000 0.525000000 0.0000001\n 0.512500000 0.025000000 0.512500000 0.0000001\n 0.500000000 0.000000000 0.500000000 0.0000001\n\n", "schemaVersion": "2022.8.16" }], "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2" }, { "type": "execution", "name": "bands", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "bands.in" }], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "bands.x", "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", "name": "bands.in", "contextProviders": [], "applicationName": "espresso", "executableName": "bands.x", "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/band_structure_magn.json": { "_id": "354942f1-9f3d-57a9-b5ae-6bdf5b3a60af", "name": "Bandstructure with spin magnetism", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "band_structure"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf_magn", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "c229d2a0-3c19-5f13-b3e0-ceb86cb9fbc1", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_scf_magn.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf_magn", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf_magn.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "CollinearMagnetizationDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n nspin = 2\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "ea06c333-0cc7-51d4-bd98-cc53fa0844d1" }, { "type": "execution", "name": "pw_bands_magn", "head": false, "results": [{ "name": "band_structure" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "ea06c333-0cc7-51d4-bd98-cc53fa0844d1", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_bands_magn.in" }], "results": ["band_structure"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_bands_magn", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "pw_bands_magn.in", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "CollinearMagnetizationDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n nspin = 2\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }], "next": "a8e4de4b-1f55-50e8-a712-ce0b37c04752" }, { "type": "execution", "name": "bands_spin_up", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "a8e4de4b-1f55-50e8-a712-ce0b37c04752", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "bands_spin_up.in" }], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "bands.x", "name": "bands_spin_up", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_up.dat'{% endraw %}\n spin_component = 1\n no_overlap = .true.\n/\n", "name": "bands_spin_up.in", "contextProviders": [], "applicationName": "espresso", "executableName": "bands.x", "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands_up.dat'\n spin_component = 1\n no_overlap = .true.\n/\n", "schemaVersion": "2022.8.16" }], "next": "fd937050-a3f3-5d4d-bb50-d150a93ea5e0" }, { "type": "execution", "name": "bands_spin_dn", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "fd937050-a3f3-5d4d-bb50-d150a93ea5e0", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "bands_spin_dn.in" }], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "bands.x", "name": "bands_spin_dn", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_dn.dat'{% endraw %}\n spin_component = 2\n no_overlap = .true.\n/\n", "name": "bands_spin_dn.in", "contextProviders": [], "applicationName": "espresso", "executableName": "bands.x", "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands_dn.dat'\n spin_component = 2\n no_overlap = .true.\n/\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/band_structure_soc.json": { "_id": "153b4a88-5d56-553f-b7d3-40df96968eb4", "name": "Bandstructure with SOC", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "band_structure"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "nc-fr", "data": { "searchText": "nc-fr" } }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf_soc", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "74ec024a-f247-5f15-9c21-cc169bcb62c7", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_scf_soc.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf_soc", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf_soc.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "NonCollinearMagnetizationDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "cee6ae30-cf34-5138-bdc5-5c57c2a6de5b" }, { "type": "execution", "name": "pw_bands_soc", "head": false, "results": [{ "name": "band_structure" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "cee6ae30-cf34-5138-bdc5-5c57c2a6de5b", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_bands_soc.in" }], "results": ["band_structure"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_bands_soc", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "pw_bands_soc.in", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "NonCollinearMagnetizationDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }], "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2" }, { "type": "execution", "name": "bands", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "bands.in" }], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "bands.x", "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", "name": "bands.in", "contextProviders": [], "applicationName": "espresso", "executableName": "bands.x", "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/band_structure.json": { "_id": "26d32e68-c2b5-50e9-8933-15f684fcc039", "name": "Band Structure", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "band_structure"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "d618df45-5af3-5da5-8882-d74a27e00b04" }, { "type": "execution", "name": "pw_bands", "head": false, "results": [{ "name": "band_structure" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "d618df45-5af3-5da5-8882-d74a27e00b04", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_bands.in" }], "results": ["band_structure"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "pw_bands.in", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }], "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2" }, { "type": "execution", "name": "bands", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "bands.in" }], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "bands.x", "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", "name": "bands.in", "contextProviders": [], "applicationName": "espresso", "executableName": "bands.x", "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/dielectric_tensor.json": { "_id": "38340b52-83ad-5862-bc18-c140bdc0cb72", "name": "Compute Dielectric Function", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "fermi_energy", "band_gaps", "dielectric_tensor"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "nc", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "3b230ec3-0791-52f7-a4db-625390b8718f" }, { "name": "Set No-Symmetry Flag", "type": "assignment", "operand": "NO_SYMMETRY_NO_INVERSION", "value": true, "input": [], "status": "idle", "statusTrack": [], "flowchartId": "3b230ec3-0791-52f7-a4db-625390b8718f", "tags": [], "head": false, "next": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "type": "execution", "name": "pw_nscf", "head": false, "results": [{ "name": "fermi_energy" }, { "name": "band_gaps" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_nscf.in" }], "results": ["fermi_energy", "band_gaps"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_nscf", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_nscf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb" }, { "type": "execution", "name": "Compute dielectric function", "head": false, "results": [{ "name": "dielectric_tensor" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "epsilon.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "epsilon.in" }], "results": ["dielectric_tensor"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "epsilon.x", "name": "dielectric_tensor", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n", "name": "epsilon.in", "contextProviders": [], "applicationName": "espresso", "executableName": "epsilon.x", "rendered": "&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/dos.json": { "_id": "2cf317f3-3306-5a96-bc9b-e9103ebcd5be", "name": "Density of States", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "fermi_energy", "band_gaps", "density_of_states"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0" }, { "type": "execution", "name": "pw_nscf", "head": false, "results": [{ "name": "fermi_energy" }, { "name": "band_gaps" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_nscf.in" }], "results": ["fermi_energy", "band_gaps"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_nscf", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_nscf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651" }, { "type": "execution", "name": "projwfc", "head": false, "results": [{ "name": "density_of_states" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "projwfc.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "projwfc.in" }], "results": ["density_of_states"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "projwfc.x", "name": "projwfc", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n", "name": "projwfc.in", "contextProviders": [], "applicationName": "espresso", "executableName": "projwfc.x", "rendered": "&PROJWFC\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n degauss = 0.01\n deltaE = 0.05\n/\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/electronic_density_mesh.json": { "_id": "e2749c5a-fcd9-589c-819b-8b88c5c90924", "name": "Electronic Density Mesh", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "e1a6e1e9-7994-5cd0-98d7-ae8909a10061" }, { "type": "execution", "name": "pp_density", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "e1a6e1e9-7994-5cd0-98d7-ae8909a10061", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "pp.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "pp_density.in" }], "results": [], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pp.x", "name": "pp_density", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n", "name": "pp_density.in", "contextProviders": [], "applicationName": "espresso", "executableName": "pp.x", "rendered": "&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/esm_relax.json": { "_id": "69728792-afeb-50aa-9b4e-6974a90f676a", "name": "Effective Screening Medium (ESM) Relax", "application": { "name": "espresso" }, "properties": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor", "potential_profile", "charge_density_profile"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_esm_relax", "head": true, "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }, { "name": "potential_profile" }, { "name": "charge_density_profile" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "a2bec506-1fdd-5125-a787-85f31cde20c1", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_esm_relax.in" }], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor", "potential_profile", "charge_density_profile"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_esm_relax", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_esm_relax.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "BoundaryConditionsFormDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = 'pbc'\n fcp_mu = 0\n esm_w = 0\n esm_efield = 0\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }] }] }, "espresso/esm.json": { "_id": "0de669f6-a455-5dae-b331-19dc85f7090f", "name": "Effective Screening Medium (ESM)", "application": { "name": "espresso" }, "properties": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor", "potential_profile", "charge_density_profile"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_esm", "head": true, "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }, { "name": "potential_profile" }, { "name": "charge_density_profile" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "2f487bc6-c237-53e4-bad5-be60369662cb", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_esm.in" }], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor", "potential_profile", "charge_density_profile"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_esm", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_esm.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "BoundaryConditionsFormDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = 'pbc'\n fcp_mu = 0\n esm_w = 0\n esm_efield = 0\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }] }] }, "espresso/espresso_extract_kpoints.json": { "_id": "a2785cc5-2427-5c7a-b30f-7077475b948c", "name": "Extract KPOINTS", "application": { "name": "espresso" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "Extract kpoints", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "a716b133-2d04-50b5-b497-100265e3fa24", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "espresso_extract_kpoints.py" }, { "name": "requirements.txt", "templateName": "requirements_empty.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "espresso_extract_kpoints", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n", "name": "espresso_extract_kpoints.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n", "schemaVersion": "2022.8.16" }, { "content": "# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/espresso_xml_get_qpt_irr.json": { "_id": "e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a", "name": "espresso-xml-get-qpt-irr", "application": { "name": "espresso" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "python", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "9b8a495e-1ac1-56a7-b2e0-af1b405a1219", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "espresso_xml_get_qpt_irr.py" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "espresso_xml_get_qpt_irr", "schemaVersion": "2022.8.16", "isDefault": false }, "next": "d0fd8654-2106-546b-8792-7bb46272befc", "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n{# JOB_WORK_DIR will be initialized at runtime => avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n", "name": "espresso_xml_get_qpt_irr.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n\n\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n", "schemaVersion": "2022.8.16" }] }, { "name": "assignment", "type": "assignment", "operand": "Q_POINTS", "value": "json.loads(STDOUT)", "input": [{ "scope": "9b8a495e-1ac1-56a7-b2e0-af1b405a1219", "name": "STDOUT" }], "status": "idle", "statusTrack": [], "flowchartId": "d0fd8654-2106-546b-8792-7bb46272befc", "tags": [], "head": false, "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }] }, "espresso/fixed_cell_relaxation.json": { "_id": "fb75e249-5489-5146-bd8a-786d33330d9c", "name": "Fixed-cell Relaxation", "application": { "name": "espresso" }, "properties": ["total_energy", "fermi_energy", "pressure", "atomic_forces", "total_force", "stress_tensor", "final_structure"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_relax", "head": true, "results": [{ "name": "total_energy" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }, { "name": "final_structure" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }, { "name": "convergence_ionic" }], "flowchartId": "c42871f6-ab79-5987-b228-c3bd80f16ffd", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_relax.in" }], "monitors": ["standard_output", "convergence_electronic", "convergence_ionic"], "results": ["total_energy", "fermi_energy", "pressure", "atomic_forces", "total_force", "stress_tensor", "final_structure"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_relax", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_relax.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }] }] }, "espresso/gw_band_structure_band_gap_full_frequency.json": { "_id": "46bcdcc8-628e-518e-b8c3-9bf38d7a2aef", "name": "Full Frequency GW Band Structure + Band Gap", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "band_structure", "fermi_energy", "band_gaps"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": { "searchText": ".*dojo-oncv.*" } }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "d82a9858-3f20-5fcd-baeb-0f1d65e9e22e" }, { "type": "execution", "name": "gw_bands_full_frequency", "head": false, "results": [{ "name": "band_structure" }, { "name": "fermi_energy" }, { "name": "band_gaps" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "d82a9858-3f20-5fcd-baeb-0f1d65e9e22e", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "gw.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "gw_bands_full_frequency.in" }], "results": ["band_structure", "fermi_energy", "band_gaps"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "gw.x", "name": "gw_bands_full_frequency", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n", "name": "gw_bands_full_frequency.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QGridFormDataManager" }, { "name": "ExplicitKPath2PIBAFormDataManager" }], "applicationName": "espresso", "executableName": "gw.x", "rendered": "&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n\n ! the grid used for the linear response\n kpt_grid = 2, 2, 2\n qpt_grid = 1, 1, 1\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n101\n 0.000000000 0.000000000 0.000000000\n 0.028867513 -0.040824829 0.050000000\n 0.057735027 -0.081649658 0.100000000\n 0.086602540 -0.122474487 0.150000000\n 0.115470054 -0.163299316 0.200000000\n 0.144337567 -0.204124145 0.250000000\n 0.173205081 -0.244948974 0.300000000\n 0.202072594 -0.285773803 0.350000000\n 0.230940108 -0.326598632 0.400000000\n 0.259807621 -0.367423461 0.450000000\n 0.288675135 -0.408248290 0.500000000\n 0.274241378 -0.387835876 0.525000000\n 0.259807621 -0.367423461 0.550000000\n 0.245373864 -0.347011047 0.575000000\n 0.230940108 -0.326598632 0.600000000\n 0.216506351 -0.306186218 0.625000000\n 0.202072594 -0.285773803 0.650000000\n 0.187638837 -0.265361389 0.675000000\n 0.173205081 -0.244948974 0.700000000\n 0.158771324 -0.224536560 0.725000000\n 0.144337567 -0.204124145 0.750000000\n 0.129903811 -0.183711731 0.750000000\n 0.115470054 -0.163299316 0.750000000\n 0.101036297 -0.142886902 0.750000000\n 0.086602540 -0.122474487 0.750000000\n 0.072168784 -0.102062073 0.750000000\n 0.057735027 -0.081649658 0.750000000\n 0.043301270 -0.061237244 0.750000000\n 0.028867513 -0.040824829 0.750000000\n 0.014433757 -0.020412415 0.750000000\n -0.000000000 -0.000000000 0.750000000\n -0.000000000 -0.000000000 0.675000000\n -0.000000000 -0.000000000 0.600000000\n -0.000000000 -0.000000000 0.525000000\n -0.000000000 -0.000000000 0.450000000\n -0.000000000 -0.000000000 0.375000000\n -0.000000000 -0.000000000 0.300000000\n -0.000000000 -0.000000000 0.225000000\n -0.000000000 -0.000000000 0.150000000\n -0.000000000 -0.000000000 0.075000000\n 0.000000000 0.000000000 0.000000000\n 0.028867513 0.020412415 0.050000000\n 0.057735027 0.040824829 0.100000000\n 0.086602540 0.061237244 0.150000000\n 0.115470054 0.081649658 0.200000000\n 0.144337567 0.102062073 0.250000000\n 0.173205081 0.122474487 0.300000000\n 0.202072594 0.142886902 0.350000000\n 0.230940108 0.163299316 0.400000000\n 0.259807621 0.183711731 0.450000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.339193283 -0.204124145 0.637500000\n 0.317542648 -0.204124145 0.650000000\n 0.295892013 -0.204124145 0.662500000\n 0.274241378 -0.204124145 0.675000000\n 0.252590743 -0.204124145 0.687500000\n 0.230940108 -0.204124145 0.700000000\n 0.209289473 -0.204124145 0.712500000\n 0.187638837 -0.204124145 0.725000000\n 0.165988202 -0.204124145 0.737500000\n 0.144337567 -0.204124145 0.750000000\n 0.158771324 -0.163299316 0.725000000\n 0.173205081 -0.122474487 0.700000000\n 0.187638837 -0.081649658 0.675000000\n 0.202072594 -0.040824829 0.650000000\n 0.216506351 -0.000000000 0.625000000\n 0.230940108 0.040824829 0.600000000\n 0.245373864 0.081649658 0.575000000\n 0.259807621 0.122474487 0.550000000\n 0.274241378 0.163299316 0.525000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.353627040 -0.224536560 0.612500000\n 0.346410162 -0.244948974 0.600000000\n 0.339193283 -0.265361389 0.587500000\n 0.331976405 -0.285773803 0.575000000\n 0.324759526 -0.306186218 0.562500000\n 0.317542648 -0.326598632 0.550000000\n 0.310325770 -0.347011047 0.537500000\n 0.303108891 -0.367423461 0.525000000\n 0.295892013 -0.387835876 0.512500000\n 0.288675135 -0.408248290 0.500000000\n\n/\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/gw_band_structure_band_gap_plasmon_pole.json": { "_id": "72b79a87-8eef-5fe2-9d6c-6c9c256dd56c", "name": "Plasmon-Pole GW Band Structure + Band Gap", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "band_structure", "fermi_energy", "band_gaps"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": { "searchText": ".*dojo-oncv.*" } }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "f9910952-eca9-5a5f-ae03-a0060ae2fc78" }, { "type": "execution", "name": "gw_bands_plasmon_pole", "head": false, "results": [{ "name": "band_structure" }, { "name": "fermi_energy" }, { "name": "band_gaps" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "f9910952-eca9-5a5f-ae03-a0060ae2fc78", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "gw.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "gw_bands_plasmon_pole.in" }], "results": ["band_structure", "fermi_energy", "band_gaps"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "gw.x", "name": "gw_bands_plasmon_pole", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n", "name": "gw_bands_plasmon_pole.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QGridFormDataManager" }, { "name": "ExplicitKPath2PIBAFormDataManager" }], "applicationName": "espresso", "executableName": "gw.x", "rendered": "&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n\n ! the grid used for the linear response\n kpt_grid = 2, 2, 2\n qpt_grid = 1, 1, 1\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n101\n 0.000000000 0.000000000 0.000000000\n 0.028867513 -0.040824829 0.050000000\n 0.057735027 -0.081649658 0.100000000\n 0.086602540 -0.122474487 0.150000000\n 0.115470054 -0.163299316 0.200000000\n 0.144337567 -0.204124145 0.250000000\n 0.173205081 -0.244948974 0.300000000\n 0.202072594 -0.285773803 0.350000000\n 0.230940108 -0.326598632 0.400000000\n 0.259807621 -0.367423461 0.450000000\n 0.288675135 -0.408248290 0.500000000\n 0.274241378 -0.387835876 0.525000000\n 0.259807621 -0.367423461 0.550000000\n 0.245373864 -0.347011047 0.575000000\n 0.230940108 -0.326598632 0.600000000\n 0.216506351 -0.306186218 0.625000000\n 0.202072594 -0.285773803 0.650000000\n 0.187638837 -0.265361389 0.675000000\n 0.173205081 -0.244948974 0.700000000\n 0.158771324 -0.224536560 0.725000000\n 0.144337567 -0.204124145 0.750000000\n 0.129903811 -0.183711731 0.750000000\n 0.115470054 -0.163299316 0.750000000\n 0.101036297 -0.142886902 0.750000000\n 0.086602540 -0.122474487 0.750000000\n 0.072168784 -0.102062073 0.750000000\n 0.057735027 -0.081649658 0.750000000\n 0.043301270 -0.061237244 0.750000000\n 0.028867513 -0.040824829 0.750000000\n 0.014433757 -0.020412415 0.750000000\n -0.000000000 -0.000000000 0.750000000\n -0.000000000 -0.000000000 0.675000000\n -0.000000000 -0.000000000 0.600000000\n -0.000000000 -0.000000000 0.525000000\n -0.000000000 -0.000000000 0.450000000\n -0.000000000 -0.000000000 0.375000000\n -0.000000000 -0.000000000 0.300000000\n -0.000000000 -0.000000000 0.225000000\n -0.000000000 -0.000000000 0.150000000\n -0.000000000 -0.000000000 0.075000000\n 0.000000000 0.000000000 0.000000000\n 0.028867513 0.020412415 0.050000000\n 0.057735027 0.040824829 0.100000000\n 0.086602540 0.061237244 0.150000000\n 0.115470054 0.081649658 0.200000000\n 0.144337567 0.102062073 0.250000000\n 0.173205081 0.122474487 0.300000000\n 0.202072594 0.142886902 0.350000000\n 0.230940108 0.163299316 0.400000000\n 0.259807621 0.183711731 0.450000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.339193283 -0.204124145 0.637500000\n 0.317542648 -0.204124145 0.650000000\n 0.295892013 -0.204124145 0.662500000\n 0.274241378 -0.204124145 0.675000000\n 0.252590743 -0.204124145 0.687500000\n 0.230940108 -0.204124145 0.700000000\n 0.209289473 -0.204124145 0.712500000\n 0.187638837 -0.204124145 0.725000000\n 0.165988202 -0.204124145 0.737500000\n 0.144337567 -0.204124145 0.750000000\n 0.158771324 -0.163299316 0.725000000\n 0.173205081 -0.122474487 0.700000000\n 0.187638837 -0.081649658 0.675000000\n 0.202072594 -0.040824829 0.650000000\n 0.216506351 -0.000000000 0.625000000\n 0.230940108 0.040824829 0.600000000\n 0.245373864 0.081649658 0.575000000\n 0.259807621 0.122474487 0.550000000\n 0.274241378 0.163299316 0.525000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.353627040 -0.224536560 0.612500000\n 0.346410162 -0.244948974 0.600000000\n 0.339193283 -0.265361389 0.587500000\n 0.331976405 -0.285773803 0.575000000\n 0.324759526 -0.306186218 0.562500000\n 0.317542648 -0.326598632 0.550000000\n 0.310325770 -0.347011047 0.537500000\n 0.303108891 -0.367423461 0.525000000\n 0.295892013 -0.387835876 0.512500000\n 0.288675135 -0.408248290 0.500000000\n\n/\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/kpoint_convergence.json": { "_id": "ff6a8fbc-2202-5786-9a26-67c843417d0b", "name": "K-point Convergence", "application": { "name": "espresso" }, "properties": ["total_energy", "fermi_energy", "pressure", "atomic_forces", "total_force", "stress_tensor"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "name": "Init tolerance", "type": "assignment", "operand": "TOL", "value": 0.00001, "input": [], "flowchartId": "init-tolerance", "status": "idle", "statusTrack": [], "tags": [], "head": true, "next": "init-increment", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "name": "Init increment", "type": "assignment", "operand": "INC", "value": 1, "input": [], "flowchartId": "init-increment", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "init-result", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "name": "Init result", "type": "assignment", "operand": "PREV_RESULT", "value": 0, "input": [], "flowchartId": "init-result", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "init-parameter", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "name": "Init parameter", "type": "assignment", "operand": "PARAMETER", "value": 1, "input": [], "flowchartId": "init-parameter", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "pwscf-kpoint-convergence", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "type": "execution", "name": "pw_scf_kpt_conv", "head": false, "results": [{ "name": "total_energy" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "pwscf-kpoint-convergence", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_scf_kpt_conv.in" }], "results": ["total_energy", "fermi_energy", "pressure", "atomic_forces", "total_force", "stress_tensor"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf_kpt_conv", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0{% endraw %}\n", "name": "pw_scf_kpt_conv.in", "contextProviders": [{ "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0\n", "schemaVersion": "2022.8.16" }], "next": "store-result" }, { "name": "store result", "type": "assignment", "operand": "RESULT", "value": "total_energy", "input": [{ "name": "total_energy", "scope": "pwscf-kpoint-convergence" }], "flowchartId": "store-result", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "check-convergence", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "name": "check convergence", "type": "condition", "input": [], "results": [], "preProcessors": [], "postProcessors": [], "then": "convergence-is-reached", "else": "update-result", "statement": "abs((PREV_RESULT-RESULT)/RESULT) < TOL", "maxOccurrences": 50, "flowchartId": "check-convergence", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "update-result", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "name": "update result", "type": "assignment", "operand": "PREV_RESULT", "value": "RESULT", "input": [{ "name": "RESULT", "scope": "global" }], "flowchartId": "update-result", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "increment-parameter", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "name": "increment parameter", "type": "assignment", "operand": "PREV_RESULT", "value": "PARAMETER+INC", "input": [{ "name": "INC", "scope": "global" }, { "name": "PARAMETER", "scope": "global" }], "flowchartId": "increment-parameter", "next": "pwscf-kpoint-convergence", "status": "idle", "statusTrack": [], "tags": [], "head": false, "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "name": "exit", "type": "assignment", "operand": "PARAMETER", "value": "PARAMETER", "input": [{ "name": "PARAMETER", "scope": "global" }], "flowchartId": "convergence-is-reached", "status": "idle", "statusTrack": [], "tags": [], "head": false, "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }] }, "espresso/neb.json": { "isMultiMaterial": true, "_id": "c9034468-df28-5357-8912-02226f919042", "name": "Nudged Elastic Band (NEB)", "application": { "name": "espresso" }, "properties": ["reaction_energy_barrier", "reaction_energy_profile"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "neb", "head": true, "results": [{ "name": "reaction_energy_barrier" }, { "name": "reaction_energy_profile" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "9f273ca0-d240-5b1f-89a9-64dd579304ac", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "neb.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "neb.in" }], "results": ["reaction_energy_barrier", "reaction_energy_profile"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "neb.x", "name": "neb", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = {{ 2 + (input.INTERMEDIATE_IMAGES.length or neb.nImages) }},\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\n{{ input.FIRST_IMAGE }}\n{%- for IMAGE in input.INTERMEDIATE_IMAGES %}\nINTERMEDIATE_IMAGE\nATOMIC_POSITIONS crystal\n{{ IMAGE }}\n{%- endfor %}\nLAST_IMAGE\nATOMIC_POSITIONS crystal\n{{ input.LAST_IMAGE }}\nEND_POSITIONS\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nEND_ENGINE_INPUT\nEND\n", "name": "neb.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "NEBFormDataManager" }, { "name": "QENEBInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "neb.x", "rendered": "BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = 3,\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\nSi 28.0855 \nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nLAST_IMAGE\nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nEND_POSITIONS\nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \nEND_ENGINE_INPUT\nEND\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/ph_init_qpoints.json": { "_id": "2f017bcb-f4ba-55b8-b939-1f780679a88e", "name": "ph-init-qpoints", "application": { "name": "espresso" }, "properties": [], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "ph_init_qpoints", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "b8ea6a33-38f3-5434-b17e-b5eae8fff9fc", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "ph_init_qpoints.in" }], "results": [], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "ph.x", "name": "ph_init_qpoints", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", "name": "ph_init_qpoints.in", "contextProviders": [{ "name": "QGridFormDataManager" }], "applicationName": "espresso", "executableName": "ph.x", "rendered": "&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/ph_single_irr_qpt.json": { "_id": "e68db280-8636-53e3-81a0-88396ba6147d", "name": "ph-single-irr-qpt", "application": { "name": "espresso" }, "properties": [], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "ph_single_irr_qpt", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "8db9af08-d935-57a0-a824-e7db6d936de8", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "ph_single_irr_qpt.in" }], "results": [], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "ph.x", "name": "ph_single_irr_qpt", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", "name": "ph_single_irr_qpt.in", "contextProviders": [{ "name": "QGridFormDataManager" }], "applicationName": "espresso", "executableName": "ph.x", "rendered": "&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n \n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n \n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = '{{ JOB_SCRATCH_DIR }}/outdir'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/phonon_dispersions.json": { "_id": "bfb69b48-8fbf-5a0d-8949-448f20754766", "name": "Phonon Dispersions", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "phonon_dos", "phonon_dispersions"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "13bcafce-56ef-5b47-b079-317495eb6933" }, { "type": "execution", "name": "ph_grid", "head": false, "results": [{ "name": "phonon_dos" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "13bcafce-56ef-5b47-b079-317495eb6933", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "ph_grid.in" }], "results": ["phonon_dos"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "ph.x", "name": "ph_grid", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", "name": "ph_grid.in", "contextProviders": [{ "name": "QGridFormDataManager" }], "applicationName": "espresso", "executableName": "ph.x", "rendered": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n ldisp = .true.\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n", "schemaVersion": "2022.8.16" }], "next": "3b4507a7-9244-540b-abe0-66bceab700f5" }, { "type": "execution", "name": "q2r", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "3b4507a7-9244-540b-abe0-66bceab700f5", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "q2r.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "q2r.in" }], "results": [], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "q2r.x", "name": "q2r", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", "name": "q2r.in", "contextProviders": [], "applicationName": "espresso", "executableName": "q2r.x", "rendered": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", "schemaVersion": "2022.8.16" }], "next": "a7fded20-889b-54fc-bbb0-456e82689ab1" }, { "type": "execution", "name": "matdyn_path", "head": false, "results": [{ "name": "phonon_dispersions" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "a7fded20-889b-54fc-bbb0-456e82689ab1", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "matdyn.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "matdyn_path.in" }], "monitors": ["standard_output"], "results": ["phonon_dispersions"], "applicationName": "espresso", "executableName": "matdyn.x", "name": "matdyn_path", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "matdyn_path.in", "contextProviders": [{ "name": "IPathFormDataManager" }], "applicationName": "espresso", "executableName": "matdyn.x", "rendered": "&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/phonon_dos_dispersion.json": { "_id": "291d25cd-378a-5be7-9d85-c8013a4b165b", "name": "Phonon Density of States + Dispersions", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "phonon_dos", "phonon_dispersions"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "13bcafce-56ef-5b47-b079-317495eb6933" }, { "type": "execution", "name": "ph_grid", "head": false, "results": [{ "name": "phonon_dos" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "13bcafce-56ef-5b47-b079-317495eb6933", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "ph_grid.in" }], "results": ["phonon_dos"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "ph.x", "name": "ph_grid", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", "name": "ph_grid.in", "contextProviders": [{ "name": "QGridFormDataManager" }], "applicationName": "espresso", "executableName": "ph.x", "rendered": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n ldisp = .true.\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n", "schemaVersion": "2022.8.16" }], "next": "3b4507a7-9244-540b-abe0-66bceab700f5" }, { "type": "execution", "name": "q2r", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "3b4507a7-9244-540b-abe0-66bceab700f5", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "q2r.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "q2r.in" }], "results": [], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "q2r.x", "name": "q2r", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", "name": "q2r.in", "contextProviders": [], "applicationName": "espresso", "executableName": "q2r.x", "rendered": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", "schemaVersion": "2022.8.16" }], "next": "8fe6a24b-c994-55a2-a448-88657292e8c2" }, { "type": "execution", "name": "matdyn_grid", "head": false, "results": [{ "name": "phonon_dos" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "8fe6a24b-c994-55a2-a448-88657292e8c2", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "matdyn.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "matdyn_grid.in" }], "monitors": ["standard_output"], "results": ["phonon_dos"], "applicationName": "espresso", "executableName": "matdyn.x", "name": "matdyn_grid", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n", "name": "matdyn_grid.in", "contextProviders": [{ "name": "IGridFormDataManager" }], "applicationName": "espresso", "executableName": "matdyn.x", "rendered": "&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n", "schemaVersion": "2022.8.16" }], "next": "a7fded20-889b-54fc-bbb0-456e82689ab1" }, { "type": "execution", "name": "matdyn_path", "head": false, "results": [{ "name": "phonon_dispersions" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "a7fded20-889b-54fc-bbb0-456e82689ab1", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "matdyn.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "matdyn_path.in" }], "monitors": ["standard_output"], "results": ["phonon_dispersions"], "applicationName": "espresso", "executableName": "matdyn.x", "name": "matdyn_path", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "matdyn_path.in", "contextProviders": [{ "name": "IPathFormDataManager" }], "applicationName": "espresso", "executableName": "matdyn.x", "rendered": "&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/phonon_dos.json": { "_id": "2232051b-9f2a-5a48-9b4d-6231eb6e8297", "name": "Phonon Density of States", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "phonon_dos"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "13bcafce-56ef-5b47-b079-317495eb6933" }, { "type": "execution", "name": "ph_grid", "head": false, "results": [{ "name": "phonon_dos" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "13bcafce-56ef-5b47-b079-317495eb6933", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "ph_grid.in" }], "results": ["phonon_dos"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "ph.x", "name": "ph_grid", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", "name": "ph_grid.in", "contextProviders": [{ "name": "QGridFormDataManager" }], "applicationName": "espresso", "executableName": "ph.x", "rendered": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n ldisp = .true.\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n", "schemaVersion": "2022.8.16" }], "next": "3b4507a7-9244-540b-abe0-66bceab700f5" }, { "type": "execution", "name": "q2r", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "3b4507a7-9244-540b-abe0-66bceab700f5", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "q2r.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "q2r.in" }], "results": [], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "q2r.x", "name": "q2r", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", "name": "q2r.in", "contextProviders": [], "applicationName": "espresso", "executableName": "q2r.x", "rendered": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", "schemaVersion": "2022.8.16" }], "next": "8fe6a24b-c994-55a2-a448-88657292e8c2" }, { "type": "execution", "name": "matdyn_grid", "head": false, "results": [{ "name": "phonon_dos" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "8fe6a24b-c994-55a2-a448-88657292e8c2", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "matdyn.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "matdyn_grid.in" }], "monitors": ["standard_output"], "results": ["phonon_dos"], "applicationName": "espresso", "executableName": "matdyn.x", "name": "matdyn_grid", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n", "name": "matdyn_grid.in", "contextProviders": [{ "name": "IGridFormDataManager" }], "applicationName": "espresso", "executableName": "matdyn.x", "rendered": "&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/phonon_reduce.json": { "_id": "545a66e2-dfbe-513e-acaf-d79d0d139b9c", "name": "reduce", "application": { "name": "espresso" }, "properties": ["phonon_dos", "phonon_dispersions"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "ph_grid_restart", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "cb206177-a4af-599a-81ba-6c88d24253b6", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "ph_grid_restart.in" }], "results": [], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "ph.x", "name": "ph_grid_restart", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", "name": "ph_grid_restart.in", "contextProviders": [{ "name": "QGridFormDataManager" }], "applicationName": "espresso", "executableName": "ph.x", "rendered": "&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n", "schemaVersion": "2022.8.16" }], "next": "3b4507a7-9244-540b-abe0-66bceab700f5" }, { "type": "execution", "name": "q2r", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "3b4507a7-9244-540b-abe0-66bceab700f5", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "q2r.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "q2r.in" }], "results": [], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "q2r.x", "name": "q2r", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", "name": "q2r.in", "contextProviders": [], "applicationName": "espresso", "executableName": "q2r.x", "rendered": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", "schemaVersion": "2022.8.16" }], "next": "8fe6a24b-c994-55a2-a448-88657292e8c2" }, { "type": "execution", "name": "matdyn_grid", "head": false, "results": [{ "name": "phonon_dos" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "8fe6a24b-c994-55a2-a448-88657292e8c2", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "matdyn.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "matdyn_grid.in" }], "monitors": ["standard_output"], "results": ["phonon_dos"], "applicationName": "espresso", "executableName": "matdyn.x", "name": "matdyn_grid", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n", "name": "matdyn_grid.in", "contextProviders": [{ "name": "IGridFormDataManager" }], "applicationName": "espresso", "executableName": "matdyn.x", "rendered": "&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n", "schemaVersion": "2022.8.16" }], "next": "a7fded20-889b-54fc-bbb0-456e82689ab1" }, { "type": "execution", "name": "matdyn_path", "head": false, "results": [{ "name": "phonon_dispersions" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "a7fded20-889b-54fc-bbb0-456e82689ab1", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "matdyn.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "matdyn_path.in" }], "monitors": ["standard_output"], "results": ["phonon_dispersions"], "applicationName": "espresso", "executableName": "matdyn.x", "name": "matdyn_path", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "matdyn_path.in", "contextProviders": [{ "name": "IPathFormDataManager" }], "applicationName": "espresso", "executableName": "matdyn.x", "rendered": "&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/post_processor.json": { "_id": "7239fc3a-b343-513f-af35-e8687e1829da", "name": "post-processor", "application": { "name": "espresso" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "shell", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "99304304-e873-5c89-ae83-91e61a7f629c", "preProcessors": [], "postProcessors": [], "application": { "name": "shell", "shortName": "sh", "summary": "Shell Script", "build": "GNU", "version": "5.1.8", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "espresso_collect_dynmat.sh" }], "monitors": ["standard_output"], "applicationName": "shell", "executableName": "sh", "name": "espresso_collect_dynmat", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n", "name": "espresso_collect_dynmat.sh", "contextProviders": [], "applicationName": "shell", "executableName": "sh", "rendered": "\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/pre_processor.json": { "_id": "03f3a8a3-1fd0-5007-925f-fba78be63a51", "name": "pre-processor", "application": { "name": "espresso" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "shell", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "99304304-e873-5c89-ae83-91e61a7f629c", "preProcessors": [], "postProcessors": [], "application": { "name": "shell", "shortName": "sh", "summary": "Shell Script", "build": "GNU", "version": "5.1.8", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "espresso_link_outdir_save.sh" }], "monitors": ["standard_output"], "applicationName": "shell", "executableName": "sh", "name": "espresso_link_outdir_save", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n", "name": "espresso_link_outdir_save.sh", "contextProviders": [], "applicationName": "shell", "executableName": "sh", "rendered": "\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/pw_scf.json": { "_id": "79f2cb6a-7994-5369-8c85-af07c55ad26f", "name": "Preliminary SCF Calculation", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }] }] }, "espresso/recalculate_bands.json": { "_id": "64551dfb-e529-5d8d-9092-ff268f4da134", "name": "Recalculate Bands", "application": { "name": "espresso" }, "properties": ["band_structure"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_bands", "head": true, "results": [{ "name": "band_structure" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "d618df45-5af3-5da5-8882-d74a27e00b04", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_bands.in" }], "results": ["band_structure"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "pw_bands.in", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }], "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2" }, { "type": "execution", "name": "bands", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "bands.in" }], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "bands.x", "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", "name": "bands.in", "contextProviders": [], "applicationName": "espresso", "executableName": "bands.x", "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/surface_energy.json": { "_id": "3e05a2b5-4171-54a2-9d2d-9e46118a56bf", "name": "Surface Energy", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "name": "io-slab", "type": "io", "subtype": "input", "head": true, "results": [], "monitors": [], "flowchartId": "e463ef46-a36e-5168-87dd-e21eb980dfb8", "preProcessors": [], "postProcessors": [], "source": "api", "input": [{ "endpoint": "materials", "endpoint_options": { "params": { "query": "{'_id': MATERIAL_ID}", "projection": "{}" } }, "name": "DATA" }], "next": "ee7abb4e-7848-5aeb-960d-0d441909e2d1", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "slab", "type": "assignment", "operand": "SLAB", "value": "DATA[0]", "input": [{ "name": "DATA", "scope": "e463ef46-a36e-5168-87dd-e21eb980dfb8" }], "head": false, "results": [], "monitors": [], "flowchartId": "ee7abb4e-7848-5aeb-960d-0d441909e2d1", "preProcessors": [], "postProcessors": [], "next": "44263820-0c80-5bd1-b854-9da8d198eac1", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "io-bulk", "type": "io", "subtype": "input", "head": false, "results": [], "monitors": [], "flowchartId": "44263820-0c80-5bd1-b854-9da8d198eac1", "preProcessors": [], "postProcessors": [], "source": "api", "input": [{ "endpoint": "materials", "endpoint_options": { "params": { "query": "{'_id': SLAB.metadata.bulkId}", "projection": "{}" } }, "name": "DATA" }], "next": "b70656f1-a394-57f4-b4de-00096969df4b", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "bulk", "type": "assignment", "operand": "BULK", "value": "DATA[0] if DATA else None", "input": [{ "name": "DATA", "scope": "44263820-0c80-5bd1-b854-9da8d198eac1" }], "head": false, "results": [], "monitors": [], "flowchartId": "b70656f1-a394-57f4-b4de-00096969df4b", "preProcessors": [], "postProcessors": [], "next": "6ca4006a-e3ae-56ea-91a1-06b9790b5f7e", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "assert-bulk", "type": "assertion", "statement": "BULK != None", "errorMessage": "Bulk material does not exist!", "head": false, "results": [], "monitors": [], "flowchartId": "6ca4006a-e3ae-56ea-91a1-06b9790b5f7e", "preProcessors": [], "postProcessors": [], "next": "490635e0-c593-5809-9eb2-c794b96cfed1", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "io-e-bulk", "type": "io", "subtype": "input", "head": false, "results": [], "monitors": [], "flowchartId": "490635e0-c593-5809-9eb2-c794b96cfed1", "preProcessors": [], "postProcessors": [], "source": "api", "input": [{ "endpoint": "refined-properties", "endpoint_options": { "params": { "query": "{ 'exabyteId': BULK.exabyteId, 'data.name': 'total_energy', 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} }", "projection": "{'sort': {'precision.value': -1}, 'limit': 1}" } }, "name": "DATA" }], "next": "bbe13b97-4243-5a85-8f61-a279d0b797aa", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "e-bulk", "type": "assignment", "operand": "E_BULK", "value": "DATA[0].data.value if DATA else None", "input": [{ "name": "DATA", "scope": "490635e0-c593-5809-9eb2-c794b96cfed1" }], "head": false, "results": [], "monitors": [], "flowchartId": "bbe13b97-4243-5a85-8f61-a279d0b797aa", "preProcessors": [], "postProcessors": [], "next": "a06c9f43-7670-5fd0-ac42-7028a472235a", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "assert-e-bulk", "type": "assertion", "statement": "E_BULK != None", "errorMessage": "E_BULK does not exist!", "head": false, "results": [], "monitors": [], "flowchartId": "a06c9f43-7670-5fd0-ac42-7028a472235a", "preProcessors": [], "postProcessors": [], "next": "cdf210be-26ed-585a-b4ac-d55795ba2975", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "surface", "type": "assignment", "operand": "A", "value": "np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))", "input": [], "head": false, "results": [], "monitors": [], "flowchartId": "cdf210be-26ed-585a-b4ac-d55795ba2975", "preProcessors": [], "postProcessors": [], "next": "ffa8e43d-096a-555b-b8d0-6d283365ef47", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "n-bulk", "type": "assignment", "operand": "N_BULK", "value": "len(BULK.basis.elements)", "input": [], "head": false, "results": [], "monitors": [], "flowchartId": "ffa8e43d-096a-555b-b8d0-6d283365ef47", "preProcessors": [], "postProcessors": [], "next": "a0336ec5-a6da-5e4c-bb48-82b70cf5245f", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "n-slab", "type": "assignment", "operand": "N_SLAB", "value": "len(SLAB.basis.elements)", "input": [], "head": false, "results": [], "monitors": [], "flowchartId": "a0336ec5-a6da-5e4c-bb48-82b70cf5245f", "preProcessors": [], "postProcessors": [], "next": "9fc7a088-5533-5f70-bb33-f676ec65f565", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "type": "execution", "name": "pw_scf", "head": false, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "fcd88119-817c-5ac1-a430-ba892ac743eb" }, { "name": "e-slab", "type": "assignment", "operand": "E_SLAB", "value": "total_energy", "input": [{ "name": "total_energy", "scope": "9fc7a088-5533-5f70-bb33-f676ec65f565" }], "head": false, "results": [], "monitors": [], "flowchartId": "fcd88119-817c-5ac1-a430-ba892ac743eb", "preProcessors": [], "postProcessors": [], "next": "542ea9ad-8a07-5a76-b233-f72fb27c4fc6", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "surface-energy", "type": "assignment", "operand": "SURFACE_ENERGY", "value": "1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))", "input": [], "head": false, "results": [{ "name": "surface_energy" }], "monitors": [], "flowchartId": "542ea9ad-8a07-5a76-b233-f72fb27c4fc6", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }] }, "espresso/total_energy.json": { "_id": "a16677f9-bb5b-54b5-9f97-c2af8c073184", "name": "Total Energy", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }] }], "tags": ["default"] }, "espresso/valence_band_offset_calc_from_previous_esp_vbm.json": { "_id": "1b70e606-a7ee-599e-89e0-91a7dc5faa4a", "name": "Calculate VBO", "application": { "name": "espresso" }, "properties": ["valence_band_offset"], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "name": "Difference of valence band maxima", "type": "assignment", "operand": "VBM_DIFF", "value": "VBM_LEFT - VBM_RIGHT", "input": [], "status": "idle", "statusTrack": [], "flowchartId": "bd4eaa98-b001-5694-87ef-ec77540502ab", "tags": [], "head": true, "next": "2626f7bb-d392-5fd4-ab71-329b508de347", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Difference of macroscopically averaged ESP in bulk", "type": "assignment", "operand": "AVG_ESP_DIFF", "value": "AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]", "input": [], "status": "idle", "statusTrack": [], "flowchartId": "2626f7bb-d392-5fd4-ab71-329b508de347", "tags": [], "head": false, "next": "b7307787-53e2-599b-ad12-d627b04074b4", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Lineup of macroscopically averaged ESP in interface", "type": "assignment", "operand": "ESP_LINEUP", "value": "np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])", "input": [], "status": "idle", "statusTrack": [], "flowchartId": "b7307787-53e2-599b-ad12-d627b04074b4", "tags": [], "head": false, "next": "197f4b4d-cb7b-57be-a885-d44cb1f61905", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Valence Band Offset", "type": "assignment", "operand": "VALENCE_BAND_OFFSET", "value": "abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))", "input": [], "results": [{ "name": "valence_band_offset" }], "status": "idle", "statusTrack": [], "flowchartId": "197f4b4d-cb7b-57be-a885-d44cb1f61905", "tags": [], "head": false, "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }] }, "espresso/variable_cell_relaxation.json": { "systemName": "espresso-variable-cell-relaxation", "_id": "58709c44-47f6-5fbf-bf2e-358b9d98f75d", "name": "Variable-cell Relaxation", "application": { "name": "espresso" }, "properties": ["total_energy", "fermi_energy", "pressure", "atomic_forces", "total_force", "stress_tensor", "final_structure"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_vc-relax", "head": true, "results": [{ "name": "total_energy" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }, { "name": "final_structure" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }, { "name": "convergence_ionic" }], "flowchartId": "e1bd0870-6245-5fc2-a50d-48cabc356ac8", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_vc_relax.in" }], "monitors": ["standard_output", "convergence_electronic", "convergence_ionic"], "results": ["total_energy", "fermi_energy", "pressure", "atomic_forces", "total_force", "stress_tensor", "final_structure"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_vc-relax", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_vc_relax.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }] }], "tags": ["variable-cell_relaxation"] }, "espresso/zero_point_energy.json": { "_id": "151538cc-9e71-5269-8b9e-cb5977151227", "name": "Zero Point Energy", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "zero_point_energy"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "107595d1-490f-53a2-8432-7f8a12f14d96" }, { "type": "execution", "name": "ph_zpe", "head": false, "results": [{ "name": "zero_point_energy" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "107595d1-490f-53a2-8432-7f8a12f14d96", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "ph_gamma.in" }], "results": ["zero_point_energy"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "ph.x", "name": "ph_gamma", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n", "name": "ph_gamma.in", "contextProviders": [], "applicationName": "espresso", "executableName": "ph.x", "rendered": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n/\n0 0 0\n", "schemaVersion": "2022.8.16" }] }] }, "nwchem/total_energy.json": { "_id": "9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13", "name": "Total Energy", "application": { "name": "nwchem" }, "properties": ["total_energy", "total_energy_contributions"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "localorbital", "subtype": "pople", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "nwchem_total_energy", "head": true, "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7", "preProcessors": [], "postProcessors": [], "application": { "name": "nwchem", "shortName": "nwchem", "summary": "NWChem", "build": "GNU", "version": "7.0.2", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": false, "postProcessors": ["error_handler"], "monitors": ["standard_output"], "name": "nwchem", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "nwchem_total_energy.inp" }], "results": ["total_energy", "total_energy_contributions"], "monitors": ["standard_output"], "applicationName": "nwchem", "executableName": "nwchem", "name": "nwchem_total_energy", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": " start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n", "name": "nwchem_total_energy.inp", "contextProviders": [{ "name": "NWChemInputDataManager" }], "applicationName": "nwchem", "executableName": "nwchem", "rendered": " start nwchem\n title \"Test\"\n charge 0\n geometry units au noautosym\n Si 0.000000000 0.000000000 0.000000000 \nSi 1.116306745 0.789348070 1.933500000 \n end\n basis\n * library 6-31G\n end\n dft\n xc B3LYP\n mult 1\n end\n task dft energy\n", "schemaVersion": "2022.8.16" }] }] }, "python/ml/classification_tail.json": { "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", "name": "Machine Learning", "application": { "name": "python" }, "properties": ["workflow:pyml_predict", "file_content"], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "Setup Variables and Packages", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "c3608488-0259-5ff4-8b90-11c6e60d6c85", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "settings.py", "templateName": "pyml_settings.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:setup_variables_packages", "schemaVersion": "2022.8.16", "isDefault": false }, "enableRender": true, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", "name": "settings.py", "contextProviders": [{ "name": "MLSettingsDataManager" }], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3" }, { "type": "execution", "name": "Data Input", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "data_input_read_csv_pandas.py", "templateName": "data_input_read_csv_pandas.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:data_input:read_csv:pandas", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", "name": "data_input_read_csv_pandas.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "7fff5212-6c6d-586b-9997-4d4485e09383" }, { "type": "execution", "name": "Train Test Split", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "7fff5212-6c6d-586b-9997-4d4485e09383", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "data_input_train_test_split_sklearn.py", "templateName": "data_input_train_test_split_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:data_input:train_test_split:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "name": "data_input_train_test_split_sklearn.py", "contextProviders": [{ "name": "MLTrainTestSplitDataManager" }], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "799de7dc-9394-571b-8e0d-3ff876a3df02" }, { "type": "execution", "name": "Data Standardize", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "799de7dc-9394-571b-8e0d-3ff876a3df02", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pre_processing_standardization_sklearn.py", "templateName": "pre_processing_standardization_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:pre_processing:standardization:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", "name": "pre_processing_standardization_sklearn.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "8dfc61c3-067d-5ea8-bd26-7296628d707a" }, { "type": "execution", "name": "Model Train and Predict", "head": false, "results": [{ "name": "workflow:pyml_predict" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "8dfc61c3-067d-5ea8-bd26-7296628d707a", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "model_random_forest_classification_sklearn.py", "templateName": "model_random_forest_classification_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "results": ["workflow:pyml_predict"], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:model:random_forest_classification:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "tags": ["remove-all-results", "creates-predictions-csv-during-predict-phase"], "status": "idle", "statusTrack": [], "input": [{ "content": "# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "name": "model_random_forest_classification_sklearn.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "35436b4a-cd9c-5089-ab42-665c4f9ba049" }, { "type": "execution", "name": "ROC Curve Plot", "head": false, "results": [{ "basename": "my_roc_plot.png", "filetype": "image", "name": "file_content" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "35436b4a-cd9c-5089-ab42-665c4f9ba049", "preProcessors": [], "postProcessors": [{ "name": "remove_virtual_environment" }], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "post_processing_roc_curve_sklearn.py", "templateName": "post_processing_roc_curve_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "results": ["file_content"], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:post_processing:roc_curve:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "tags": ["remove-all-results"], "status": "idle", "statusTrack": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "name": "post_processing_roc_curve_sklearn.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }] }] }, "python/ml/clustering_tail.json": { "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", "name": "Machine Learning", "application": { "name": "python" }, "properties": ["workflow:pyml_predict", "file_content"], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "Setup Variables and Packages", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "c3608488-0259-5ff4-8b90-11c6e60d6c85", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "settings.py", "templateName": "pyml_settings.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:setup_variables_packages", "schemaVersion": "2022.8.16", "isDefault": false }, "enableRender": true, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", "name": "settings.py", "contextProviders": [{ "name": "MLSettingsDataManager" }], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3" }, { "type": "execution", "name": "Data Input", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "data_input_read_csv_pandas.py", "templateName": "data_input_read_csv_pandas.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:data_input:read_csv:pandas", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", "name": "data_input_read_csv_pandas.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "7fff5212-6c6d-586b-9997-4d4485e09383" }, { "type": "execution", "name": "Train Test Split", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "7fff5212-6c6d-586b-9997-4d4485e09383", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "data_input_train_test_split_sklearn.py", "templateName": "data_input_train_test_split_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:data_input:train_test_split:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "name": "data_input_train_test_split_sklearn.py", "contextProviders": [{ "name": "MLTrainTestSplitDataManager" }], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "799de7dc-9394-571b-8e0d-3ff876a3df02" }, { "type": "execution", "name": "Data Standardize", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "799de7dc-9394-571b-8e0d-3ff876a3df02", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pre_processing_standardization_sklearn.py", "templateName": "pre_processing_standardization_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:pre_processing:standardization:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", "name": "pre_processing_standardization_sklearn.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "8dfc61c3-067d-5ea8-bd26-7296628d707a" }, { "type": "execution", "name": "Model Train and Predict", "head": false, "results": [{ "name": "workflow:pyml_predict" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "8dfc61c3-067d-5ea8-bd26-7296628d707a", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "model_k_means_clustering_sklearn.py", "templateName": "model_k_means_clustering_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "results": ["workflow:pyml_predict"], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:model:k_means_clustering:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "tags": ["remove-all-results", "creates-predictions-csv-during-predict-phase"], "status": "idle", "statusTrack": [], "input": [{ "content": "# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "name": "model_k_means_clustering_sklearn.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "9c95c27b-c8bd-5e8b-8829-d354611decef" }, { "type": "execution", "name": "2D PCA Clusters Plot", "head": false, "results": [{ "basename": "train_test_split.png", "filetype": "image", "name": "file_content" }, { "basename": "train_clusters.png", "filetype": "image", "name": "file_content" }, { "basename": "test_clusters.png", "filetype": "image", "name": "file_content" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "9c95c27b-c8bd-5e8b-8829-d354611decef", "preProcessors": [], "postProcessors": [{ "name": "remove_virtual_environment" }], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "post_processing_pca_2d_clusters_matplotlib.py", "templateName": "post_processing_pca_2d_clusters_matplotlib.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "results": ["file_content"], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:post_processing:pca_2d_clusters:matplotlib", "schemaVersion": "2022.8.16", "isDefault": false }, "tags": ["remove-all-results"], "status": "idle", "statusTrack": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "name": "post_processing_pca_2d_clusters_matplotlib.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }] }] }, "python/ml/regression_tail.json": { "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", "name": "Machine Learning", "application": { "name": "python" }, "properties": ["workflow:pyml_predict", "file_content"], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "Setup Variables and Packages", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "c3608488-0259-5ff4-8b90-11c6e60d6c85", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "settings.py", "templateName": "pyml_settings.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:setup_variables_packages", "schemaVersion": "2022.8.16", "isDefault": false }, "enableRender": true, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", "name": "settings.py", "contextProviders": [{ "name": "MLSettingsDataManager" }], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3" }, { "type": "execution", "name": "Data Input", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "data_input_read_csv_pandas.py", "templateName": "data_input_read_csv_pandas.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:data_input:read_csv:pandas", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", "name": "data_input_read_csv_pandas.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "7fff5212-6c6d-586b-9997-4d4485e09383" }, { "type": "execution", "name": "Train Test Split", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "7fff5212-6c6d-586b-9997-4d4485e09383", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "data_input_train_test_split_sklearn.py", "templateName": "data_input_train_test_split_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:data_input:train_test_split:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "name": "data_input_train_test_split_sklearn.py", "contextProviders": [{ "name": "MLTrainTestSplitDataManager" }], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "799de7dc-9394-571b-8e0d-3ff876a3df02" }, { "type": "execution", "name": "Data Standardize", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "799de7dc-9394-571b-8e0d-3ff876a3df02", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pre_processing_standardization_sklearn.py", "templateName": "pre_processing_standardization_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:pre_processing:standardization:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", "name": "pre_processing_standardization_sklearn.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "8dfc61c3-067d-5ea8-bd26-7296628d707a" }, { "type": "execution", "name": "Model Train and Predict", "head": false, "results": [{ "name": "workflow:pyml_predict" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "8dfc61c3-067d-5ea8-bd26-7296628d707a", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "model_mlp_sklearn.py", "templateName": "model_mlp_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "results": ["workflow:pyml_predict"], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:model:multilayer_perceptron:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "tags": ["remove-all-results", "creates-predictions-csv-during-predict-phase"], "status": "idle", "statusTrack": [], "input": [{ "content": "# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "name": "model_mlp_sklearn.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "1ca76a49-a3c7-5fa2-b693-538b599ecd7c" }, { "type": "execution", "name": "Parity Plot", "head": false, "results": [{ "basename": "my_parity_plot.png", "filetype": "image", "name": "file_content" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "1ca76a49-a3c7-5fa2-b693-538b599ecd7c", "preProcessors": [], "postProcessors": [{ "name": "remove_virtual_environment" }], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "post_processing_parity_plot_matplotlib.py", "templateName": "post_processing_parity_plot_matplotlib.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "results": ["file_content"], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:post_processing:parity_plot:matplotlib", "schemaVersion": "2022.8.16", "isDefault": false }, "tags": ["remove-all-results"], "status": "idle", "statusTrack": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "name": "post_processing_parity_plot_matplotlib.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }] }] }, "python/ml/train_head.json": { "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", "name": "Set Up the Job", "application": { "name": "python" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "name": "Set Workflow Mode", "type": "assignment", "operand": "IS_WORKFLOW_RUNNING_TO_PREDICT", "value": "False", "input": [], "flowchartId": "head-set-predict-status", "tags": ["pyml:workflow-type-setter"], "status": "idle", "statusTrack": [], "head": true, "next": "head-fetch-training-data", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Fetch Dataset", "type": "io", "subtype": "input", "enableRender": true, "flowchartId": "head-fetch-training-data", "input": [{ "basename": "{{DATASET_BASENAME}}", "objectData": { "CONTAINER": "", "NAME": "{{DATASET_FILEPATH}}", "PROVIDER": "", "REGION": "" } }], "source": "object_storage", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "head-branch-on-predict-status", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Train or Predict?", "type": "condition", "input": [{ "name": "IS_WORKFLOW_RUNNING_TO_PREDICT", "scope": "global" }], "results": [], "preProcessors": [], "postProcessors": [], "then": "head-fetch-trained-model", "else": "end-of-ml-train-head", "statement": "IS_WORKFLOW_RUNNING_TO_PREDICT", "maxOccurrences": 100, "flowchartId": "head-branch-on-predict-status", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "head-fetch-trained-model", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Fetch Trained Model as file", "type": "io", "subtype": "input", "enableRender": true, "flowchartId": "head-fetch-trained-model", "input": [{ "basename": "", "objectData": { "CONTAINER": "", "NAME": "", "PROVIDER": "", "REGION": "" } }], "source": "object_storage", "tags": ["set-io-unit-filenames"], "status": "idle", "statusTrack": [], "head": false, "next": "end-of-ml-train-head", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "End Setup", "type": "assignment", "operand": "IS_SETUP_COMPLETE", "value": "True", "input": [], "flowchartId": "end-of-ml-train-head", "status": "idle", "statusTrack": [], "tags": [], "head": false, "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }] }, "python/python_script.json": { "_id": "64a079ba-7a12-57b7-ac06-310b2bf8d354", "name": "Python Script", "application": { "name": "python" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "python", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "9b8a495e-1ac1-56a7-b2e0-af1b405a1219", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "script.py", "templateName": "hello_world.py" }, { "name": "requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "hello_world", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n", "name": "script.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n", "schemaVersion": "2022.8.16" }] }] }, "shell/batch_espresso_pwscf.json": { "_id": "f0775c7b-214a-5245-b921-5b4eb53d15a9", "name": "Shell Batch Job (Espresso PWSCF)", "application": { "name": "shell" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "shell", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "99304304-e873-5c89-ae83-91e61a7f629c", "preProcessors": [], "postProcessors": [], "application": { "name": "shell", "shortName": "sh", "summary": "Shell Script", "build": "GNU", "version": "5.1.8", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "job_espresso_pw_scf.sh" }], "monitors": ["standard_output"], "applicationName": "shell", "executableName": "sh", "name": "job_espresso_pw_scf", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n", "name": "job_espresso_pw_scf.sh", "contextProviders": [], "applicationName": "shell", "executableName": "sh", "rendered": "#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n", "schemaVersion": "2022.8.16" }] }] }, "shell/hello_world.json": { "_id": "ce33d4cf-e0d2-5020-854d-9ea1fe5c8512", "name": "Shell Hello World", "application": { "name": "shell" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "shell", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "99304304-e873-5c89-ae83-91e61a7f629c", "preProcessors": [], "postProcessors": [], "application": { "name": "shell", "shortName": "sh", "summary": "Shell Script", "build": "GNU", "version": "5.1.8", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "hello_world.sh" }], "monitors": ["standard_output"], "applicationName": "shell", "executableName": "sh", "name": "hello_world", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n", "name": "hello_world.sh", "contextProviders": [], "applicationName": "shell", "executableName": "sh", "rendered": "#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n", "schemaVersion": "2022.8.16" }] }] }, "vasp/band_gap.json": { "_id": "e65f2461-5f5c-5a51-8c48-88ad37bff100", "name": "Band Gap", "application": { "name": "vasp" }, "properties": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor", "band_gaps", "fermi_energy"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "paw", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "vasp", "head": true, "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9cb87769-bf20-56bf-a8b3-5a164e3bf541", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "INCAR" }, { "name": "KPOINTS" }, { "name": "POSCAR" }], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }], "next": "f0d65517-9592-5bc8-948e-a0851a766cbb" }, { "type": "execution", "name": "vasp_nscf", "head": false, "results": [{ "name": "band_gaps" }, { "name": "fermi_energy" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "f0d65517-9592-5bc8-948e-a0851a766cbb", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "INCAR", "templateName": "INCAR_BANDS" }, { "name": "KPOINTS", "templateName": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR" }], "results": ["band_gaps", "fermi_energy"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp_nscf", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }] }] }, "vasp/band_structure_dos.json": { "_id": "d38fea11-9781-5151-8dae-d705381498be", "name": "Band Structure + Density of States", "application": { "name": "vasp" }, "properties": ["density_of_states", "total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor", "band_structure"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "paw", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "vasp", "head": true, "results": [{ "name": "density_of_states" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9cb87769-bf20-56bf-a8b3-5a164e3bf541", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "INCAR" }, { "name": "KPOINTS" }, { "name": "POSCAR" }], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }], "next": "1e1de3be-f6e4-513e-afe2-c84e567a8108" }, { "type": "execution", "name": "vasp_bands", "head": false, "results": [{ "name": "band_structure" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "1e1de3be-f6e4-513e-afe2-c84e567a8108", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "INCAR", "templateName": "INCAR_BANDS" }, { "name": "KPOINTS", "templateName": "KPOINTS_BANDS" }, { "name": "POSCAR", "templateName": "" }], "results": ["band_structure"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp_bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", "schemaVersion": "2022.8.16" }, { "content": "kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }] }] }, "vasp/band_structure.json": { "_id": "cd6e3d59-5544-56ac-878b-fd8716a09768", "name": "Band Structure", "application": { "name": "vasp" }, "properties": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor", "band_structure"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "paw", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "vasp", "head": true, "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9cb87769-bf20-56bf-a8b3-5a164e3bf541", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "INCAR" }, { "name": "KPOINTS" }, { "name": "POSCAR" }], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }], "next": "1e1de3be-f6e4-513e-afe2-c84e567a8108" }, { "type": "execution", "name": "vasp_bands", "head": false, "results": [{ "name": "band_structure" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "1e1de3be-f6e4-513e-afe2-c84e567a8108", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "INCAR", "templateName": "INCAR_BANDS" }, { "name": "KPOINTS", "templateName": "KPOINTS_BANDS" }, { "name": "POSCAR", "templateName": "" }], "results": ["band_structure"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp_bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", "schemaVersion": "2022.8.16" }, { "content": "kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }] }] }, "vasp/dos.json": { "_id": "4897ca33-b023-5a8d-9a5d-9e74df0f00ad", "name": "Density of States", "application": { "name": "vasp" }, "properties": ["density_of_states", "total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "paw", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "vasp", "head": true, "results": [{ "name": "density_of_states" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9cb87769-bf20-56bf-a8b3-5a164e3bf541", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "INCAR" }, { "name": "KPOINTS" }, { "name": "POSCAR" }], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }] }] }, "vasp/fixed_cell_relaxation.json": { "_id": "db6cc94b-2f26-5688-ba97-80b11567b549", "name": "Fixed-cell Relaxation", "application": { "name": "vasp" }, "properties": ["total_energy", "atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_force", "final_structure"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "paw", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "vasp_relax", "head": true, "results": [{ "name": "total_energy" }, { "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_force" }, { "name": "final_structure" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }, { "name": "convergence_ionic" }], "flowchartId": "2f718a3d-5800-57e2-b707-075c1f1755c6", "preProcessors": [], "postProcessors": [{ "name": "prepare_restart" }], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "INCAR", "templateName": "INCAR_RELAX" }, { "name": "KPOINTS", "templateName": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR" }], "results": ["total_energy", "atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_force", "final_structure"], "monitors": ["standard_output", "convergence_electronic", "convergence_ionic"], "postProcessors": ["prepare_restart"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp_relax", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }] }] }, "vasp/initial_final_total_energies.json": { "isMultiMaterial": true, "_id": "792e8c42-86ce-5f01-812a-66378ec4f379", "name": "Initial/Final Total Energies", "application": { "name": "vasp" }, "properties": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor", "total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "paw", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "vasp_neb_initial", "head": true, "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "f969f010-9dae-5085-9ac5-86150ef78897", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "INCAR", "templateName": "INCAR_NEB_INITIAL_FINAL" }, { "name": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR_NEB_INITIAL" }], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp_neb_initial", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISTART = 0\nENCUT = 500\nISPIN = 2\n", "name": "INCAR", "contextProviders": [{ "name": "NEBFormDataManager" }, { "name": "VASPNEBInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISTART = 0\nENCUT = 500\nISPIN = 2\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.FIRST_IMAGE }}\n", "name": "POSCAR", "contextProviders": [{ "name": "NEBFormDataManager" }, { "name": "VASPNEBInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }], "next": "e65a17ce-10c8-5710-ad4d-fb3d42434091" }, { "type": "execution", "name": "vasp_neb_final", "head": false, "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "e65a17ce-10c8-5710-ad4d-fb3d42434091", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "INCAR", "templateName": "INCAR_NEB_INITIAL_FINAL" }, { "name": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR_NEB_FINAL" }], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp_neb_final", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISTART = 0\nENCUT = 500\nISPIN = 2\n", "name": "INCAR", "contextProviders": [{ "name": "NEBFormDataManager" }, { "name": "VASPNEBInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISTART = 0\nENCUT = 500\nISPIN = 2\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.LAST_IMAGE }}\n", "name": "POSCAR", "contextProviders": [{ "name": "NEBFormDataManager" }, { "name": "VASPNEBInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }] }] }, "vasp/kpoint_convergence.json": { "_id": "5d736d84-d616-538f-a09b-81a32ac0777c", "name": "K-point Convergence", "application": { "name": "vasp" }, "properties": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "paw", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "name": "Init tolerance", "type": "assignment", "operand": "TOL", "value": 0.00001, "input": [], "flowchartId": "init-tolerance", "status": "idle", "statusTrack": [], "tags": [], "head": true, "next": "init-increment", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Init increment", "type": "assignment", "operand": "INC", "value": 1, "input": [], "flowchartId": "init-increment", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "init-result", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Init result", "type": "assignment", "operand": "PREV_RESULT", "value": 0, "input": [], "flowchartId": "init-result", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "init-parameter", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Init parameter", "type": "assignment", "operand": "PARAMETER", "value": 1, "input": [], "flowchartId": "init-parameter", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "vasp-kpoint-convergence", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "type": "execution", "name": "vasp_kpt_conv", "head": false, "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "vasp-kpoint-convergence", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "INCAR", "templateName": "INCAR" }, { "name": "KPOINTS", "templateName": "KPOINTS_CONV" }, { "name": "POSCAR", "templateName": "POSCAR" }], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp_kpt_conv", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic Mesh\n0\nGamma\n{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}\n0 0 0\n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }], "next": "store-result" }, { "name": "store result", "type": "assignment", "operand": "RESULT", "value": "total_energy", "input": [{ "name": "total_energy", "scope": "vasp-kpoint-convergence" }], "flowchartId": "store-result", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "check-convergence", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "check convergence", "type": "condition", "input": [], "results": [], "preProcessors": [], "postProcessors": [], "then": "convergence-is-reached", "else": "update-result", "statement": "abs((PREV_RESULT-RESULT)/RESULT) < TOL", "maxOccurrences": 50, "flowchartId": "check-convergence", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "update-result", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "update result", "type": "assignment", "operand": "PREV_RESULT", "value": "RESULT", "input": [{ "name": "RESULT", "scope": "global" }], "flowchartId": "update-result", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "increment-parameter", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "increment parameter", "type": "assignment", "operand": "PREV_RESULT", "value": "PARAMETER+INC", "input": [{ "name": "INC", "scope": "global" }, { "name": "PARAMETER", "scope": "global" }], "flowchartId": "increment-parameter", "next": "vasp-kpoint-convergence", "status": "idle", "statusTrack": [], "tags": [], "head": false, "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "exit", "type": "assignment", "operand": "PARAMETER", "value": "PARAMETER", "input": [{ "name": "PARAMETER", "scope": "global" }], "flowchartId": "convergence-is-reached", "status": "idle", "statusTrack": [], "tags": [], "head": false, "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }] }, "vasp/neb_subworkflow.json": { "isMultiMaterial": true, "_id": "e6215fb9-e60c-541b-b73e-b077d64b3a95", "name": "Nudged Elastic Band (NEB)", "application": { "name": "vasp" }, "properties": ["reaction_energy_barrier", "reaction_energy_profile"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "paw", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "vasp_neb", "head": true, "results": [{ "name": "reaction_energy_barrier" }, { "name": "reaction_energy_profile" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "9a1660ab-8067-5fad-9fb8-7c039f634636", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "INCAR", "templateName": "INCAR_NEB" }, { "name": "KPOINTS", "templateName": "KPOINTS" }], "results": ["reaction_energy_barrier", "reaction_energy_profile"], "monitors": ["standard_output"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp_neb", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISTART = 0\nIBRION = 1\nEDIFFG = -0.001\nENCUT = 500\nNELM = 100\nNSW = 100\nIMAGES = {{ input.INTERMEDIATE_IMAGES.length or neb.nImages }}\nSPRING = -5\nISPIN = 2\n", "name": "INCAR", "contextProviders": [{ "name": "NEBFormDataManager" }, { "name": "VASPNEBInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISTART = 0\nIBRION = 1\nEDIFFG = -0.001\nENCUT = 500\nNELM = 100\nNSW = 100\nIMAGES = 1\nSPRING = -5\nISPIN = 2\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", "schemaVersion": "2022.8.16" }] }] }, "vasp/prepare_images.json": { "isMultiMaterial": true, "_id": "c9b7ad2a-5207-5e41-9b66-28474a8921f8", "name": "Prepare Directories", "application": { "name": "vasp" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "prepare-neb-images", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "dc397ead-54ad-513b-992e-aedd54576409", "preProcessors": [], "postProcessors": [], "application": { "name": "shell", "shortName": "sh", "summary": "Shell Script", "build": "GNU", "version": "5.1.8", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "bash_vasp_prepare_neb_images.sh" }], "monitors": ["standard_output"], "applicationName": "shell", "executableName": "sh", "name": "bash_vasp_prepare_neb_images", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < 00/POSCAR < 01/POSCAR < avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_xml_get_qpt_irr.py","rendered":"# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n\n\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"python","next":"d0fd8654-2106-546b-8792-7bb46272befc","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"d0fd8654-2106-546b-8792-7bb46272befc","head":false,"input":[{"name":"STDOUT","scope":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219"}],"name":"assignment","operand":"Q_POINTS","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)"}]},{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"reduce","properties":["phonon_dos","phonon_dispersions"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid_restart.in"}],"isDefault":false,"monitors":["standard_output"],"name":"ph_grid_restart","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb206177-a4af-599a-81ba-6c88d24253b6","head":true,"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid_restart.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ph_grid_restart","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"q2r.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":["standard_output"],"name":"q2r","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","rendered":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"q2r","next":"8fe6a24b-c994-55a2-a448-88657292e8c2","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"isDefault":false,"monitors":["standard_output"],"name":"matdyn_grid","results":["phonon_dos"],"schemaVersion":"2022.8.16"},"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","rendered":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","next":"a7fded20-889b-54fc-bbb0-456e82689ab1","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"isDefault":false,"monitors":["standard_output"],"name":"matdyn_path","results":["phonon_dispersions"],"schemaVersion":"2022.8.16"},"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","head":false,"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","rendered":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"79f2cb6a-7994-5369-8c85-af07c55ad26f","flowchartId":"b6a2b27a-0fec-5e0e-8974-073ee9d2ad83","head":true,"name":"Preliminary SCF Calculation","next":"4bb74dfb-46a6-5bf4-a477-5d374dc2e271","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"2f017bcb-f4ba-55b8-b939-1f780679a88e","flowchartId":"4bb74dfb-46a6-5bf4-a477-5d374dc2e271","head":false,"name":"ph-init-qpoints","next":"9894b91f-6e97-5ee6-af02-0bef26bd62c0","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a","flowchartId":"9894b91f-6e97-5ee6-af02-0bef26bd62c0","head":false,"name":"espresso-xml-get-qpt-irr","next":"24e3c1f0-8090-512e-9727-8770071d17c8","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"flowchartId":"24e3c1f0-8090-512e-9727-8770071d17c8","head":false,"input":{"name":"Q_POINTS","scope":"global","target":"MAP_DATA","useValues":false,"values":[]},"name":"map","next":"55a9e9fb-3545-5c4b-a1bb-b64a899b78c6","status":"idle","statusTrack":[],"tags":[],"type":"map","workflowId":"731d3397-3278-516a-b28e-53626ef50f0a"},{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","flowchartId":"55a9e9fb-3545-5c4b-a1bb-b64a899b78c6","head":false,"name":"reduce","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[{"_id":"731d3397-3278-516a-b28e-53626ef50f0a","compute":{"cluster":{"fqdn":""},"nodes":1,"notify":"n","ppn":1,"queue":"D","timeLimit":"01:00:00"},"isDefault":false,"name":"pre-processor","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"pre-processor","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_link_outdir_save.sh"}],"isDefault":false,"monitors":["standard_output"],"name":"espresso_link_outdir_save","schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_link_outdir_save.sh","rendered":"\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"ph-single-irr-qpt","properties":[],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_single_irr_qpt.in"}],"isDefault":false,"monitors":["standard_output"],"name":"ph_single_irr_qpt","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"8db9af08-d935-57a0-a824-e7db6d936de8","head":true,"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_single_irr_qpt.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n \n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n \n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = '{{ JOB_SCRATCH_DIR }}/outdir'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ph_single_irr_qpt","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"post-processor","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_collect_dynmat.sh"}],"isDefault":false,"monitors":["standard_output"],"name":"espresso_collect_dynmat","schemaVersion":"2022.8.16"},"flowchartId":"cd5c3e29-511b-5ef8-949d-ad884f210301","head":true,"input":[{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_collect_dynmat.sh","rendered":"\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","flowchartId":"e9a790f4-dec6-52c1-b951-014f0ff01cb4","head":true,"name":"pre-processor","next":"c2195045-7a5c-54d3-ab88-211c82de09f1","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","flowchartId":"c2195045-7a5c-54d3-ab88-211c82de09f1","head":false,"name":"ph-single-irr-qpt","next":"e483c7fb-2a29-5e91-819a-7465ead70134","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","flowchartId":"e483c7fb-2a29-5e91-819a-7465ead70134","head":false,"name":"post-processor","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]}]},"espresso/recalculate_bands.json":{"_id":"42b2b964-8ccc-5b36-9e33-41a954abc2ba","application":{"name":"espresso"},"isDefault":false,"name":"Recalculate Bands","properties":["band_structure"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Recalculate Bands","properties":["band_structure"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","flowchartId":"e8b72a45-765e-565f-ab17-c91a21aec09d","head":true,"name":"Recalculate Bands","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/surface_energy.json":{"_id":"68512987-de73-5614-bab2-0f8b575cffa3","application":{"name":"espresso"},"isDefault":false,"name":"Surface Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Surface Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"e463ef46-a36e-5168-87dd-e21eb980dfb8","head":true,"input":[{"endpoint":"materials","endpoint_options":{"params":{"projection":"{}","query":"{'_id': MATERIAL_ID}"}},"name":"DATA"}],"monitors":[],"name":"io-slab","next":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","postProcessors":[],"preProcessors":[],"results":[],"source":"api","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","head":false,"input":[{"name":"DATA","scope":"e463ef46-a36e-5168-87dd-e21eb980dfb8"}],"monitors":[],"name":"slab","next":"44263820-0c80-5bd1-b854-9da8d198eac1","operand":"SLAB","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"DATA[0]"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"44263820-0c80-5bd1-b854-9da8d198eac1","head":false,"input":[{"endpoint":"materials","endpoint_options":{"params":{"projection":"{}","query":"{'_id': SLAB.metadata.bulkId}"}},"name":"DATA"}],"monitors":[],"name":"io-bulk","next":"b70656f1-a394-57f4-b4de-00096969df4b","postProcessors":[],"preProcessors":[],"results":[],"source":"api","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"b70656f1-a394-57f4-b4de-00096969df4b","head":false,"input":[{"name":"DATA","scope":"44263820-0c80-5bd1-b854-9da8d198eac1"}],"monitors":[],"name":"bulk","next":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","operand":"BULK","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"DATA[0] if DATA else None"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"errorMessage":"Bulk material does not exist!","flowchartId":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","head":false,"monitors":[],"name":"assert-bulk","next":"490635e0-c593-5809-9eb2-c794b96cfed1","postProcessors":[],"preProcessors":[],"results":[],"statement":"BULK != None","status":"idle","statusTrack":[],"tags":[],"type":"assertion"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"490635e0-c593-5809-9eb2-c794b96cfed1","head":false,"input":[{"endpoint":"refined-properties","endpoint_options":{"params":{"projection":"{'sort': {'precision.value': -1}, 'limit': 1}","query":"{ 'exabyteId': BULK.exabyteId, 'data.name': 'total_energy', 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} }"}},"name":"DATA"}],"monitors":[],"name":"io-e-bulk","next":"bbe13b97-4243-5a85-8f61-a279d0b797aa","postProcessors":[],"preProcessors":[],"results":[],"source":"api","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"bbe13b97-4243-5a85-8f61-a279d0b797aa","head":false,"input":[{"name":"DATA","scope":"490635e0-c593-5809-9eb2-c794b96cfed1"}],"monitors":[],"name":"e-bulk","next":"a06c9f43-7670-5fd0-ac42-7028a472235a","operand":"E_BULK","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"DATA[0].data.value if DATA else None"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"errorMessage":"E_BULK does not exist!","flowchartId":"a06c9f43-7670-5fd0-ac42-7028a472235a","head":false,"monitors":[],"name":"assert-e-bulk","next":"cdf210be-26ed-585a-b4ac-d55795ba2975","postProcessors":[],"preProcessors":[],"results":[],"statement":"E_BULK != None","status":"idle","statusTrack":[],"tags":[],"type":"assertion"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"cdf210be-26ed-585a-b4ac-d55795ba2975","head":false,"input":[],"monitors":[],"name":"surface","next":"ffa8e43d-096a-555b-b8d0-6d283365ef47","operand":"A","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"ffa8e43d-096a-555b-b8d0-6d283365ef47","head":false,"input":[],"monitors":[],"name":"n-bulk","next":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","operand":"N_BULK","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"len(BULK.basis.elements)"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","head":false,"input":[],"monitors":[],"name":"n-slab","next":"9fc7a088-5533-5f70-bb33-f676ec65f565","operand":"N_SLAB","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"len(SLAB.basis.elements)"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"fcd88119-817c-5ac1-a430-ba892ac743eb","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"fcd88119-817c-5ac1-a430-ba892ac743eb","head":false,"input":[{"name":"total_energy","scope":"9fc7a088-5533-5f70-bb33-f676ec65f565"}],"monitors":[],"name":"e-slab","next":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","operand":"E_SLAB","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","head":false,"input":[],"monitors":[],"name":"surface-energy","operand":"SURFACE_ENERGY","postProcessors":[],"preProcessors":[],"results":[{"name":"surface_energy"}],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))"}]}],"units":[{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","flowchartId":"d81dc9ce-bb50-5bc6-af1d-e5ede03bb0a6","head":true,"name":"Surface Energy","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/total_energy.json":{"_id":"4e36ca25-fa46-5628-a227-27d22dea8553","application":{"name":"espresso"},"isDefault":false,"name":"Total Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Total Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"tags":["default"],"units":[{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","flowchartId":"6059d61a-6a92-5657-9130-02208639aff8","head":true,"name":"Total Energy","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/valence_band_offset.json":{"_id":"d8e08cac-7747-50aa-b925-41f214d722c6","application":{"name":"espresso"},"isDefault":false,"name":"Valence Band Offset (2D)","properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"9c65d03e-6a30-58f3-947a-f174342be0c3","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isMultiMaterial":true,"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"BS + Avg ESP (Interface)","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_gaps","average_potential_profile"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"0f21d8c4-ab32-53ba-b40d-fc9b6608e1b9","head":true,"input":[],"name":"Set Material Index (Interface)","next":"9fc7a088-5533-5f70-bb33-f676ec65f565","operand":"MATERIAL_INDEX","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"0"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap"}],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"name":"Set Valence Band Maximum","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","operand":"VBM","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands","next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pp_electrostatic_potential","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","head":false,"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"average.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":["standard_output"],"name":"average_potential","results":["average_potential_profile"],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential","head":false,"input":[{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","rendered":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential"}],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},{"_id":"ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Find ESP Values (Interface)","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"generic:processing:find_extrema:scipy","schemaVersion":"2022.8.16"},"flowchartId":"python-find-extrema","head":true,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","rendered":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\nY = np.array({{array_from_context}})\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema"}],"name":"Set Average ESP Value","operand":"AVG_ESP_INTERFACE","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},{"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isMultiMaterial":true,"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"BS + Avg ESP (interface left)","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_gaps","average_potential_profile"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"0bd31760-f6e4-5826-b282-882c06c97f94","head":true,"input":[],"name":"Set Material Index (Interface left)","next":"3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08","operand":"MATERIAL_INDEX","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"1"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap-left","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap-left","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-left"}],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"name":"Set Valence Band Maximum","next":"dfc4f1c5-5856-588a-99df-6d5fb46bb429","operand":"VBM_LEFT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16"},"flowchartId":"dfc4f1c5-5856-588a-99df-6d5fb46bb429","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands","next":"b1bb2b3e-3197-5bcd-85b0-959cc357c8d3","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pp_electrostatic_potential","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"b1bb2b3e-3197-5bcd-85b0-959cc357c8d3","head":false,"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential-left","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"average.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":["standard_output"],"name":"average_potential","results":["average_potential_profile"],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential-left","head":false,"input":[{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","rendered":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-left"}],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},{"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Find ESP Value (Interface left)","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"generic:processing:find_extrema:scipy","schemaVersion":"2022.8.16"},"flowchartId":"python-find-extrema-left","head":true,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","rendered":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\nY = np.array({{array_from_context}})\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema-left"}],"name":"Set Average ESP Value","operand":"AVG_ESP_LEFT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},{"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isMultiMaterial":true,"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"BS + Avg ESP (interface right)","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_gaps","average_potential_profile"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"a05809d1-cc0d-5a0b-bf5e-d43b90a6ac4b","head":true,"input":[],"name":"Set Material Index (Interface right)","next":"b89d6348-3915-5c24-9fbb-350bc98ac708","operand":"MATERIAL_INDEX","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"2"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"b89d6348-3915-5c24-9fbb-350bc98ac708","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap-right","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pw_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap-right","head":false,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-right"}],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"name":"Set Valence Band Maximum","next":"bc3f514c-4bed-521b-85a3-4e0edfdc3585","operand":"VBM_RIGHT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16"},"flowchartId":"bc3f514c-4bed-521b-85a3-4e0edfdc3585","head":false,"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"bands","next":"28bb682d-d287-5beb-8a67-826449c474ee","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pp_electrostatic_potential","results":[],"schemaVersion":"2022.8.16"},"flowchartId":"28bb682d-d287-5beb-8a67-826449c474ee","head":false,"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential-right","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"average.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":["standard_output"],"name":"average_potential","results":["average_potential_profile"],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential-right","head":false,"input":[{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","rendered":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-right"}],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},{"_id":"736295e8-2ee0-5974-83bc-362061ac0688","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Find ESP Value (Interface right)","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"generic:processing:find_extrema:scipy","schemaVersion":"2022.8.16"},"flowchartId":"python-find-extrema-right","head":true,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","rendered":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\nY = np.array({{array_from_context}})\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema-right"}],"name":"Set Average ESP Value","operand":"AVG_ESP_RIGHT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Calculate VBO","properties":["valence_band_offset"],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","head":true,"input":[],"name":"Difference of valence band maxima","next":"2626f7bb-d392-5fd4-ab71-329b508de347","operand":"VBM_DIFF","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"VBM_LEFT - VBM_RIGHT"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","head":false,"input":[],"name":"Difference of macroscopically averaged ESP in bulk","next":"b7307787-53e2-599b-ad12-d627b04074b4","operand":"AVG_ESP_DIFF","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","head":false,"input":[],"name":"Lineup of macroscopically averaged ESP in interface","next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","operand":"ESP_LINEUP","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","head":false,"input":[],"name":"Valence Band Offset","operand":"VALENCE_BAND_OFFSET","results":[{"name":"valence_band_offset"}],"status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))"}]}],"units":[{"_id":"9c65d03e-6a30-58f3-947a-f174342be0c3","flowchartId":"fd622b5c-5c02-594e-b582-b245c17ca9a4","head":true,"name":"BS + Avg ESP (Interface)","next":"ad3b1e4c-5965-5605-a067-dd0c59907c4b","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7","flowchartId":"ad3b1e4c-5965-5605-a067-dd0c59907c4b","head":false,"name":"Find ESP Values (Interface)","next":"8d5b4734-edfd-55cc-ad80-aaa72487398d","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","flowchartId":"8d5b4734-edfd-55cc-ad80-aaa72487398d","head":false,"name":"BS + Avg ESP (interface left)","next":"102ec582-5b75-52f5-8b39-19ca725ed47a","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","flowchartId":"102ec582-5b75-52f5-8b39-19ca725ed47a","head":false,"name":"Find ESP Value (Interface left)","next":"603c45db-93aa-54ce-a7fe-6e9b65b0037d","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","flowchartId":"603c45db-93aa-54ce-a7fe-6e9b65b0037d","head":false,"name":"BS + Avg ESP (interface right)","next":"e3444d35-cc41-59f5-8481-78d0c383b84e","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"736295e8-2ee0-5974-83bc-362061ac0688","flowchartId":"e3444d35-cc41-59f5-8481-78d0c383b84e","head":false,"name":"Find ESP Value (Interface right)","next":"0e0b141a-39ca-52bc-9094-e5f96dc72f39","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","flowchartId":"0e0b141a-39ca-52bc-9094-e5f96dc72f39","head":false,"name":"Calculate VBO","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/variable_cell_relaxation.json":{"_id":"c45dcef1-d16b-59d1-9318-cedd0b1acf08","application":{"name":"espresso"},"isDefault":false,"name":"Variable-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Variable-cell Relaxation","properties":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"systemName":"espresso-variable-cell-relaxation","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"isDefault":false,"monitors":["standard_output","convergence_electronic","convergence_ionic"],"name":"pw_vc-relax","results":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","head":true,"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","rendered":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"tags":["variable-cell_relaxation"],"units":[{"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","flowchartId":"8f6e9590-6a87-584b-abd7-1fb98253054c","head":true,"name":"Variable-cell Relaxation","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/wavefunction_amplitude.json":{"_id":"196d364a-5a30-549b-a898-8b9704b50ff1","application":{"name":"espresso"},"isDefault":false,"name":"Wavefunction Amplitude","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Wavefunction Amplitude","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"pw-scf","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"extract-band-energies","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"band_structure"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"extract-band-energies","head":false,"input":[{"name":"band_structure","scope":"pw-scf"}],"name":"Extract Band Energies","next":"indices-below-fermi","operand":"band_energies","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"indices-below-fermi","head":false,"input":[{"name":"fermi_energy","scope":"pw-scf"}],"name":"Find Indices Below Fermi","next":"8771dc7f-878e-5f13-a840-a3a416854f1e","operand":"indices_below_fermi","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"8771dc7f-878e-5f13-a840-a3a416854f1e","head":false,"input":[],"name":"Store Band Below EF","next":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","operand":"KBAND_VALUE_BELOW_EF","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"flowchartId":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","head":false,"input":[],"name":"Select Band","next":"pp-wfn","operand":"KBAND_VALUE","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"KBAND_VALUE_BELOW_EF"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"isDefault":false,"monitors":["standard_output"],"name":"pp_wfn","results":["wavefunction_amplitude"],"schemaVersion":"2022.8.16"},"flowchartId":"pp-wfn","head":false,"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_wfn.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {{ KBAND_VALUE | default(1) }}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = NaN\n nx = 200\n/\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"pp_wfn","postProcessors":[],"preProcessors":[],"results":[{"name":"wavefunction_amplitude"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Plot Wavefunction","properties":["file_content"],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"plot_wavefunction","results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"57fca898-8e8b-5ef2-81a5-9d2b612bc18d","head":true,"input":[{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"script.py","rendered":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"plot WFN","postProcessors":[],"preProcessors":[],"results":[{"basename":"wf_r.png","filetype":"image","name":"file_content"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"tags":["wfn","wfn_plot"],"units":[{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","flowchartId":"36467db9-279f-52a3-a6ef-ffdc26d875ed","head":true,"name":"Wavefunction Amplitude","next":"4ce49281-e731-550e-af66-6d2408db8237","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","flowchartId":"4ce49281-e731-550e-af66-6d2408db8237","head":false,"name":"Plot Wavefunction","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/zero_point_energy.json":{"_id":"3158c78d-58bb-5675-8c7f-6f2337061015","application":{"name":"espresso"},"isDefault":false,"name":"Zero Point Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Zero Point Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"pw.x","postProcessors":["remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"pw_scf","results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"107595d1-490f-53a2-8432-7f8a12f14d96","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"executable":{"isDefault":false,"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"isDefault":false,"monitors":["standard_output"],"name":"ph_gamma","results":["zero_point_energy"],"schemaVersion":"2022.8.16"},"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","head":false,"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n/\n0 0 0\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ph_zpe","postProcessors":[],"preProcessors":[],"results":[{"name":"zero_point_energy"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","flowchartId":"d906bd20-eb92-5a01-a0e2-c81a2d9b2a41","head":true,"name":"Zero Point Energy","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"nwchem/total_energy.json":{"_id":"937fbac8-2dec-5fb1-a46f-b8a0cc3d3d05","application":{"name":"nwchem"},"isDefault":false,"name":"Total Energy","properties":["total_energy","total_energy_contributions"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","application":{"build":"GNU","isDefault":true,"name":"nwchem","schemaVersion":"2022.8.16","shortName":"nwchem","summary":"NWChem","version":"7.0.2"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"pople","type":"localorbital"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Total Energy","properties":["total_energy","total_energy_contributions"],"units":[{"application":{"build":"GNU","isDefault":true,"name":"nwchem","schemaVersion":"2022.8.16","shortName":"nwchem","summary":"NWChem","version":"7.0.2"},"executable":{"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":["standard_output"],"name":"nwchem","postProcessors":["error_handler"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":["standard_output"],"name":"nwchem_total_energy","results":["total_energy","total_energy_contributions"],"schemaVersion":"2022.8.16"},"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","head":true,"input":[{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","rendered":" start nwchem\n title \"Test\"\n charge 0\n geometry units au noautosym\n Si 0.000000000 0.000000000 0.000000000 \nSi 1.116306745 0.789348070 1.933500000 \n end\n basis\n * library 6-31G\n end\n dft\n xc B3LYP\n mult 1\n end\n task dft energy\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","flowchartId":"6059d61a-6a92-5657-9130-02208639aff8","head":true,"name":"Total Energy","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/ml/classification_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","application":{"name":"python"},"isDefault":false,"isUsingDataset":true,"name":"Python ML Train Classification","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"head-set-predict-status","head":true,"input":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"name":"Fetch Dataset","next":"head-branch-on-predict-status","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"maxOccurrences":100,"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"end-of-ml-train-head","head":false,"input":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["workflow:pyml_predict","file_content"],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:model:random_forest_classification:sklearn","results":["workflow:pyml_predict"],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:post_processing:roc_curve:sklearn","results":["file_content"],"schemaVersion":"2022.8.16"},"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ROC Curve Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"basename":"my_roc_plot.png","filetype":"image","name":"file_content"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","head":true,"name":"Set Up the Job","next":"90738aae-daac-599f-913f-29fb6acdff00","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","head":false,"name":"Machine Learning","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/ml/clustering_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","application":{"name":"python"},"isDefault":false,"isUsingDataset":true,"name":"Python ML Train Clustering","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"head-set-predict-status","head":true,"input":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"name":"Fetch Dataset","next":"head-branch-on-predict-status","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"maxOccurrences":100,"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"end-of-ml-train-head","head":false,"input":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["workflow:pyml_predict","file_content"],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:model:random_forest_classification:sklearn","results":["workflow:pyml_predict"],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:post_processing:roc_curve:sklearn","results":["file_content"],"schemaVersion":"2022.8.16"},"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"ROC Curve Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"basename":"my_roc_plot.png","filetype":"image","name":"file_content"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","head":true,"name":"Set Up the Job","next":"90738aae-daac-599f-913f-29fb6acdff00","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","head":false,"name":"Machine Learning","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/ml/regression_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","application":{"name":"python"},"isDefault":false,"isUsingDataset":true,"name":"Python ML Train Regression","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"head-set-predict-status","head":true,"input":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"name":"Fetch Dataset","next":"head-branch-on-predict-status","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"maxOccurrences":100,"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"flowchartId":"end-of-ml-train-head","head":false,"input":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["workflow:pyml_predict","file_content"],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"enableRender":true,"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:model:multilayer_perceptron:sklearn","results":["workflow:pyml_predict"],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":["standard_output"],"name":"pyml:post_processing:parity_plot:matplotlib","results":["file_content"],"schemaVersion":"2022.8.16"},"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","head":false,"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"Parity Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"basename":"my_parity_plot.png","filetype":"image","name":"file_content"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","head":true,"name":"Set Up the Job","next":"90738aae-daac-599f-913f-29fb6acdff00","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","head":false,"name":"Machine Learning","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/python_script.json":{"_id":"de816646-766b-5f97-b468-0937d4381440","application":{"name":"python"},"isDefault":false,"name":"Python Script","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Python Script","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":["standard_output"],"name":"hello_world","schemaVersion":"2022.8.16"},"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","head":true,"input":[{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","rendered":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","flowchartId":"c50e28b2-a0c5-5324-8b6f-e99b5a546bd8","head":true,"name":"Python Script","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"shell/batch_espresso_pwscf.json":{"_id":"e0046fb4-37db-5732-bf81-c48e13081a4c","application":{"name":"shell"},"isDefault":false,"name":"Shell Batch Job (Espresso PWSCF)","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Batch Job (Espresso PWSCF)","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"isDefault":false,"monitors":["standard_output"],"name":"job_espresso_pw_scf","schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","rendered":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","flowchartId":"d884e8f7-7acf-5a03-bc9a-186903bdaa0e","head":true,"name":"Shell Batch Job (Espresso PWSCF)","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"shell/hello_world.json":{"_id":"d2fd444c-06b4-5d66-baeb-449c680ae1bf","application":{"name":"shell"},"isDefault":false,"name":"Shell Script","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Hello World","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":["standard_output"],"name":"hello_world","schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","rendered":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","flowchartId":"319307c2-bf22-5bf2-b4e9-a4cdf671b786","head":true,"name":"Shell Hello World","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/band_gap.json":{"_id":"16ca0232-a570-53d1-a4d3-32bbd6f3f0a2","application":{"name":"vasp"},"isDefault":false,"name":"Band Gap","properties":["atomic_forces","band_gaps","fermi_energy","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Band Gap","properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_gaps","fermi_energy"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"vasp","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"f0d65517-9592-5bc8-948e-a0851a766cbb","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_nscf","results":["band_gaps","fermi_energy"],"schemaVersion":"2022.8.16"},"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","head":false,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","flowchartId":"db3b83ea-0ef5-594c-89a8-bde38dbc6105","head":true,"name":"Band Gap","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/band_structure.json":{"_id":"25b0ad08-87bb-5400-bea4-acd5fe2163c0","application":{"name":"vasp"},"isDefault":false,"name":"Band Structure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Band Structure","properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_structure"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"vasp","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","flowchartId":"c573187f-a8bb-5084-9fcf-1560bf4a7786","head":true,"name":"Band Structure","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/band_structure_dos.json":{"_id":"c8338d40-3c6e-5581-b03c-d7fb5cbb8df5","application":{"name":"vasp"},"isDefault":false,"name":"Band Structure + Density of States","properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"d38fea11-9781-5151-8dae-d705381498be","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Band Structure + Density of States","properties":["density_of_states","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_structure"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"vasp","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_bands","results":["band_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"d38fea11-9781-5151-8dae-d705381498be","flowchartId":"8a098bb9-73b1-5e84-bfc7-b783e02d0f53","head":true,"name":"Band Structure + Density of States","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/dos.json":{"_id":"629a79fb-a03f-5e34-b2ce-9c735e8ef6c0","application":{"name":"vasp"},"isDefault":false,"name":"Density of States","properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Density of States","properties":["density_of_states","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"name":"vasp","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","flowchartId":"3e64fdb4-ab5b-52a0-a1d5-51343c49481c","head":true,"name":"Density of States","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/fixed_cell_relaxation.json":{"_id":"cb69418c-2f6c-551d-af81-0cf20ec1113d","application":{"name":"vasp"},"isDefault":false,"name":"Fixed-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Fixed-cell Relaxation","properties":["total_energy","atomic_forces","fermi_energy","pressure","stress_tensor","total_force","final_structure"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":["standard_output","convergence_electronic","convergence_ionic"],"name":"vasp_relax","postProcessors":["prepare_restart"],"results":["total_energy","atomic_forces","fermi_energy","pressure","stress_tensor","total_force","final_structure"],"schemaVersion":"2022.8.16"},"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","head":true,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","postProcessors":[{"name":"prepare_restart"}],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","flowchartId":"0de8c4c8-b722-5cd2-ae68-b484262e0a01","head":true,"name":"Fixed-cell Relaxation","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/kpoint_convergence.json":{"_id":"fcf105f9-5ae7-5c32-a6b3-e3579cbdf39a","application":{"name":"vasp"},"isDefault":false,"name":"K-point Convergence","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"K-point Convergence","properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"init-tolerance","head":true,"input":[],"name":"Init tolerance","next":"init-increment","operand":"TOL","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0.00001},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"init-increment","head":false,"input":[],"name":"Init increment","next":"init-result","operand":"INC","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"init-result","head":false,"input":[],"name":"Init result","next":"init-parameter","operand":"PREV_RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"init-parameter","head":false,"input":[],"name":"Init parameter","next":"vasp-kpoint-convergence","operand":"PARAMETER","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_kpt_conv","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"vasp-kpoint-convergence","head":false,"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic Mesh\n0\nGamma\n{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}\n0 0 0\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","next":"store-result","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"store-result","head":false,"input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"name":"store result","next":"check-convergence","operand":"RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"else":"update-result","flowchartId":"check-convergence","head":false,"input":[],"maxOccurrences":50,"name":"check convergence","next":"update-result","postProcessors":[],"preProcessors":[],"results":[],"statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","status":"idle","statusTrack":[],"tags":[],"then":"convergence-is-reached","type":"condition"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"update-result","head":false,"input":[{"name":"RESULT","scope":"global"}],"name":"update result","next":"increment-parameter","operand":"PREV_RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"RESULT"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"increment-parameter","head":false,"input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"name":"increment parameter","next":"vasp-kpoint-convergence","operand":"PREV_RESULT","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER+INC"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"flowchartId":"convergence-is-reached","head":false,"input":[{"name":"PARAMETER","scope":"global"}],"name":"exit","operand":"PARAMETER","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER"}]}],"units":[{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","flowchartId":"a34eec2c-cdb2-537d-88c0-ed1d7b205879","head":true,"name":"K-point Convergence","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/neb.json":{"_id":"df41740d-5989-553c-b845-0559d6f8f86b","application":{"name":"vasp"},"isDefault":false,"name":"Nudged Elastic Band (NEB)","properties":["atomic_forces","atomic_forces","fermi_energy","fermi_energy","pressure","pressure","stress_tensor","stress_tensor","total_energy","total_energy","total_energy_contributions","total_energy_contributions","total_force","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isMultiMaterial":true,"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"paw","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Initial/Final Total Energies","properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_neb_initial","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","head":true,"input":[{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","next":"e65a17ce-10c8-5710-ad4d-fb3d42434091","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"name":"vasp","postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"isDefault":false,"monitors":["standard_output","convergence_electronic"],"name":"vasp_neb_final","results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"schemaVersion":"2022.8.16"},"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","head":false,"input":[{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"isMultiMaterial":true,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Prepare Directories","properties":[],"units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"isDefault":false,"monitors":["standard_output"],"name":"bash_vasp_prepare_neb_images","schemaVersion":"2022.8.16"},"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","head":true,"input":[{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < 00/POSCAR < 01/POSCAR < avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n", "name": "espresso_xml_get_qpt_irr.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n\n\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n", "schemaVersion": "2022.8.16" }] }, { "name": "assignment", "type": "assignment", "operand": "Q_POINTS", "value": "json.loads(STDOUT)", "input": [{ "scope": "9b8a495e-1ac1-56a7-b2e0-af1b405a1219", "name": "STDOUT" }], "status": "idle", "statusTrack": [], "flowchartId": "d0fd8654-2106-546b-8792-7bb46272befc", "tags": [], "head": false, "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }] }, { "_id": "545a66e2-dfbe-513e-acaf-d79d0d139b9c", "name": "reduce", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "properties": ["phonon_dos", "phonon_dispersions"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "ph_grid_restart", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "cb206177-a4af-599a-81ba-6c88d24253b6", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "ph_grid_restart.in" }], "results": [], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "ph.x", "name": "ph_grid_restart", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", "name": "ph_grid_restart.in", "contextProviders": [{ "name": "QGridFormDataManager" }], "applicationName": "espresso", "executableName": "ph.x", "rendered": "&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n", "schemaVersion": "2022.8.16" }], "next": "3b4507a7-9244-540b-abe0-66bceab700f5" }, { "type": "execution", "name": "q2r", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "3b4507a7-9244-540b-abe0-66bceab700f5", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "q2r.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "q2r.in" }], "results": [], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "q2r.x", "name": "q2r", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", "name": "q2r.in", "contextProviders": [], "applicationName": "espresso", "executableName": "q2r.x", "rendered": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", "schemaVersion": "2022.8.16" }], "next": "8fe6a24b-c994-55a2-a448-88657292e8c2" }, { "type": "execution", "name": "matdyn_grid", "head": false, "results": [{ "name": "phonon_dos" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "8fe6a24b-c994-55a2-a448-88657292e8c2", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "matdyn.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "matdyn_grid.in" }], "monitors": ["standard_output"], "results": ["phonon_dos"], "applicationName": "espresso", "executableName": "matdyn.x", "name": "matdyn_grid", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n", "name": "matdyn_grid.in", "contextProviders": [{ "name": "IGridFormDataManager" }], "applicationName": "espresso", "executableName": "matdyn.x", "rendered": "&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n", "schemaVersion": "2022.8.16" }], "next": "a7fded20-889b-54fc-bbb0-456e82689ab1" }, { "type": "execution", "name": "matdyn_path", "head": false, "results": [{ "name": "phonon_dispersions" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "a7fded20-889b-54fc-bbb0-456e82689ab1", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "matdyn.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "matdyn_path.in" }], "monitors": ["standard_output"], "results": ["phonon_dispersions"], "applicationName": "espresso", "executableName": "matdyn.x", "name": "matdyn_path", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "matdyn_path.in", "contextProviders": [{ "name": "IPathFormDataManager" }], "applicationName": "espresso", "executableName": "matdyn.x", "rendered": "&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "Preliminary SCF Calculation", "type": "subworkflow", "_id": "79f2cb6a-7994-5369-8c85-af07c55ad26f", "status": "idle", "statusTrack": [], "flowchartId": "b6a2b27a-0fec-5e0e-8974-073ee9d2ad83", "tags": [], "head": true, "next": "4bb74dfb-46a6-5bf4-a477-5d374dc2e271" }, { "name": "ph-init-qpoints", "type": "subworkflow", "_id": "2f017bcb-f4ba-55b8-b939-1f780679a88e", "status": "idle", "statusTrack": [], "flowchartId": "4bb74dfb-46a6-5bf4-a477-5d374dc2e271", "tags": [], "head": false, "next": "9894b91f-6e97-5ee6-af02-0bef26bd62c0" }, { "name": "espresso-xml-get-qpt-irr", "type": "subworkflow", "_id": "e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a", "status": "idle", "statusTrack": [], "flowchartId": "9894b91f-6e97-5ee6-af02-0bef26bd62c0", "tags": [], "head": false, "next": "24e3c1f0-8090-512e-9727-8770071d17c8" }, { "name": "map", "type": "map", "workflowId": "731d3397-3278-516a-b28e-53626ef50f0a", "input": { "target": "MAP_DATA", "scope": "global", "name": "Q_POINTS", "values": [], "useValues": false }, "status": "idle", "statusTrack": [], "flowchartId": "24e3c1f0-8090-512e-9727-8770071d17c8", "tags": [], "head": false, "next": "55a9e9fb-3545-5c4b-a1bb-b64a899b78c6" }, { "name": "reduce", "type": "subworkflow", "_id": "545a66e2-dfbe-513e-acaf-d79d0d139b9c", "status": "idle", "statusTrack": [], "flowchartId": "55a9e9fb-3545-5c4b-a1bb-b64a899b78c6", "tags": [], "head": false }], "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "_id": "23b9058b-884c-52d4-82a8-ee162b9761e0", "workflows": [{ "name": "pre-processor", "subworkflows": [{ "_id": "03f3a8a3-1fd0-5007-925f-fba78be63a51", "name": "pre-processor", "application": { "name": "shell", "shortName": "sh", "summary": "Shell Script", "build": "GNU", "version": "5.1.8", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "shell", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "99304304-e873-5c89-ae83-91e61a7f629c", "preProcessors": [], "postProcessors": [], "application": { "name": "shell", "shortName": "sh", "summary": "Shell Script", "build": "GNU", "version": "5.1.8", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "espresso_link_outdir_save.sh" }], "monitors": ["standard_output"], "applicationName": "shell", "executableName": "sh", "name": "espresso_link_outdir_save", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n", "name": "espresso_link_outdir_save.sh", "contextProviders": [], "applicationName": "shell", "executableName": "sh", "rendered": "\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n\n", "schemaVersion": "2022.8.16" }] }] }, { "_id": "e68db280-8636-53e3-81a0-88396ba6147d", "name": "ph-single-irr-qpt", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "properties": [], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "ph_single_irr_qpt", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "8db9af08-d935-57a0-a824-e7db6d936de8", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "ph_single_irr_qpt.in" }], "results": [], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "ph.x", "name": "ph_single_irr_qpt", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", "name": "ph_single_irr_qpt.in", "contextProviders": [{ "name": "QGridFormDataManager" }], "applicationName": "espresso", "executableName": "ph.x", "rendered": "&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n \n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n \n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = '{{ JOB_SCRATCH_DIR }}/outdir'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n", "schemaVersion": "2022.8.16" }] }] }, { "_id": "7239fc3a-b343-513f-af35-e8687e1829da", "name": "post-processor", "application": { "name": "shell", "shortName": "sh", "summary": "Shell Script", "build": "GNU", "version": "5.1.8", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "shell", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "99304304-e873-5c89-ae83-91e61a7f629c", "preProcessors": [], "postProcessors": [], "application": { "name": "shell", "shortName": "sh", "summary": "Shell Script", "build": "GNU", "version": "5.1.8", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "espresso_collect_dynmat.sh" }], "monitors": ["standard_output"], "applicationName": "shell", "executableName": "sh", "name": "espresso_collect_dynmat", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n", "name": "espresso_collect_dynmat.sh", "contextProviders": [], "applicationName": "shell", "executableName": "sh", "rendered": "\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n\n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "pre-processor", "type": "subworkflow", "_id": "03f3a8a3-1fd0-5007-925f-fba78be63a51", "status": "idle", "statusTrack": [], "flowchartId": "e9a790f4-dec6-52c1-b951-014f0ff01cb4", "tags": [], "head": true, "next": "c2195045-7a5c-54d3-ab88-211c82de09f1" }, { "name": "ph-single-irr-qpt", "type": "subworkflow", "_id": "e68db280-8636-53e3-81a0-88396ba6147d", "status": "idle", "statusTrack": [], "flowchartId": "c2195045-7a5c-54d3-ab88-211c82de09f1", "tags": [], "head": false, "next": "e483c7fb-2a29-5e91-819a-7465ead70134" }, { "name": "post-processor", "type": "subworkflow", "_id": "7239fc3a-b343-513f-af35-e8687e1829da", "status": "idle", "statusTrack": [], "flowchartId": "e483c7fb-2a29-5e91-819a-7465ead70134", "tags": [], "head": false }], "properties": [], "_id": "731d3397-3278-516a-b28e-53626ef50f0a", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, "compute": { "ppn": 1, "nodes": 1, "queue": "D", "timeLimit": "01:00:00", "notify": "n", "cluster": { "fqdn": "" } } }], "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "espresso" } }, "espresso/recalculate_bands.json": { "name": "Recalculate Bands", "subworkflows": [{ "_id": "64551dfb-e529-5d8d-9092-ff268f4da134", "name": "Recalculate Bands", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "properties": ["band_structure"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_bands", "head": true, "results": [{ "name": "band_structure" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "d618df45-5af3-5da5-8882-d74a27e00b04", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_bands.in" }], "results": ["band_structure"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "pw_bands.in", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }], "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2" }, { "type": "execution", "name": "bands", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "bands.in" }], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "bands.x", "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", "name": "bands.in", "contextProviders": [], "applicationName": "espresso", "executableName": "bands.x", "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "Recalculate Bands", "type": "subworkflow", "_id": "64551dfb-e529-5d8d-9092-ff268f4da134", "status": "idle", "statusTrack": [], "flowchartId": "e8b72a45-765e-565f-ab17-c91a21aec09d", "tags": [], "head": true }], "properties": ["band_structure"], "_id": "42b2b964-8ccc-5b36-9e33-41a954abc2ba", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "espresso" } }, "espresso/surface_energy.json": { "name": "Surface Energy", "subworkflows": [{ "_id": "3e05a2b5-4171-54a2-9d2d-9e46118a56bf", "name": "Surface Energy", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "name": "io-slab", "type": "io", "subtype": "input", "head": true, "results": [], "monitors": [], "flowchartId": "e463ef46-a36e-5168-87dd-e21eb980dfb8", "preProcessors": [], "postProcessors": [], "source": "api", "input": [{ "endpoint": "materials", "endpoint_options": { "params": { "query": "{'_id': MATERIAL_ID}", "projection": "{}" } }, "name": "DATA" }], "next": "ee7abb4e-7848-5aeb-960d-0d441909e2d1", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "slab", "type": "assignment", "operand": "SLAB", "value": "DATA[0]", "input": [{ "name": "DATA", "scope": "e463ef46-a36e-5168-87dd-e21eb980dfb8" }], "head": false, "results": [], "monitors": [], "flowchartId": "ee7abb4e-7848-5aeb-960d-0d441909e2d1", "preProcessors": [], "postProcessors": [], "next": "44263820-0c80-5bd1-b854-9da8d198eac1", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "io-bulk", "type": "io", "subtype": "input", "head": false, "results": [], "monitors": [], "flowchartId": "44263820-0c80-5bd1-b854-9da8d198eac1", "preProcessors": [], "postProcessors": [], "source": "api", "input": [{ "endpoint": "materials", "endpoint_options": { "params": { "query": "{'_id': SLAB.metadata.bulkId}", "projection": "{}" } }, "name": "DATA" }], "next": "b70656f1-a394-57f4-b4de-00096969df4b", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "bulk", "type": "assignment", "operand": "BULK", "value": "DATA[0] if DATA else None", "input": [{ "name": "DATA", "scope": "44263820-0c80-5bd1-b854-9da8d198eac1" }], "head": false, "results": [], "monitors": [], "flowchartId": "b70656f1-a394-57f4-b4de-00096969df4b", "preProcessors": [], "postProcessors": [], "next": "6ca4006a-e3ae-56ea-91a1-06b9790b5f7e", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "assert-bulk", "type": "assertion", "statement": "BULK != None", "errorMessage": "Bulk material does not exist!", "head": false, "results": [], "monitors": [], "flowchartId": "6ca4006a-e3ae-56ea-91a1-06b9790b5f7e", "preProcessors": [], "postProcessors": [], "next": "490635e0-c593-5809-9eb2-c794b96cfed1", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "io-e-bulk", "type": "io", "subtype": "input", "head": false, "results": [], "monitors": [], "flowchartId": "490635e0-c593-5809-9eb2-c794b96cfed1", "preProcessors": [], "postProcessors": [], "source": "api", "input": [{ "endpoint": "refined-properties", "endpoint_options": { "params": { "query": "{ 'exabyteId': BULK.exabyteId, 'data.name': 'total_energy', 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} }", "projection": "{'sort': {'precision.value': -1}, 'limit': 1}" } }, "name": "DATA" }], "next": "bbe13b97-4243-5a85-8f61-a279d0b797aa", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "e-bulk", "type": "assignment", "operand": "E_BULK", "value": "DATA[0].data.value if DATA else None", "input": [{ "name": "DATA", "scope": "490635e0-c593-5809-9eb2-c794b96cfed1" }], "head": false, "results": [], "monitors": [], "flowchartId": "bbe13b97-4243-5a85-8f61-a279d0b797aa", "preProcessors": [], "postProcessors": [], "next": "a06c9f43-7670-5fd0-ac42-7028a472235a", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "assert-e-bulk", "type": "assertion", "statement": "E_BULK != None", "errorMessage": "E_BULK does not exist!", "head": false, "results": [], "monitors": [], "flowchartId": "a06c9f43-7670-5fd0-ac42-7028a472235a", "preProcessors": [], "postProcessors": [], "next": "cdf210be-26ed-585a-b4ac-d55795ba2975", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "surface", "type": "assignment", "operand": "A", "value": "np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))", "input": [], "head": false, "results": [], "monitors": [], "flowchartId": "cdf210be-26ed-585a-b4ac-d55795ba2975", "preProcessors": [], "postProcessors": [], "next": "ffa8e43d-096a-555b-b8d0-6d283365ef47", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "n-bulk", "type": "assignment", "operand": "N_BULK", "value": "len(BULK.basis.elements)", "input": [], "head": false, "results": [], "monitors": [], "flowchartId": "ffa8e43d-096a-555b-b8d0-6d283365ef47", "preProcessors": [], "postProcessors": [], "next": "a0336ec5-a6da-5e4c-bb48-82b70cf5245f", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "n-slab", "type": "assignment", "operand": "N_SLAB", "value": "len(SLAB.basis.elements)", "input": [], "head": false, "results": [], "monitors": [], "flowchartId": "a0336ec5-a6da-5e4c-bb48-82b70cf5245f", "preProcessors": [], "postProcessors": [], "next": "9fc7a088-5533-5f70-bb33-f676ec65f565", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "type": "execution", "name": "pw_scf", "head": false, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "fcd88119-817c-5ac1-a430-ba892ac743eb" }, { "name": "e-slab", "type": "assignment", "operand": "E_SLAB", "value": "total_energy", "input": [{ "name": "total_energy", "scope": "9fc7a088-5533-5f70-bb33-f676ec65f565" }], "head": false, "results": [], "monitors": [], "flowchartId": "fcd88119-817c-5ac1-a430-ba892ac743eb", "preProcessors": [], "postProcessors": [], "next": "542ea9ad-8a07-5a76-b233-f72fb27c4fc6", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "surface-energy", "type": "assignment", "operand": "SURFACE_ENERGY", "value": "1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))", "input": [], "head": false, "results": [{ "name": "surface_energy" }], "monitors": [], "flowchartId": "542ea9ad-8a07-5a76-b233-f72fb27c4fc6", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }] }], "units": [{ "name": "Surface Energy", "type": "subworkflow", "_id": "3e05a2b5-4171-54a2-9d2d-9e46118a56bf", "status": "idle", "statusTrack": [], "flowchartId": "d81dc9ce-bb50-5bc6-af1d-e5ede03bb0a6", "tags": [], "head": true }], "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "surface_energy", "total_energy", "total_energy_contributions", "total_force"], "_id": "68512987-de73-5614-bab2-0f8b575cffa3", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "espresso" } }, "espresso/total_energy.json": { "name": "Total Energy", "subworkflows": [{ "_id": "a16677f9-bb5b-54b5-9f97-c2af8c073184", "name": "Total Energy", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "Total Energy", "type": "subworkflow", "_id": "a16677f9-bb5b-54b5-9f97-c2af8c073184", "status": "idle", "statusTrack": [], "flowchartId": "6059d61a-6a92-5657-9130-02208639aff8", "tags": [], "head": true }], "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "_id": "4e36ca25-fa46-5628-a227-27d22dea8553", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, "tags": ["default"], "application": { "name": "espresso" } }, "espresso/valence_band_offset.json": { "name": "Valence Band Offset (2D)", "subworkflows": [{ "isMultiMaterial": true, "_id": "9c65d03e-6a30-58f3-947a-f174342be0c3", "name": "BS + Avg ESP (Interface)", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "band_gaps", "average_potential_profile"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "name": "Set Material Index (Interface)", "type": "assignment", "operand": "MATERIAL_INDEX", "value": "0", "input": [], "status": "idle", "statusTrack": [], "flowchartId": "0f21d8c4-ab32-53ba-b40d-fc9b6608e1b9", "tags": [], "head": true, "next": "9fc7a088-5533-5f70-bb33-f676ec65f565", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "type": "execution", "name": "pw_scf", "head": false, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "pw-bands-calculate-band-gap" }, { "type": "execution", "name": "pw_bands", "head": false, "results": [{ "name": "band_gaps" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "pw-bands-calculate-band-gap", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_bands.in" }], "results": ["band_structure"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "pw_bands.in", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }], "next": "a667d9fd-35d5-5897-be0e-fa0247233649" }, { "name": "Select indirect band gap", "type": "assignment", "operand": "BAND_GAP_INDIRECT", "value": "[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]", "input": [{ "name": "band_gaps", "scope": "pw-bands-calculate-band-gap" }], "status": "idle", "statusTrack": [], "flowchartId": "a667d9fd-35d5-5897-be0e-fa0247233649", "tags": [], "head": false, "next": "08819369-b541-5b51-8a40-0ee135039482", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "name": "Set Valence Band Maximum", "type": "assignment", "operand": "VBM", "value": "BAND_GAP_INDIRECT['eigenvalueValence']", "input": [], "status": "idle", "statusTrack": [], "flowchartId": "08819369-b541-5b51-8a40-0ee135039482", "tags": [], "head": false, "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "type": "execution", "name": "bands", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "bands.in" }], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "bands.x", "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", "name": "bands.in", "contextProviders": [], "applicationName": "espresso", "executableName": "bands.x", "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n", "schemaVersion": "2022.8.16" }], "next": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde" }, { "type": "execution", "name": "Electrostatic Potential (ESP)", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "pp.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "pp_electrostatic_potential.in" }], "results": [], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pp.x", "name": "pp_electrostatic_potential", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", "name": "pp_electrostatic_potential.in", "contextProviders": [], "applicationName": "espresso", "executableName": "pp.x", "rendered": "&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", "schemaVersion": "2022.8.16" }], "next": "average-electrostatic-potential" }, { "type": "execution", "name": "average ESP", "head": false, "results": [{ "name": "average_potential_profile" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "average-electrostatic-potential", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "average.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "average.in" }], "results": ["average_potential_profile"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "average.x", "name": "average_potential", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", "name": "average.in", "contextProviders": [], "applicationName": "espresso", "executableName": "average.x", "rendered": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", "schemaVersion": "2022.8.16" }], "next": "c6c11873-91d7-5422-8302-3dcc1ce971e9" }, { "name": "Set Macroscopically Averaged ESP Data", "type": "assignment", "operand": "array_from_context", "value": "average_potential_profile['yDataSeries'][1]", "input": [{ "name": "average_potential_profile", "scope": "average-electrostatic-potential" }], "status": "idle", "statusTrack": [], "flowchartId": "c6c11873-91d7-5422-8302-3dcc1ce971e9", "tags": [], "head": false, "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }] }, { "_id": "ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7", "name": "Find ESP Values (Interface)", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "Find Extrema", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "python-find-extrema", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "find_extrema.py", "templateName": "find_extrema.py" }, { "name": "requirements.txt", "templateName": "processing_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "generic:processing:find_extrema:scipy", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n", "name": "find_extrema.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\nY = np.array({{array_from_context}})\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n", "schemaVersion": "2022.8.16" }], "next": "8fce780b-5555-5b73-b3d1-1bb24a4c759d" }, { "name": "Set Average ESP Value", "type": "assignment", "operand": "AVG_ESP_INTERFACE", "value": "json.loads(STDOUT)['minima']", "input": [{ "name": "STDOUT", "scope": "python-find-extrema" }], "status": "idle", "statusTrack": [], "flowchartId": "8fce780b-5555-5b73-b3d1-1bb24a4c759d", "tags": [], "head": false, "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }] }, { "isMultiMaterial": true, "_id": "ba46d9b4-610f-537e-ae39-e39ce5240cda", "name": "BS + Avg ESP (interface left)", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "band_gaps", "average_potential_profile"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "name": "Set Material Index (Interface left)", "type": "assignment", "operand": "MATERIAL_INDEX", "value": "1", "input": [], "status": "idle", "statusTrack": [], "flowchartId": "0bd31760-f6e4-5826-b282-882c06c97f94", "tags": [], "head": true, "next": "9fc7a088-5533-5f70-bb33-f676ec65f565", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "type": "execution", "name": "pw_scf", "head": false, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "pw-bands-calculate-band-gap-left" }, { "type": "execution", "name": "pw_bands", "head": false, "results": [{ "name": "band_gaps" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "pw-bands-calculate-band-gap-left", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_bands.in" }], "results": ["band_structure"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "pw_bands.in", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }], "next": "a667d9fd-35d5-5897-be0e-fa0247233649" }, { "name": "Select indirect band gap", "type": "assignment", "operand": "BAND_GAP_INDIRECT", "value": "[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]", "input": [{ "name": "band_gaps", "scope": "pw-bands-calculate-band-gap-left" }], "status": "idle", "statusTrack": [], "flowchartId": "a667d9fd-35d5-5897-be0e-fa0247233649", "tags": [], "head": false, "next": "08819369-b541-5b51-8a40-0ee135039482", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "name": "Set Valence Band Maximum", "type": "assignment", "operand": "VBM_LEFT", "value": "BAND_GAP_INDIRECT['eigenvalueValence']", "input": [], "status": "idle", "statusTrack": [], "flowchartId": "08819369-b541-5b51-8a40-0ee135039482", "tags": [], "head": false, "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "type": "execution", "name": "bands", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "bands.in" }], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "bands.x", "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", "name": "bands.in", "contextProviders": [], "applicationName": "espresso", "executableName": "bands.x", "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n", "schemaVersion": "2022.8.16" }], "next": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde" }, { "type": "execution", "name": "Electrostatic Potential (ESP)", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "pp.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "pp_electrostatic_potential.in" }], "results": [], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pp.x", "name": "pp_electrostatic_potential", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", "name": "pp_electrostatic_potential.in", "contextProviders": [], "applicationName": "espresso", "executableName": "pp.x", "rendered": "&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", "schemaVersion": "2022.8.16" }], "next": "average-electrostatic-potential-left" }, { "type": "execution", "name": "average ESP", "head": false, "results": [{ "name": "average_potential_profile" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "average-electrostatic-potential-left", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "average.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "average.in" }], "results": ["average_potential_profile"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "average.x", "name": "average_potential", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", "name": "average.in", "contextProviders": [], "applicationName": "espresso", "executableName": "average.x", "rendered": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", "schemaVersion": "2022.8.16" }], "next": "c6c11873-91d7-5422-8302-3dcc1ce971e9" }, { "name": "Set Macroscopically Averaged ESP Data", "type": "assignment", "operand": "array_from_context", "value": "average_potential_profile['yDataSeries'][1]", "input": [{ "name": "average_potential_profile", "scope": "average-electrostatic-potential-left" }], "status": "idle", "statusTrack": [], "flowchartId": "c6c11873-91d7-5422-8302-3dcc1ce971e9", "tags": [], "head": false, "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }] }, { "_id": "6c303926-905c-5749-81d5-2d2964fdf09a", "name": "Find ESP Value (Interface left)", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "Find Extrema", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "python-find-extrema-left", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "find_extrema.py", "templateName": "find_extrema.py" }, { "name": "requirements.txt", "templateName": "processing_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "generic:processing:find_extrema:scipy", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n", "name": "find_extrema.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\nY = np.array({{array_from_context}})\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n", "schemaVersion": "2022.8.16" }], "next": "8fce780b-5555-5b73-b3d1-1bb24a4c759d" }, { "name": "Set Average ESP Value", "type": "assignment", "operand": "AVG_ESP_LEFT", "value": "json.loads(STDOUT)['minima']", "input": [{ "name": "STDOUT", "scope": "python-find-extrema-left" }], "status": "idle", "statusTrack": [], "flowchartId": "8fce780b-5555-5b73-b3d1-1bb24a4c759d", "tags": [], "head": false, "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }] }, { "isMultiMaterial": true, "_id": "aa611fe8-1e6a-5e5c-976a-f64bfaaaace9", "name": "BS + Avg ESP (interface right)", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "band_gaps", "average_potential_profile"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "name": "Set Material Index (Interface right)", "type": "assignment", "operand": "MATERIAL_INDEX", "value": "2", "input": [], "status": "idle", "statusTrack": [], "flowchartId": "a05809d1-cc0d-5a0b-bf5e-d43b90a6ac4b", "tags": [], "head": true, "next": "9fc7a088-5533-5f70-bb33-f676ec65f565", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "type": "execution", "name": "pw_scf", "head": false, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "pw-bands-calculate-band-gap-right" }, { "type": "execution", "name": "pw_bands", "head": false, "results": [{ "name": "band_gaps" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "pw-bands-calculate-band-gap-right", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_bands.in" }], "results": ["band_structure"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "pw_bands.in", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }], "next": "a667d9fd-35d5-5897-be0e-fa0247233649" }, { "name": "Select indirect band gap", "type": "assignment", "operand": "BAND_GAP_INDIRECT", "value": "[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]", "input": [{ "name": "band_gaps", "scope": "pw-bands-calculate-band-gap-right" }], "status": "idle", "statusTrack": [], "flowchartId": "a667d9fd-35d5-5897-be0e-fa0247233649", "tags": [], "head": false, "next": "08819369-b541-5b51-8a40-0ee135039482", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "name": "Set Valence Band Maximum", "type": "assignment", "operand": "VBM_RIGHT", "value": "BAND_GAP_INDIRECT['eigenvalueValence']", "input": [], "status": "idle", "statusTrack": [], "flowchartId": "08819369-b541-5b51-8a40-0ee135039482", "tags": [], "head": false, "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "type": "execution", "name": "bands", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "bands.in" }], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "bands.x", "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", "name": "bands.in", "contextProviders": [], "applicationName": "espresso", "executableName": "bands.x", "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n", "schemaVersion": "2022.8.16" }], "next": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde" }, { "type": "execution", "name": "Electrostatic Potential (ESP)", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "pp.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "pp_electrostatic_potential.in" }], "results": [], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pp.x", "name": "pp_electrostatic_potential", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", "name": "pp_electrostatic_potential.in", "contextProviders": [], "applicationName": "espresso", "executableName": "pp.x", "rendered": "&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", "schemaVersion": "2022.8.16" }], "next": "average-electrostatic-potential-right" }, { "type": "execution", "name": "average ESP", "head": false, "results": [{ "name": "average_potential_profile" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "average-electrostatic-potential-right", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "average.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "average.in" }], "results": ["average_potential_profile"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "average.x", "name": "average_potential", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", "name": "average.in", "contextProviders": [], "applicationName": "espresso", "executableName": "average.x", "rendered": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", "schemaVersion": "2022.8.16" }], "next": "c6c11873-91d7-5422-8302-3dcc1ce971e9" }, { "name": "Set Macroscopically Averaged ESP Data", "type": "assignment", "operand": "array_from_context", "value": "average_potential_profile['yDataSeries'][1]", "input": [{ "name": "average_potential_profile", "scope": "average-electrostatic-potential-right" }], "status": "idle", "statusTrack": [], "flowchartId": "c6c11873-91d7-5422-8302-3dcc1ce971e9", "tags": [], "head": false, "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }] }, { "_id": "736295e8-2ee0-5974-83bc-362061ac0688", "name": "Find ESP Value (Interface right)", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "Find Extrema", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "python-find-extrema-right", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "find_extrema.py", "templateName": "find_extrema.py" }, { "name": "requirements.txt", "templateName": "processing_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "generic:processing:find_extrema:scipy", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n", "name": "find_extrema.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\nY = np.array({{array_from_context}})\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n", "schemaVersion": "2022.8.16" }], "next": "8fce780b-5555-5b73-b3d1-1bb24a4c759d" }, { "name": "Set Average ESP Value", "type": "assignment", "operand": "AVG_ESP_RIGHT", "value": "json.loads(STDOUT)['minima']", "input": [{ "name": "STDOUT", "scope": "python-find-extrema-right" }], "status": "idle", "statusTrack": [], "flowchartId": "8fce780b-5555-5b73-b3d1-1bb24a4c759d", "tags": [], "head": false, "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }] }, { "_id": "1b70e606-a7ee-599e-89e0-91a7dc5faa4a", "name": "Calculate VBO", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": ["valence_band_offset"], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "name": "Difference of valence band maxima", "type": "assignment", "operand": "VBM_DIFF", "value": "VBM_LEFT - VBM_RIGHT", "input": [], "status": "idle", "statusTrack": [], "flowchartId": "bd4eaa98-b001-5694-87ef-ec77540502ab", "tags": [], "head": true, "next": "2626f7bb-d392-5fd4-ab71-329b508de347", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Difference of macroscopically averaged ESP in bulk", "type": "assignment", "operand": "AVG_ESP_DIFF", "value": "AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]", "input": [], "status": "idle", "statusTrack": [], "flowchartId": "2626f7bb-d392-5fd4-ab71-329b508de347", "tags": [], "head": false, "next": "b7307787-53e2-599b-ad12-d627b04074b4", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Lineup of macroscopically averaged ESP in interface", "type": "assignment", "operand": "ESP_LINEUP", "value": "np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])", "input": [], "status": "idle", "statusTrack": [], "flowchartId": "b7307787-53e2-599b-ad12-d627b04074b4", "tags": [], "head": false, "next": "197f4b4d-cb7b-57be-a885-d44cb1f61905", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Valence Band Offset", "type": "assignment", "operand": "VALENCE_BAND_OFFSET", "value": "abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))", "input": [], "results": [{ "name": "valence_band_offset" }], "status": "idle", "statusTrack": [], "flowchartId": "197f4b4d-cb7b-57be-a885-d44cb1f61905", "tags": [], "head": false, "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }] }], "units": [{ "name": "BS + Avg ESP (Interface)", "type": "subworkflow", "_id": "9c65d03e-6a30-58f3-947a-f174342be0c3", "status": "idle", "statusTrack": [], "flowchartId": "fd622b5c-5c02-594e-b582-b245c17ca9a4", "tags": [], "head": true, "next": "ad3b1e4c-5965-5605-a067-dd0c59907c4b" }, { "name": "Find ESP Values (Interface)", "type": "subworkflow", "_id": "ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7", "status": "idle", "statusTrack": [], "flowchartId": "ad3b1e4c-5965-5605-a067-dd0c59907c4b", "tags": [], "head": false, "next": "8d5b4734-edfd-55cc-ad80-aaa72487398d" }, { "name": "BS + Avg ESP (interface left)", "type": "subworkflow", "_id": "ba46d9b4-610f-537e-ae39-e39ce5240cda", "status": "idle", "statusTrack": [], "flowchartId": "8d5b4734-edfd-55cc-ad80-aaa72487398d", "tags": [], "head": false, "next": "102ec582-5b75-52f5-8b39-19ca725ed47a" }, { "name": "Find ESP Value (Interface left)", "type": "subworkflow", "_id": "6c303926-905c-5749-81d5-2d2964fdf09a", "status": "idle", "statusTrack": [], "flowchartId": "102ec582-5b75-52f5-8b39-19ca725ed47a", "tags": [], "head": false, "next": "603c45db-93aa-54ce-a7fe-6e9b65b0037d" }, { "name": "BS + Avg ESP (interface right)", "type": "subworkflow", "_id": "aa611fe8-1e6a-5e5c-976a-f64bfaaaace9", "status": "idle", "statusTrack": [], "flowchartId": "603c45db-93aa-54ce-a7fe-6e9b65b0037d", "tags": [], "head": false, "next": "e3444d35-cc41-59f5-8481-78d0c383b84e" }, { "name": "Find ESP Value (Interface right)", "type": "subworkflow", "_id": "736295e8-2ee0-5974-83bc-362061ac0688", "status": "idle", "statusTrack": [], "flowchartId": "e3444d35-cc41-59f5-8481-78d0c383b84e", "tags": [], "head": false, "next": "0e0b141a-39ca-52bc-9094-e5f96dc72f39" }, { "name": "Calculate VBO", "type": "subworkflow", "_id": "1b70e606-a7ee-599e-89e0-91a7dc5faa4a", "status": "idle", "statusTrack": [], "flowchartId": "0e0b141a-39ca-52bc-9094-e5f96dc72f39", "tags": [], "head": false }], "properties": ["atomic_forces", "average_potential_profile", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "_id": "d8e08cac-7747-50aa-b925-41f214d722c6", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "espresso" } }, "espresso/variable_cell_relaxation.json": { "name": "Variable-cell Relaxation", "subworkflows": [{ "systemName": "espresso-variable-cell-relaxation", "_id": "58709c44-47f6-5fbf-bf2e-358b9d98f75d", "name": "Variable-cell Relaxation", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "properties": ["total_energy", "fermi_energy", "pressure", "atomic_forces", "total_force", "stress_tensor", "final_structure"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_vc-relax", "head": true, "results": [{ "name": "total_energy" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }, { "name": "final_structure" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }, { "name": "convergence_ionic" }], "flowchartId": "e1bd0870-6245-5fc2-a50d-48cabc356ac8", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_vc_relax.in" }], "monitors": ["standard_output", "convergence_electronic", "convergence_ionic"], "results": ["total_energy", "fermi_energy", "pressure", "atomic_forces", "total_force", "stress_tensor", "final_structure"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_vc-relax", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_vc_relax.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "Variable-cell Relaxation", "type": "subworkflow", "_id": "58709c44-47f6-5fbf-bf2e-358b9d98f75d", "status": "idle", "statusTrack": [], "flowchartId": "8f6e9590-6a87-584b-abd7-1fb98253054c", "tags": [], "head": true }], "properties": ["atomic_forces", "fermi_energy", "final_structure", "pressure", "stress_tensor", "total_energy", "total_force"], "_id": "c45dcef1-d16b-59d1-9318-cedd0b1acf08", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, "tags": ["variable-cell_relaxation"], "application": { "name": "espresso" } }, "espresso/zero_point_energy.json": { "name": "Zero Point Energy", "subworkflows": [{ "_id": "151538cc-9e71-5269-8b9e-cb5977151227", "name": "Zero Point Energy", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "zero_point_energy"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "107595d1-490f-53a2-8432-7f8a12f14d96" }, { "type": "execution", "name": "ph_zpe", "head": false, "results": [{ "name": "zero_point_energy" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "107595d1-490f-53a2-8432-7f8a12f14d96", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "ph_gamma.in" }], "results": ["zero_point_energy"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "ph.x", "name": "ph_gamma", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n", "name": "ph_gamma.in", "contextProviders": [], "applicationName": "espresso", "executableName": "ph.x", "rendered": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n/\n0 0 0\n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "Zero Point Energy", "type": "subworkflow", "_id": "151538cc-9e71-5269-8b9e-cb5977151227", "status": "idle", "statusTrack": [], "flowchartId": "d906bd20-eb92-5a01-a0e2-c81a2d9b2a41", "tags": [], "head": true }], "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "zero_point_energy"], "_id": "3158c78d-58bb-5675-8c7f-6f2337061015", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "espresso" } }, "nwchem/total_energy.json": { "name": "Total Energy", "subworkflows": [{ "_id": "9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13", "name": "Total Energy", "application": { "name": "nwchem", "shortName": "nwchem", "summary": "NWChem", "build": "GNU", "version": "7.0.2", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": ["total_energy", "total_energy_contributions"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "localorbital", "subtype": "pople", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "nwchem_total_energy", "head": true, "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7", "preProcessors": [], "postProcessors": [], "application": { "name": "nwchem", "shortName": "nwchem", "summary": "NWChem", "build": "GNU", "version": "7.0.2", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": false, "postProcessors": ["error_handler"], "monitors": ["standard_output"], "name": "nwchem", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "nwchem_total_energy.inp" }], "results": ["total_energy", "total_energy_contributions"], "monitors": ["standard_output"], "applicationName": "nwchem", "executableName": "nwchem", "name": "nwchem_total_energy", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": " start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n", "name": "nwchem_total_energy.inp", "contextProviders": [{ "name": "NWChemInputDataManager" }], "applicationName": "nwchem", "executableName": "nwchem", "rendered": " start nwchem\n title \"Test\"\n charge 0\n geometry units au noautosym\n Si 0.000000000 0.000000000 0.000000000 \nSi 1.116306745 0.789348070 1.933500000 \n end\n basis\n * library 6-31G\n end\n dft\n xc B3LYP\n mult 1\n end\n task dft energy\n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "Total Energy", "type": "subworkflow", "_id": "9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13", "status": "idle", "statusTrack": [], "flowchartId": "6059d61a-6a92-5657-9130-02208639aff8", "tags": [], "head": true }], "properties": ["total_energy", "total_energy_contributions"], "_id": "937fbac8-2dec-5fb1-a46f-b8a0cc3d3d05", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "nwchem" } }, "python/ml/classification_workflow.json": { "name": "Python ML Train Classification", "subworkflows": [{ "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", "name": "Set Up the Job", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "name": "Set Workflow Mode", "type": "assignment", "operand": "IS_WORKFLOW_RUNNING_TO_PREDICT", "value": "False", "input": [], "flowchartId": "head-set-predict-status", "tags": ["pyml:workflow-type-setter"], "status": "idle", "statusTrack": [], "head": true, "next": "head-fetch-training-data", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Fetch Dataset", "type": "io", "subtype": "input", "enableRender": true, "flowchartId": "head-fetch-training-data", "input": [{ "basename": "{{DATASET_BASENAME}}", "objectData": { "CONTAINER": "", "NAME": "{{DATASET_FILEPATH}}", "PROVIDER": "", "REGION": "" } }], "source": "object_storage", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "head-branch-on-predict-status", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Train or Predict?", "type": "condition", "input": [{ "name": "IS_WORKFLOW_RUNNING_TO_PREDICT", "scope": "global" }], "results": [], "preProcessors": [], "postProcessors": [], "then": "head-fetch-trained-model", "else": "end-of-ml-train-head", "statement": "IS_WORKFLOW_RUNNING_TO_PREDICT", "maxOccurrences": 100, "flowchartId": "head-branch-on-predict-status", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "head-fetch-trained-model", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Fetch Trained Model as file", "type": "io", "subtype": "input", "enableRender": true, "flowchartId": "head-fetch-trained-model", "input": [{ "basename": "", "objectData": { "CONTAINER": "", "NAME": "", "PROVIDER": "", "REGION": "" } }], "source": "object_storage", "tags": ["set-io-unit-filenames"], "status": "idle", "statusTrack": [], "head": false, "next": "end-of-ml-train-head", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "End Setup", "type": "assignment", "operand": "IS_SETUP_COMPLETE", "value": "True", "input": [], "flowchartId": "end-of-ml-train-head", "status": "idle", "statusTrack": [], "tags": [], "head": false, "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }] }, { "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", "name": "Machine Learning", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": ["workflow:pyml_predict", "file_content"], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "Setup Variables and Packages", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "c3608488-0259-5ff4-8b90-11c6e60d6c85", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "settings.py", "templateName": "pyml_settings.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:setup_variables_packages", "schemaVersion": "2022.8.16", "isDefault": false }, "enableRender": true, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", "name": "settings.py", "contextProviders": [{ "name": "MLSettingsDataManager" }], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3" }, { "type": "execution", "name": "Data Input", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "data_input_read_csv_pandas.py", "templateName": "data_input_read_csv_pandas.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:data_input:read_csv:pandas", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", "name": "data_input_read_csv_pandas.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "7fff5212-6c6d-586b-9997-4d4485e09383" }, { "type": "execution", "name": "Train Test Split", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "7fff5212-6c6d-586b-9997-4d4485e09383", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "data_input_train_test_split_sklearn.py", "templateName": "data_input_train_test_split_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:data_input:train_test_split:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "name": "data_input_train_test_split_sklearn.py", "contextProviders": [{ "name": "MLTrainTestSplitDataManager" }], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "799de7dc-9394-571b-8e0d-3ff876a3df02" }, { "type": "execution", "name": "Data Standardize", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "799de7dc-9394-571b-8e0d-3ff876a3df02", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pre_processing_standardization_sklearn.py", "templateName": "pre_processing_standardization_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:pre_processing:standardization:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", "name": "pre_processing_standardization_sklearn.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "8dfc61c3-067d-5ea8-bd26-7296628d707a" }, { "type": "execution", "name": "Model Train and Predict", "head": false, "results": [{ "name": "workflow:pyml_predict" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "8dfc61c3-067d-5ea8-bd26-7296628d707a", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "model_random_forest_classification_sklearn.py", "templateName": "model_random_forest_classification_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "results": ["workflow:pyml_predict"], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:model:random_forest_classification:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "tags": ["remove-all-results", "creates-predictions-csv-during-predict-phase"], "status": "idle", "statusTrack": [], "input": [{ "content": "# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "name": "model_random_forest_classification_sklearn.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "35436b4a-cd9c-5089-ab42-665c4f9ba049" }, { "type": "execution", "name": "ROC Curve Plot", "head": false, "results": [{ "basename": "my_roc_plot.png", "filetype": "image", "name": "file_content" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "35436b4a-cd9c-5089-ab42-665c4f9ba049", "preProcessors": [], "postProcessors": [{ "name": "remove_virtual_environment" }], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "post_processing_roc_curve_sklearn.py", "templateName": "post_processing_roc_curve_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "results": ["file_content"], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:post_processing:roc_curve:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "tags": ["remove-all-results"], "status": "idle", "statusTrack": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "name": "post_processing_roc_curve_sklearn.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "Set Up the Job", "type": "subworkflow", "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", "status": "idle", "statusTrack": [], "flowchartId": "5b51df93-15dd-5440-90fd-a3ffa264b7d8", "tags": [], "head": true, "next": "90738aae-daac-599f-913f-29fb6acdff00" }, { "name": "Machine Learning", "type": "subworkflow", "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", "status": "idle", "statusTrack": [], "flowchartId": "90738aae-daac-599f-913f-29fb6acdff00", "tags": [], "head": false }], "properties": [], "_id": "f447c6df-3b7b-5b8e-a0cc-1a743847ceed", "workflows": [], "isUsingDataset": true, "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "python" } }, "python/ml/clustering_workflow.json": { "name": "Python ML Train Clustering", "subworkflows": [{ "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", "name": "Set Up the Job", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "name": "Set Workflow Mode", "type": "assignment", "operand": "IS_WORKFLOW_RUNNING_TO_PREDICT", "value": "False", "input": [], "flowchartId": "head-set-predict-status", "tags": ["pyml:workflow-type-setter"], "status": "idle", "statusTrack": [], "head": true, "next": "head-fetch-training-data", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Fetch Dataset", "type": "io", "subtype": "input", "enableRender": true, "flowchartId": "head-fetch-training-data", "input": [{ "basename": "{{DATASET_BASENAME}}", "objectData": { "CONTAINER": "", "NAME": "{{DATASET_FILEPATH}}", "PROVIDER": "", "REGION": "" } }], "source": "object_storage", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "head-branch-on-predict-status", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Train or Predict?", "type": "condition", "input": [{ "name": "IS_WORKFLOW_RUNNING_TO_PREDICT", "scope": "global" }], "results": [], "preProcessors": [], "postProcessors": [], "then": "head-fetch-trained-model", "else": "end-of-ml-train-head", "statement": "IS_WORKFLOW_RUNNING_TO_PREDICT", "maxOccurrences": 100, "flowchartId": "head-branch-on-predict-status", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "head-fetch-trained-model", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Fetch Trained Model as file", "type": "io", "subtype": "input", "enableRender": true, "flowchartId": "head-fetch-trained-model", "input": [{ "basename": "", "objectData": { "CONTAINER": "", "NAME": "", "PROVIDER": "", "REGION": "" } }], "source": "object_storage", "tags": ["set-io-unit-filenames"], "status": "idle", "statusTrack": [], "head": false, "next": "end-of-ml-train-head", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "End Setup", "type": "assignment", "operand": "IS_SETUP_COMPLETE", "value": "True", "input": [], "flowchartId": "end-of-ml-train-head", "status": "idle", "statusTrack": [], "tags": [], "head": false, "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }] }, { "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", "name": "Machine Learning", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": ["workflow:pyml_predict", "file_content"], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "Setup Variables and Packages", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "c3608488-0259-5ff4-8b90-11c6e60d6c85", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "settings.py", "templateName": "pyml_settings.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:setup_variables_packages", "schemaVersion": "2022.8.16", "isDefault": false }, "enableRender": true, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", "name": "settings.py", "contextProviders": [{ "name": "MLSettingsDataManager" }], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3" }, { "type": "execution", "name": "Data Input", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "data_input_read_csv_pandas.py", "templateName": "data_input_read_csv_pandas.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:data_input:read_csv:pandas", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", "name": "data_input_read_csv_pandas.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "7fff5212-6c6d-586b-9997-4d4485e09383" }, { "type": "execution", "name": "Train Test Split", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "7fff5212-6c6d-586b-9997-4d4485e09383", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "data_input_train_test_split_sklearn.py", "templateName": "data_input_train_test_split_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:data_input:train_test_split:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "name": "data_input_train_test_split_sklearn.py", "contextProviders": [{ "name": "MLTrainTestSplitDataManager" }], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "799de7dc-9394-571b-8e0d-3ff876a3df02" }, { "type": "execution", "name": "Data Standardize", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "799de7dc-9394-571b-8e0d-3ff876a3df02", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pre_processing_standardization_sklearn.py", "templateName": "pre_processing_standardization_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:pre_processing:standardization:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", "name": "pre_processing_standardization_sklearn.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "8dfc61c3-067d-5ea8-bd26-7296628d707a" }, { "type": "execution", "name": "Model Train and Predict", "head": false, "results": [{ "name": "workflow:pyml_predict" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "8dfc61c3-067d-5ea8-bd26-7296628d707a", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "model_random_forest_classification_sklearn.py", "templateName": "model_random_forest_classification_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "results": ["workflow:pyml_predict"], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:model:random_forest_classification:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "tags": ["remove-all-results", "creates-predictions-csv-during-predict-phase"], "status": "idle", "statusTrack": [], "input": [{ "content": "# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "name": "model_random_forest_classification_sklearn.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "35436b4a-cd9c-5089-ab42-665c4f9ba049" }, { "type": "execution", "name": "ROC Curve Plot", "head": false, "results": [{ "basename": "my_roc_plot.png", "filetype": "image", "name": "file_content" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "35436b4a-cd9c-5089-ab42-665c4f9ba049", "preProcessors": [], "postProcessors": [{ "name": "remove_virtual_environment" }], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "post_processing_roc_curve_sklearn.py", "templateName": "post_processing_roc_curve_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "results": ["file_content"], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:post_processing:roc_curve:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "tags": ["remove-all-results"], "status": "idle", "statusTrack": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "name": "post_processing_roc_curve_sklearn.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "Set Up the Job", "type": "subworkflow", "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", "status": "idle", "statusTrack": [], "flowchartId": "5b51df93-15dd-5440-90fd-a3ffa264b7d8", "tags": [], "head": true, "next": "90738aae-daac-599f-913f-29fb6acdff00" }, { "name": "Machine Learning", "type": "subworkflow", "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", "status": "idle", "statusTrack": [], "flowchartId": "90738aae-daac-599f-913f-29fb6acdff00", "tags": [], "head": false }], "properties": [], "_id": "f447c6df-3b7b-5b8e-a0cc-1a743847ceed", "workflows": [], "isUsingDataset": true, "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "python" } }, "python/ml/regression_workflow.json": { "name": "Python ML Train Regression", "subworkflows": [{ "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", "name": "Set Up the Job", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "name": "Set Workflow Mode", "type": "assignment", "operand": "IS_WORKFLOW_RUNNING_TO_PREDICT", "value": "False", "input": [], "flowchartId": "head-set-predict-status", "tags": ["pyml:workflow-type-setter"], "status": "idle", "statusTrack": [], "head": true, "next": "head-fetch-training-data", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Fetch Dataset", "type": "io", "subtype": "input", "enableRender": true, "flowchartId": "head-fetch-training-data", "input": [{ "basename": "{{DATASET_BASENAME}}", "objectData": { "CONTAINER": "", "NAME": "{{DATASET_FILEPATH}}", "PROVIDER": "", "REGION": "" } }], "source": "object_storage", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "head-branch-on-predict-status", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Train or Predict?", "type": "condition", "input": [{ "name": "IS_WORKFLOW_RUNNING_TO_PREDICT", "scope": "global" }], "results": [], "preProcessors": [], "postProcessors": [], "then": "head-fetch-trained-model", "else": "end-of-ml-train-head", "statement": "IS_WORKFLOW_RUNNING_TO_PREDICT", "maxOccurrences": 100, "flowchartId": "head-branch-on-predict-status", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "head-fetch-trained-model", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Fetch Trained Model as file", "type": "io", "subtype": "input", "enableRender": true, "flowchartId": "head-fetch-trained-model", "input": [{ "basename": "", "objectData": { "CONTAINER": "", "NAME": "", "PROVIDER": "", "REGION": "" } }], "source": "object_storage", "tags": ["set-io-unit-filenames"], "status": "idle", "statusTrack": [], "head": false, "next": "end-of-ml-train-head", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "End Setup", "type": "assignment", "operand": "IS_SETUP_COMPLETE", "value": "True", "input": [], "flowchartId": "end-of-ml-train-head", "status": "idle", "statusTrack": [], "tags": [], "head": false, "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }] }, { "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", "name": "Machine Learning", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": ["workflow:pyml_predict", "file_content"], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "Setup Variables and Packages", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "c3608488-0259-5ff4-8b90-11c6e60d6c85", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "settings.py", "templateName": "pyml_settings.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:setup_variables_packages", "schemaVersion": "2022.8.16", "isDefault": false }, "enableRender": true, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", "name": "settings.py", "contextProviders": [{ "name": "MLSettingsDataManager" }], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3" }, { "type": "execution", "name": "Data Input", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "data_input_read_csv_pandas.py", "templateName": "data_input_read_csv_pandas.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:data_input:read_csv:pandas", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", "name": "data_input_read_csv_pandas.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "7fff5212-6c6d-586b-9997-4d4485e09383" }, { "type": "execution", "name": "Train Test Split", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "7fff5212-6c6d-586b-9997-4d4485e09383", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "data_input_train_test_split_sklearn.py", "templateName": "data_input_train_test_split_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:data_input:train_test_split:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "name": "data_input_train_test_split_sklearn.py", "contextProviders": [{ "name": "MLTrainTestSplitDataManager" }], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "799de7dc-9394-571b-8e0d-3ff876a3df02" }, { "type": "execution", "name": "Data Standardize", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "799de7dc-9394-571b-8e0d-3ff876a3df02", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pre_processing_standardization_sklearn.py", "templateName": "pre_processing_standardization_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:pre_processing:standardization:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", "name": "pre_processing_standardization_sklearn.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "8dfc61c3-067d-5ea8-bd26-7296628d707a" }, { "type": "execution", "name": "Model Train and Predict", "head": false, "results": [{ "name": "workflow:pyml_predict" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "8dfc61c3-067d-5ea8-bd26-7296628d707a", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "model_mlp_sklearn.py", "templateName": "model_mlp_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "results": ["workflow:pyml_predict"], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:model:multilayer_perceptron:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "tags": ["remove-all-results", "creates-predictions-csv-during-predict-phase"], "status": "idle", "statusTrack": [], "input": [{ "content": "# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "name": "model_mlp_sklearn.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "1ca76a49-a3c7-5fa2-b693-538b599ecd7c" }, { "type": "execution", "name": "Parity Plot", "head": false, "results": [{ "basename": "my_parity_plot.png", "filetype": "image", "name": "file_content" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "1ca76a49-a3c7-5fa2-b693-538b599ecd7c", "preProcessors": [], "postProcessors": [{ "name": "remove_virtual_environment" }], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "post_processing_parity_plot_matplotlib.py", "templateName": "post_processing_parity_plot_matplotlib.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "results": ["file_content"], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:post_processing:parity_plot:matplotlib", "schemaVersion": "2022.8.16", "isDefault": false }, "tags": ["remove-all-results"], "status": "idle", "statusTrack": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "name": "post_processing_parity_plot_matplotlib.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "Set Up the Job", "type": "subworkflow", "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", "status": "idle", "statusTrack": [], "flowchartId": "5b51df93-15dd-5440-90fd-a3ffa264b7d8", "tags": [], "head": true, "next": "90738aae-daac-599f-913f-29fb6acdff00" }, { "name": "Machine Learning", "type": "subworkflow", "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", "status": "idle", "statusTrack": [], "flowchartId": "90738aae-daac-599f-913f-29fb6acdff00", "tags": [], "head": false }], "properties": [], "_id": "f447c6df-3b7b-5b8e-a0cc-1a743847ceed", "workflows": [], "isUsingDataset": true, "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "python" } }, "python/python_script.json": { "name": "Python Script", "subworkflows": [{ "_id": "64a079ba-7a12-57b7-ac06-310b2bf8d354", "name": "Python Script", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "python", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "9b8a495e-1ac1-56a7-b2e0-af1b405a1219", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "script.py", "templateName": "hello_world.py" }, { "name": "requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "hello_world", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n", "name": "script.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "Python Script", "type": "subworkflow", "_id": "64a079ba-7a12-57b7-ac06-310b2bf8d354", "status": "idle", "statusTrack": [], "flowchartId": "c50e28b2-a0c5-5324-8b6f-e99b5a546bd8", "tags": [], "head": true }], "properties": [], "_id": "de816646-766b-5f97-b468-0937d4381440", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "python" } }, "shell/batch_espresso_pwscf.json": { "name": "Shell Batch Job (Espresso PWSCF)", "subworkflows": [{ "_id": "f0775c7b-214a-5245-b921-5b4eb53d15a9", "name": "Shell Batch Job (Espresso PWSCF)", "application": { "name": "shell", "shortName": "sh", "summary": "Shell Script", "build": "GNU", "version": "5.1.8", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "shell", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "99304304-e873-5c89-ae83-91e61a7f629c", "preProcessors": [], "postProcessors": [], "application": { "name": "shell", "shortName": "sh", "summary": "Shell Script", "build": "GNU", "version": "5.1.8", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "job_espresso_pw_scf.sh" }], "monitors": ["standard_output"], "applicationName": "shell", "executableName": "sh", "name": "job_espresso_pw_scf", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n", "name": "job_espresso_pw_scf.sh", "contextProviders": [], "applicationName": "shell", "executableName": "sh", "rendered": "#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "Shell Batch Job (Espresso PWSCF)", "type": "subworkflow", "_id": "f0775c7b-214a-5245-b921-5b4eb53d15a9", "status": "idle", "statusTrack": [], "flowchartId": "d884e8f7-7acf-5a03-bc9a-186903bdaa0e", "tags": [], "head": true }], "properties": [], "_id": "e0046fb4-37db-5732-bf81-c48e13081a4c", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "shell" } }, "shell/hello_world.json": { "name": "Shell Script", "subworkflows": [{ "_id": "ce33d4cf-e0d2-5020-854d-9ea1fe5c8512", "name": "Shell Hello World", "application": { "name": "shell", "shortName": "sh", "summary": "Shell Script", "build": "GNU", "version": "5.1.8", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "shell", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "99304304-e873-5c89-ae83-91e61a7f629c", "preProcessors": [], "postProcessors": [], "application": { "name": "shell", "shortName": "sh", "summary": "Shell Script", "build": "GNU", "version": "5.1.8", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "hello_world.sh" }], "monitors": ["standard_output"], "applicationName": "shell", "executableName": "sh", "name": "hello_world", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n", "name": "hello_world.sh", "contextProviders": [], "applicationName": "shell", "executableName": "sh", "rendered": "#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "Shell Hello World", "type": "subworkflow", "_id": "ce33d4cf-e0d2-5020-854d-9ea1fe5c8512", "status": "idle", "statusTrack": [], "flowchartId": "319307c2-bf22-5bf2-b4e9-a4cdf671b786", "tags": [], "head": true }], "properties": [], "_id": "d2fd444c-06b4-5d66-baeb-449c680ae1bf", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "shell" } }, "vasp/band_gap.json": { "name": "Band Gap", "subworkflows": [{ "_id": "e65f2461-5f5c-5a51-8c48-88ad37bff100", "name": "Band Gap", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor", "band_gaps", "fermi_energy"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "paw", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "vasp", "head": true, "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9cb87769-bf20-56bf-a8b3-5a164e3bf541", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "INCAR" }, { "name": "KPOINTS" }, { "name": "POSCAR" }], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }], "next": "f0d65517-9592-5bc8-948e-a0851a766cbb" }, { "type": "execution", "name": "vasp_nscf", "head": false, "results": [{ "name": "band_gaps" }, { "name": "fermi_energy" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "f0d65517-9592-5bc8-948e-a0851a766cbb", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "INCAR", "templateName": "INCAR_BANDS" }, { "name": "KPOINTS", "templateName": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR" }], "results": ["band_gaps", "fermi_energy"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp_nscf", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "Band Gap", "type": "subworkflow", "_id": "e65f2461-5f5c-5a51-8c48-88ad37bff100", "status": "idle", "statusTrack": [], "flowchartId": "db3b83ea-0ef5-594c-89a8-bde38dbc6105", "tags": [], "head": true }], "properties": ["atomic_forces", "band_gaps", "fermi_energy", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "_id": "16ca0232-a570-53d1-a4d3-32bbd6f3f0a2", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "vasp" } }, "vasp/band_structure_dos.json": { "name": "Band Structure + Density of States", "subworkflows": [{ "_id": "d38fea11-9781-5151-8dae-d705381498be", "name": "Band Structure + Density of States", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": ["density_of_states", "total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor", "band_structure"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "paw", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "vasp", "head": true, "results": [{ "name": "density_of_states" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9cb87769-bf20-56bf-a8b3-5a164e3bf541", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "INCAR" }, { "name": "KPOINTS" }, { "name": "POSCAR" }], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }], "next": "1e1de3be-f6e4-513e-afe2-c84e567a8108" }, { "type": "execution", "name": "vasp_bands", "head": false, "results": [{ "name": "band_structure" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "1e1de3be-f6e4-513e-afe2-c84e567a8108", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "INCAR", "templateName": "INCAR_BANDS" }, { "name": "KPOINTS", "templateName": "KPOINTS_BANDS" }, { "name": "POSCAR", "templateName": "" }], "results": ["band_structure"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp_bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", "schemaVersion": "2022.8.16" }, { "content": "kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "Band Structure + Density of States", "type": "subworkflow", "_id": "d38fea11-9781-5151-8dae-d705381498be", "status": "idle", "statusTrack": [], "flowchartId": "8a098bb9-73b1-5e84-bfc7-b783e02d0f53", "tags": [], "head": true }], "properties": ["atomic_forces", "band_structure", "density_of_states", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "_id": "c8338d40-3c6e-5581-b03c-d7fb5cbb8df5", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "vasp" } }, "vasp/band_structure.json": { "name": "Band Structure", "subworkflows": [{ "_id": "cd6e3d59-5544-56ac-878b-fd8716a09768", "name": "Band Structure", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor", "band_structure"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "paw", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "vasp", "head": true, "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9cb87769-bf20-56bf-a8b3-5a164e3bf541", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "INCAR" }, { "name": "KPOINTS" }, { "name": "POSCAR" }], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }], "next": "1e1de3be-f6e4-513e-afe2-c84e567a8108" }, { "type": "execution", "name": "vasp_bands", "head": false, "results": [{ "name": "band_structure" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "1e1de3be-f6e4-513e-afe2-c84e567a8108", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "INCAR", "templateName": "INCAR_BANDS" }, { "name": "KPOINTS", "templateName": "KPOINTS_BANDS" }, { "name": "POSCAR", "templateName": "" }], "results": ["band_structure"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp_bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", "schemaVersion": "2022.8.16" }, { "content": "kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "Band Structure", "type": "subworkflow", "_id": "cd6e3d59-5544-56ac-878b-fd8716a09768", "status": "idle", "statusTrack": [], "flowchartId": "c573187f-a8bb-5084-9fcf-1560bf4a7786", "tags": [], "head": true }], "properties": ["atomic_forces", "band_structure", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "_id": "25b0ad08-87bb-5400-bea4-acd5fe2163c0", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "vasp" } }, "vasp/dos.json": { "name": "Density of States", "subworkflows": [{ "_id": "4897ca33-b023-5a8d-9a5d-9e74df0f00ad", "name": "Density of States", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": ["density_of_states", "total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "paw", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "vasp", "head": true, "results": [{ "name": "density_of_states" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9cb87769-bf20-56bf-a8b3-5a164e3bf541", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "INCAR" }, { "name": "KPOINTS" }, { "name": "POSCAR" }], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "Density of States", "type": "subworkflow", "_id": "4897ca33-b023-5a8d-9a5d-9e74df0f00ad", "status": "idle", "statusTrack": [], "flowchartId": "3e64fdb4-ab5b-52a0-a1d5-51343c49481c", "tags": [], "head": true }], "properties": ["atomic_forces", "density_of_states", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "_id": "629a79fb-a03f-5e34-b2ce-9c735e8ef6c0", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "vasp" } }, "vasp/fixed_cell_relaxation.json": { "name": "Fixed-cell Relaxation", "subworkflows": [{ "_id": "db6cc94b-2f26-5688-ba97-80b11567b549", "name": "Fixed-cell Relaxation", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": ["total_energy", "atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_force", "final_structure"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "paw", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "vasp_relax", "head": true, "results": [{ "name": "total_energy" }, { "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_force" }, { "name": "final_structure" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }, { "name": "convergence_ionic" }], "flowchartId": "2f718a3d-5800-57e2-b707-075c1f1755c6", "preProcessors": [], "postProcessors": [{ "name": "prepare_restart" }], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "INCAR", "templateName": "INCAR_RELAX" }, { "name": "KPOINTS", "templateName": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR" }], "results": ["total_energy", "atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_force", "final_structure"], "monitors": ["standard_output", "convergence_electronic", "convergence_ionic"], "postProcessors": ["prepare_restart"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp_relax", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "Fixed-cell Relaxation", "type": "subworkflow", "_id": "db6cc94b-2f26-5688-ba97-80b11567b549", "status": "idle", "statusTrack": [], "flowchartId": "0de8c4c8-b722-5cd2-ae68-b484262e0a01", "tags": [], "head": true }], "properties": ["atomic_forces", "fermi_energy", "final_structure", "pressure", "stress_tensor", "total_energy", "total_force"], "_id": "cb69418c-2f6c-551d-af81-0cf20ec1113d", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "vasp" } }, "vasp/kpoint_convergence.json": { "name": "K-point Convergence", "subworkflows": [{ "_id": "5d736d84-d616-538f-a09b-81a32ac0777c", "name": "K-point Convergence", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "paw", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "name": "Init tolerance", "type": "assignment", "operand": "TOL", "value": 0.00001, "input": [], "flowchartId": "init-tolerance", "status": "idle", "statusTrack": [], "tags": [], "head": true, "next": "init-increment", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Init increment", "type": "assignment", "operand": "INC", "value": 1, "input": [], "flowchartId": "init-increment", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "init-result", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Init result", "type": "assignment", "operand": "PREV_RESULT", "value": 0, "input": [], "flowchartId": "init-result", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "init-parameter", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Init parameter", "type": "assignment", "operand": "PARAMETER", "value": 1, "input": [], "flowchartId": "init-parameter", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "vasp-kpoint-convergence", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "type": "execution", "name": "vasp_kpt_conv", "head": false, "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "vasp-kpoint-convergence", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "INCAR", "templateName": "INCAR" }, { "name": "KPOINTS", "templateName": "KPOINTS_CONV" }, { "name": "POSCAR", "templateName": "POSCAR" }], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp_kpt_conv", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic Mesh\n0\nGamma\n{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}\n0 0 0\n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }], "next": "store-result" }, { "name": "store result", "type": "assignment", "operand": "RESULT", "value": "total_energy", "input": [{ "name": "total_energy", "scope": "vasp-kpoint-convergence" }], "flowchartId": "store-result", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "check-convergence", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "check convergence", "type": "condition", "input": [], "results": [], "preProcessors": [], "postProcessors": [], "then": "convergence-is-reached", "else": "update-result", "statement": "abs((PREV_RESULT-RESULT)/RESULT) < TOL", "maxOccurrences": 50, "flowchartId": "check-convergence", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "update-result", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "update result", "type": "assignment", "operand": "PREV_RESULT", "value": "RESULT", "input": [{ "name": "RESULT", "scope": "global" }], "flowchartId": "update-result", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "increment-parameter", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "increment parameter", "type": "assignment", "operand": "PREV_RESULT", "value": "PARAMETER+INC", "input": [{ "name": "INC", "scope": "global" }, { "name": "PARAMETER", "scope": "global" }], "flowchartId": "increment-parameter", "next": "vasp-kpoint-convergence", "status": "idle", "statusTrack": [], "tags": [], "head": false, "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "exit", "type": "assignment", "operand": "PARAMETER", "value": "PARAMETER", "input": [{ "name": "PARAMETER", "scope": "global" }], "flowchartId": "convergence-is-reached", "status": "idle", "statusTrack": [], "tags": [], "head": false, "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }] }], "units": [{ "name": "K-point Convergence", "type": "subworkflow", "_id": "5d736d84-d616-538f-a09b-81a32ac0777c", "status": "idle", "statusTrack": [], "flowchartId": "a34eec2c-cdb2-537d-88c0-ed1d7b205879", "tags": [], "head": true }], "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "_id": "fcf105f9-5ae7-5c32-a6b3-e3579cbdf39a", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "vasp" } }, "vasp/neb.json": { "name": "Nudged Elastic Band (NEB)", "subworkflows": [{ "isMultiMaterial": true, "_id": "792e8c42-86ce-5f01-812a-66378ec4f379", "name": "Initial/Final Total Energies", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor", "total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "paw", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "vasp_neb_initial", "head": true, "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "f969f010-9dae-5085-9ac5-86150ef78897", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "INCAR", "templateName": "INCAR_NEB_INITIAL_FINAL" }, { "name": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR_NEB_INITIAL" }], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp_neb_initial", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISTART = 0\nENCUT = 500\nISPIN = 2\n", "name": "INCAR", "contextProviders": [{ "name": "NEBFormDataManager" }, { "name": "VASPNEBInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISTART = 0\nENCUT = 500\nISPIN = 2\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.FIRST_IMAGE }}\n", "name": "POSCAR", "contextProviders": [{ "name": "NEBFormDataManager" }, { "name": "VASPNEBInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }], "next": "e65a17ce-10c8-5710-ad4d-fb3d42434091" }, { "type": "execution", "name": "vasp_neb_final", "head": false, "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "e65a17ce-10c8-5710-ad4d-fb3d42434091", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "INCAR", "templateName": "INCAR_NEB_INITIAL_FINAL" }, { "name": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR_NEB_FINAL" }], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp_neb_final", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISTART = 0\nENCUT = 500\nISPIN = 2\n", "name": "INCAR", "contextProviders": [{ "name": "NEBFormDataManager" }, { "name": "VASPNEBInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISTART = 0\nENCUT = 500\nISPIN = 2\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.LAST_IMAGE }}\n", "name": "POSCAR", "contextProviders": [{ "name": "NEBFormDataManager" }, { "name": "VASPNEBInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }] }] }, { "isMultiMaterial": true, "_id": "c9b7ad2a-5207-5e41-9b66-28474a8921f8", "name": "Prepare Directories", "application": { "name": "shell", "shortName": "sh", "summary": "Shell Script", "build": "GNU", "version": "5.1.8", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "prepare-neb-images", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "dc397ead-54ad-513b-992e-aedd54576409", "preProcessors": [], "postProcessors": [], "application": { "name": "shell", "shortName": "sh", "summary": "Shell Script", "build": "GNU", "version": "5.1.8", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "bash_vasp_prepare_neb_images.sh" }], "monitors": ["standard_output"], "applicationName": "shell", "executableName": "sh", "name": "bash_vasp_prepare_neb_images", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < 00/POSCAR < 01/POSCAR < 0 else 1"},"type":"assignment"},{"config":{"name":"Select Band","operand":"KBAND_VALUE","value":"KBAND_VALUE_BELOW_EF"},"type":"assignment"},{"attributes":{"results":[{"name":"wavefunction_amplitude"}]},"config":{"execName":"pp.x","flavorName":"pp_wfn","flowchartId":"pp-wfn","input":[{"name":"KBAND_VALUE"}],"name":"pp_wfn"},"type":"executionBuilder"}]},"zero_point_energy":{"__path__":"zero_point_energy","application":{"name":"espresso","version":"6.3"},"config":{},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Zero Point Energy","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"type":"executionBuilder"},{"config":{"execName":"ph.x","flavorName":"ph_gamma","name":"ph_zpe"},"type":"executionBuilder"}]}},"nwchem":{"total_energy":{"__path__":"total_energy","application":{"name":"nwchem","version":"7.0.2"},"config":{},"method":{"name":"LocalOrbitalMethod"},"model":{"name":"DFTModel"},"name":"Total Energy","units":[{"config":{"execName":"nwchem","flavorName":"nwchem_total_energy","name":"nwchem_total_energy"},"functions":{"head":true},"type":"executionBuilder"}]}},"python":{"classification_tail":{"__path__":"ml/classification_tail","application":{"name":"python","version":"3.10.13"},"config":{},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Machine Learning","units":[{"attributes":{"enableRender":true},"config":{"execName":"python","flavorName":"pyml:setup_variables_packages","name":"Setup Variables and Packages"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:read_csv:pandas","name":"Data Input"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:train_test_split:sklearn","name":"Train Test Split"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:pre_processing:standardization:sklearn","name":"Data Standardize"},"type":"executionBuilder"},{"attributes":{"results":[{"name":"workflow:pyml_predict"}],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"]},"config":{"execName":"python","flavorName":"pyml:model:random_forest_classification:sklearn","name":"Model Train and Predict"},"type":"executionBuilder"},{"attributes":{"postProcessors":[{"name":"remove_virtual_environment"}],"results":[{"basename":"my_roc_plot.png","filetype":"image","name":"file_content"}],"tags":["remove-all-results"]},"config":{"execName":"python","flavorName":"pyml:post_processing:roc_curve:sklearn","name":"ROC Curve Plot"},"type":"executionBuilder"}]},"clustering_tail":{"__path__":"ml/clustering_tail","application":{"name":"python","version":"3.10.13"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Machine Learning","units":[{"attributes":{"enableRender":true},"config":{"execName":"python","flavorName":"pyml:setup_variables_packages","name":"Setup Variables and Packages"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:read_csv:pandas","name":"Data Input"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:train_test_split:sklearn","name":"Train Test Split"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:pre_processing:standardization:sklearn","name":"Data Standardize"},"type":"executionBuilder"},{"attributes":{"results":[{"name":"workflow:pyml_predict"}],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"]},"config":{"execName":"python","flavorName":"pyml:model:k_means_clustering:sklearn","name":"Model Train and Predict"},"type":"executionBuilder"},{"attributes":{"postProcessors":[{"name":"remove_virtual_environment"}],"results":[{"basename":"train_test_split.png","filetype":"image","name":"file_content"},{"basename":"train_clusters.png","filetype":"image","name":"file_content"},{"basename":"test_clusters.png","filetype":"image","name":"file_content"}],"tags":["remove-all-results"]},"config":{"execName":"python","flavorName":"pyml:post_processing:pca_2d_clusters:matplotlib","name":"2D PCA Clusters Plot"},"type":"executionBuilder"}]},"python_script":{"__path__":"python_script","application":{"name":"python","version":"3.10.13"},"config":{},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Python Script","units":[{"config":{"execName":"python","flavorName":"hello_world","name":"python"},"type":"executionBuilder"}]},"regression_tail":{"__path__":"ml/regression_tail","application":{"name":"python","version":"3.10.13"},"config":{},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Machine Learning","units":[{"attributes":{"enableRender":true},"config":{"execName":"python","flavorName":"pyml:setup_variables_packages","name":"Setup Variables and Packages"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:read_csv:pandas","name":"Data Input"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:train_test_split:sklearn","name":"Train Test Split"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:pre_processing:standardization:sklearn","name":"Data Standardize"},"type":"executionBuilder"},{"attributes":{"results":[{"name":"workflow:pyml_predict"}],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"]},"config":{"execName":"python","flavorName":"pyml:model:multilayer_perceptron:sklearn","name":"Model Train and Predict"},"type":"executionBuilder"},{"attributes":{"postProcessors":[{"name":"remove_virtual_environment"}],"results":[{"basename":"my_parity_plot.png","filetype":"image","name":"file_content"}],"tags":["remove-all-results"]},"config":{"execName":"python","flavorName":"pyml:post_processing:parity_plot:matplotlib","name":"Parity Plot"},"type":"executionBuilder"}]},"train_head":{"__path__":"ml/train_head","application":{"name":"python","version":"3.10.13"},"config":{},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Set Up the Job","units":[{"config":{"flowchartId":"head-set-predict-status","name":"Set Workflow Mode","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","tags":["pyml:workflow-type-setter"],"value":"False"},"type":"assignment"},{"config":{"enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"name":"Fetch Dataset","source":"object_storage"},"type":"io"},{"config":{"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"name":"Train or Predict?","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","then":"head-fetch-trained-model"},"type":"condition"},{"config":{"enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"name":"Fetch Trained Model as file","source":"object_storage","tags":["set-io-unit-filenames"]},"type":"io"},{"config":{"flowchartId":"end-of-ml-train-head","name":"End Setup","operand":"IS_SETUP_COMPLETE","value":"True"},"type":"assignment"}]}},"shell":{"batch_espresso_pwscf":{"__path__":"batch_espresso_pwscf","application":{"name":"shell","version":"5.1.8"},"config":{},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Shell Batch Job (Espresso PWSCF)","units":[{"config":{"execName":"sh","flavorName":"job_espresso_pw_scf","name":"shell"},"type":"executionBuilder"}]},"hello_world":{"__path__":"hello_world","application":{"name":"shell","version":"5.1.8"},"config":{},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Shell Hello World","units":[{"config":{"execName":"sh","flavorName":"hello_world","name":"shell"},"type":"executionBuilder"}]}},"vasp":{"band_gap":{"__path__":"band_gap","application":{"name":"vasp","version":"5.4.4"},"config":{},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Band Gap","units":[{"config":{"execName":"vasp","flavorName":"vasp","name":"vasp"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"execName":"vasp","flavorName":"vasp_nscf","name":"vasp_nscf"},"type":"executionBuilder"}]},"band_structure":{"__path__":"band_structure","application":{"name":"vasp","version":"5.4.4"},"config":{},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Band Structure","units":[{"config":{"execName":"vasp","flavorName":"vasp","name":"vasp"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"execName":"vasp","flavorName":"vasp_bands","name":"vasp_bands"},"type":"executionBuilder"}]},"band_structure_dos":{"__path__":"band_structure_dos","application":{"name":"vasp","version":"5.4.4"},"config":{},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Band Structure + Density of States","units":[{"config":{"execName":"vasp","flavorName":"vasp","name":"vasp"},"functions":{"addResults":["density_of_states"],"head":true},"type":"executionBuilder"},{"config":{"execName":"vasp","flavorName":"vasp_bands","name":"vasp_bands"},"type":"executionBuilder"}]},"dos":{"__path__":"dos","application":{"name":"vasp","version":"5.4.4"},"config":{},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Density of States","units":[{"config":{"execName":"vasp","flavorName":"vasp","name":"vasp"},"functions":{"addResults":["density_of_states"],"head":true},"type":"executionBuilder"}]},"fixed_cell_relaxation":{"__path__":"fixed_cell_relaxation","application":{"name":"vasp","version":"5.4.4"},"config":{},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Fixed-cell Relaxation","units":[{"config":{"execName":"vasp","flavorName":"vasp_relax","name":"vasp_relax"},"functions":{"head":true},"type":"executionBuilder"}]},"initial_final_total_energies":{"__path__":"initial_final_total_energies","application":{"name":"vasp","version":"5.4.4"},"config":{"functions":{"setDefaultCompute":null},"isMultiMaterial":true},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Initial/Final Total Energies","units":[{"config":{"execName":"vasp","flavorName":"vasp_neb_initial","name":"vasp_neb_initial"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"execName":"vasp","flavorName":"vasp_neb_final","name":"vasp_neb_final"},"type":"executionBuilder"}]},"kpoint_convergence":{"__path__":"kpoint_convergence","application":{"name":"vasp","version":"5.4.4"},"config":{},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"K-point Convergence","units":[{"config":{"flowchartId":"init-tolerance","name":"Init tolerance","operand":"TOL","value":0.00001},"type":"assignment"},{"config":{"flowchartId":"init-increment","name":"Init increment","operand":"INC","value":1},"type":"assignment"},{"config":{"flowchartId":"init-result","name":"Init result","operand":"PREV_RESULT","value":0},"type":"assignment"},{"config":{"flowchartId":"init-parameter","name":"Init parameter","operand":"PARAMETER","value":1},"type":"assignment"},{"config":{"execName":"vasp","flavorName":"vasp_kpt_conv","flowchartId":"vasp-kpoint-convergence","name":"vasp_kpt_conv"},"type":"executionBuilder"},{"config":{"flowchartId":"store-result","input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"name":"store result","operand":"RESULT","value":"total_energy"},"type":"assignment"},{"config":{"else":"update-result","flowchartId":"check-convergence","maxOccurrences":50,"name":"check convergence","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","then":"convergence-is-reached"},"type":"condition"},{"config":{"flowchartId":"update-result","input":[{"name":"RESULT","scope":"global"}],"name":"update result","operand":"PREV_RESULT","value":"RESULT"},"type":"assignment"},{"config":{"flowchartId":"increment-parameter","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"name":"increment parameter","next":"vasp-kpoint-convergence","operand":"PREV_RESULT","value":"PARAMETER+INC"},"type":"assignment"},{"config":{"flowchartId":"convergence-is-reached","input":[{"name":"PARAMETER","scope":"global"}],"name":"exit","operand":"PARAMETER","value":"PARAMETER"},"type":"assignment"}]},"neb_subworkflow":{"__path__":"neb_subworkflow","application":{"name":"vasp","version":"5.4.4"},"config":{"isMultiMaterial":true},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Nudged Elastic Band (NEB)","units":[{"config":{"execName":"vasp","flavorName":"vasp_neb","name":"vasp_neb"},"type":"executionBuilder"}]},"prepare_images":{"__path__":"prepare_images","application":{"name":"shell","version":"5.1.8"},"config":{"isMultiMaterial":true},"method":{"name":"Method"},"model":{"name":"Model"},"name":"Prepare Directories","units":[{"config":{"execName":"sh","flavorName":"bash_vasp_prepare_neb_images","name":"prepare-neb-images"},"type":"executionBuilder"}]},"recalculate_bands":{"__path__":"recalculate_bands","application":{"name":"vasp","version":"5.4.4"},"config":{},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Recalculate Bands","units":[{"config":{"execName":"vasp","flavorName":"vasp_bands","name":"vasp_bands"},"functions":{"head":true},"type":"executionBuilder"}]},"surface_energy":{"__path__":"surface_energy","application":{"name":"vasp","version":"5.4.4"},"config":{},"dynamicSubworkflow":{"name":"surfaceEnergy"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Surface Energy","units":[{"config":{"execName":"vasp","flavorName":"vasp_symprec","name":"vasp_symprec"},"functions":{"head":true},"type":"executionBuilder"}]},"total_energy":{"__path__":"total_energy","application":{"name":"vasp","version":"5.4.4"},"config":{},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Total Energy","units":[{"config":{"execName":"vasp","flavorName":"vasp","name":"vasp"},"functions":{"head":true},"type":"executionBuilder"}]},"variable_cell_relaxation":{"__path__":"variable_cell_relaxation","application":{"name":"vasp","version":"5.4.4"},"config":{"systemName":"vasp-variable-cell-relaxation"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Variable-cell Relaxation","tags":["variable-cell_relaxation"],"units":[{"config":{"execName":"vasp","flavorName":"vasp_vc_relax","name":"vasp_vc_relax"},"functions":{"head":true},"type":"executionBuilder"}]},"zero_point_energy":{"__path__":"zero_point_energy","application":{"name":"vasp","version":"5.4.4"},"config":{},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Zero Point Energy","units":[{"config":{"execName":"vasp","flavorName":"vasp_zpe","name":"vasp_zpe"},"functions":{"head":true},"type":"executionBuilder"}]}}},"workflows":{"espresso":{"average_electrostatic_potential":{"__path__":"average_electrostatic_potential","name":"Average Electrostatic Potential","units":[{"name":"average_electrostatic_potential","type":"subworkflow"}]},"band_gap":{"__path__":"band_gap","name":"Band Gap","units":[{"name":"band_gap","type":"subworkflow"}]},"band_gap_dos_hse":{"__path__":"band_gap_dos_hse","name":"Band Gap + DoS - HSE","units":[{"name":"band_gap_hse_dos","type":"subworkflow"}]},"band_structure":{"__path__":"band_structure","name":"Band Structure","units":[{"name":"band_structure","type":"subworkflow"}]},"band_structure_dos":{"__path__":"band_structure_dos","name":"Band Structure + Density of States","units":[{"name":"band_structure_dos","type":"subworkflow"}]},"band_structure_hse":{"__path__":"band_structure_hse","name":"Band Structure - HSE","units":[{"config":{"attributes":{"name":"Preliminary SCF Calculation"}},"name":"pw_scf","type":"subworkflow"},{"name":"espresso_extract_kpoints","type":"subworkflow"},{"config":{"attributes":{"name":"Main HSE Run"}},"name":"band_structure_hse","type":"subworkflow"}]},"band_structure_magn":{"__path__":"band_structure_magn","name":"Bandstructure with spin magnetism - QE","units":[{"config":{"attributes":{"name":"Bandstructure with spin magnetism"}},"name":"band_structure_magn","type":"subworkflow"}]},"band_structure_soc":{"__path__":"band_structure_soc","name":"Bandstructure with SOC - QE","units":[{"config":{"attributes":{"name":"Bandstructure with SOC"}},"name":"band_structure_soc","type":"subworkflow"}]},"dielectric_tensor":{"__path__":"dielectric_tensor","name":"Dielectric Function","units":[{"name":"dielectric_tensor","type":"subworkflow"}]},"dos":{"__path__":"dos","name":"Density of States","units":[{"name":"dos","type":"subworkflow"}]},"electronic_density_mesh":{"__path__":"electronic_density_mesh","name":"Electronic Density Mesh","units":[{"name":"electronic_density_mesh","type":"subworkflow"}]},"esm":{"__path__":"esm","name":"Effective Screening Medium (ESM)","units":[{"name":"esm","type":"subworkflow"}]},"esm_relax":{"__path__":"esm_relax","name":"Effective Screening Medium (ESM) Relax","units":[{"name":"esm_relax","type":"subworkflow"}]},"fixed_cell_relaxation":{"__path__":"fixed_cell_relaxation","name":"Fixed-cell Relaxation","units":[{"name":"fixed_cell_relaxation","type":"subworkflow"}]},"gw_band_structure_band_gap_full_frequency":{"__path__":"gw_band_structure_band_gap_full_frequency","name":"Full Frequency GW Band Structure + Band Gap","units":[{"name":"gw_band_structure_band_gap_full_frequency","type":"subworkflow"}]},"gw_band_structure_band_gap_plasmon_pole":{"__path__":"gw_band_structure_band_gap_plasmon_pole","name":"Plasmon-Pole GW Band Structure + Band Gap","units":[{"name":"gw_band_structure_band_gap_plasmon_pole","type":"subworkflow"}]},"kpoint_convergence":{"__path__":"kpoint_convergence","name":"K-point Convergence","units":[{"name":"kpoint_convergence","type":"subworkflow"}]},"neb":{"__path__":"neb","name":"Nudged Elastic Band (NEB)","units":[{"name":"neb","type":"subworkflow"}]},"phonon_dispersions":{"__path__":"phonon_dispersions","name":"Phonon Dispersions","units":[{"name":"phonon_dispersions","type":"subworkflow"}]},"phonon_dos":{"__path__":"phonon_dos","name":"Phonon Density of States","units":[{"name":"phonon_dos","type":"subworkflow"}]},"phonon_dos_dispersion":{"__path__":"phonon_dos_dispersion","name":"Phonon Density of States + Dispersions","units":[{"name":"phonon_dos_dispersion","type":"subworkflow"}]},"phonon_map":{"__path__":"phonon_map","name":"Phonon Map","units":[{"name":"phononMap","type":"workflow","units":[{"name":"pw_scf","type":"subworkflow"},{"name":"ph_init_qpoints","type":"subworkflow"},{"name":"espresso_xml_get_qpt_irr","type":"subworkflow"}]},{"config":{"functions":{"setDefaultCompute":null},"input":{"name":"Q_POINTS"},"mapUnit":true},"name":"phonon_map_workflow","type":"workflow","units":[{"name":"pre_processor","type":"subworkflow"},{"name":"ph_single_irr_qpt","type":"subworkflow"},{"name":"post_processor","type":"subworkflow"}]},{"name":"phonon_reduce","type":"subworkflow"}]},"recalculate_bands":{"__path__":"recalculate_bands","name":"Recalculate Bands","units":[{"name":"recalculate_bands","type":"subworkflow"}]},"surface_energy":{"__path__":"surface_energy","name":"Surface Energy","units":[{"name":"surface_energy","type":"subworkflow"}]},"total_energy":{"__path__":"total_energy","name":"Total Energy","tags":["default"],"units":[{"name":"total_energy","type":"subworkflow"}]},"valence_band_offset":{"__path__":"valence_band_offset","name":"Valence Band Offset (2D)","units":[{"config":{"attributes":{"name":"BS + Avg ESP (Interface)"}},"name":"average_electrostatic_potential_via_band_structure","type":"subworkflow","unitConfigs":[{"config":{"attributes":{"name":"Set Material Index (Interface)","value":"0"}},"index":0,"type":"assignment"}]},{"config":{"attributes":{"name":"Find ESP Values (Interface)"}},"name":"average_electrostatic_potential_find_minima","type":"subworkflow","unitConfigs":[{"config":{"attributes":{"operand":"AVG_ESP_INTERFACE"}},"index":1,"type":"assignment"}]},{"config":{"attributes":{"name":"BS + Avg ESP (interface left)"}},"name":"average_electrostatic_potential_via_band_structure","type":"subworkflow","unitConfigs":[{"config":{"attributes":{"name":"Set Material Index (Interface left)","value":"1"}},"index":0,"type":"assignment"},{"config":{"attributes":{"flowchartId":"pw-bands-calculate-band-gap-left"}},"index":2,"type":"executionBuilder"},{"config":{"attributes":{"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-left"}]}},"index":3,"type":"assignment"},{"config":{"attributes":{"operand":"VBM_LEFT"}},"index":4,"type":"assignment"},{"config":{"attributes":{"flowchartId":"average-electrostatic-potential-left"}},"index":7,"type":"executionBuilder"},{"config":{"attributes":{"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-left"}]}},"index":8,"type":"assignment"}]},{"config":{"attributes":{"name":"Find ESP Value (Interface left)"}},"name":"average_electrostatic_potential_find_minima","type":"subworkflow","unitConfigs":[{"config":{"attributes":{"flowchartId":"python-find-extrema-left"}},"index":0,"type":"executionBuilder"},{"config":{"attributes":{"input":[{"name":"STDOUT","scope":"python-find-extrema-left"}],"operand":"AVG_ESP_LEFT"}},"index":1,"type":"assignment"}]},{"config":{"attributes":{"name":"BS + Avg ESP (interface right)"}},"name":"average_electrostatic_potential_via_band_structure","type":"subworkflow","unitConfigs":[{"config":{"attributes":{"name":"Set Material Index (Interface right)","value":"2"}},"index":0,"type":"assignment"},{"config":{"attributes":{"flowchartId":"pw-bands-calculate-band-gap-right"}},"index":2,"type":"executionBuilder"},{"config":{"attributes":{"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-right"}]}},"index":3,"type":"assignment"},{"config":{"attributes":{"operand":"VBM_RIGHT"}},"index":4,"type":"assignment"},{"config":{"attributes":{"flowchartId":"average-electrostatic-potential-right"}},"index":7,"type":"executionBuilder"},{"config":{"attributes":{"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-right"}]}},"index":8,"type":"assignment"}]},{"config":{"attributes":{"name":"Find ESP Value (Interface right)"}},"name":"average_electrostatic_potential_find_minima","type":"subworkflow","unitConfigs":[{"config":{"attributes":{"flowchartId":"python-find-extrema-right"}},"index":0,"type":"executionBuilder"},{"config":{"attributes":{"input":[{"name":"STDOUT","scope":"python-find-extrema-right"}],"operand":"AVG_ESP_RIGHT"}},"index":1,"type":"assignment"}]},{"name":"valence_band_offset_calc_from_previous_esp_vbm","type":"subworkflow"}]},"variable_cell_relaxation":{"__path__":"variable_cell_relaxation","name":"Variable-cell Relaxation","tags":["variable-cell_relaxation"],"units":[{"name":"variable_cell_relaxation","type":"subworkflow"}]},"wavefunction_amplitude":{"__path__":"wavefunction_amplitude","name":"Wavefunction Amplitude","properties":["atomic_forces","band_structure","fermi_energy","file_content","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"tags":["wfn","wfn_plot"],"units":[{"name":"wavefunction_amplitude","type":"subworkflow"},{"name":"plot_wavefunction","type":"subworkflow"}]},"zero_point_energy":{"__path__":"zero_point_energy","name":"Zero Point Energy","units":[{"name":"zero_point_energy","type":"subworkflow"}]}},"nwchem":{"total_energy":{"__path__":"total_energy","name":"Total Energy","units":[{"name":"total_energy","type":"subworkflow"}]}},"python":{"classification_workflow":{"__path__":"ml/classification_workflow","config":{"attributes":{"isUsingDataset":true}},"name":"Python ML Train Classification","units":[{"name":"train_head","type":"subworkflow"},{"name":"classification_tail","type":"subworkflow"}]},"clustering_workflow":{"__path__":"ml/clustering_workflow","config":{"attributes":{"isUsingDataset":true}},"name":"Python ML Train Clustering","units":[{"name":"train_head","type":"subworkflow"},{"name":"classification_tail","type":"subworkflow"}]},"python_script":{"__path__":"python_script","name":"Python Script","units":[{"name":"python_script","type":"subworkflow"}]},"regression_workflow":{"__path__":"ml/regression_workflow","config":{"attributes":{"isUsingDataset":true}},"name":"Python ML Train Regression","units":[{"name":"train_head","type":"subworkflow"},{"name":"regression_tail","type":"subworkflow"}]}},"shell":{"batch_espresso_pwscf":{"__path__":"batch_espresso_pwscf","name":"Shell Batch Job (Espresso PWSCF)","units":[{"name":"batch_espresso_pwscf","type":"subworkflow"}]},"hello_world":{"__path__":"hello_world","name":"Shell Script","units":[{"name":"hello_world","type":"subworkflow"}]}},"vasp":{"band_gap":{"__path__":"band_gap","name":"Band Gap","units":[{"name":"band_gap","type":"subworkflow"}]},"band_structure":{"__path__":"band_structure","name":"Band Structure","units":[{"name":"band_structure","type":"subworkflow"}]},"band_structure_dos":{"__path__":"band_structure_dos","name":"Band Structure + Density of States","units":[{"name":"band_structure_dos","type":"subworkflow"}]},"dos":{"__path__":"dos","name":"Density of States","units":[{"name":"dos","type":"subworkflow"}]},"fixed_cell_relaxation":{"__path__":"fixed_cell_relaxation","name":"Fixed-cell Relaxation","units":[{"name":"fixed_cell_relaxation","type":"subworkflow"}]},"kpoint_convergence":{"__path__":"kpoint_convergence","name":"K-point Convergence","units":[{"name":"kpoint_convergence","type":"subworkflow"}]},"neb":{"__path__":"neb","name":"Nudged Elastic Band (NEB)","units":[{"name":"initial_final_total_energies","type":"subworkflow"},{"name":"prepare_images","type":"subworkflow"},{"name":"neb_subworkflow","type":"subworkflow"}]},"recalculate_bands":{"__path__":"recalculate_bands","name":"Recalculate Bands","units":[{"name":"recalculate_bands","type":"subworkflow"}]},"surface_energy":{"__path__":"surface_energy","name":"Surface Energy","units":[{"name":"surface_energy","type":"subworkflow"}]},"total_energy":{"__path__":"total_energy","name":"Total Energy","units":[{"name":"total_energy","type":"subworkflow"}]},"variable_cell_relaxation":{"__path__":"variable_cell_relaxation","name":"Variable-cell Relaxation","tags":["variable-cell_relaxation"],"units":[{"name":"variable_cell_relaxation","type":"subworkflow"}]},"zero_point_energy":{"__path__":"zero_point_energy","name":"Zero Point Energy","units":[{"name":"zero_point_energy","type":"subworkflow"}]}}}} +{ "subworkflows": { "espresso": { "average_electrostatic_potential": { "__path__": "average_electrostatic_potential", "application": { "name": "espresso", "version": "6.3" }, "config": {}, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "Average Electrostatic Potential", "units": [{ "config": { "execName": "pw.x", "flavorName": "pw_scf", "name": "pw_scf" }, "type": "executionBuilder" }, { "config": { "execName": "pp.x", "flavorName": "pp_electrostatic_potential", "name": "Electrostatic Potential (ESP)" }, "type": "executionBuilder" }, { "attributes": { "results": [{ "name": "average_potential_profile" }] }, "config": { "execName": "average.x", "flavorName": "average_potential", "flowchartId": "average-electrostatic-potential", "name": "average ESP" }, "type": "executionBuilder" }] }, "average_electrostatic_potential_find_minima": { "__path__": "average_electrostatic_potential_find_minima", "application": { "name": "python", "version": "3.10.13" }, "config": { "attributes": { "name": "Find ESP Value (Interface right)" } }, "method": { "name": "UnknownMethod" }, "model": { "name": "UnknownModel" }, "name": "Find ESP Value", "units": [{ "config": { "execName": "python", "flavorName": "generic:processing:find_extrema:scipy", "flowchartId": "python-find-extrema-right", "name": "Find Extrema" }, "type": "executionBuilder" }, { "config": { "input": [{ "name": "STDOUT", "scope": "python-find-extrema-right" }], "name": "Set Average ESP Value", "operand": "AVG_ESP_RIGHT", "value": "json.loads(STDOUT)['minima']" }, "type": "assignment" }] }, "average_electrostatic_potential_via_band_structure": { "__path__": "average_electrostatic_potential_via_band_structure", "application": { "name": "espresso", "version": "6.3" }, "config": { "attributes": { "name": "BS + Avg ESP (interface right)" }, "isMultiMaterial": true }, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "Band Structure + average ESP", "units": [{ "config": { "name": "Set Material Index (Interface right)", "operand": "MATERIAL_INDEX", "value": "2" }, "type": "assignment" }, { "config": { "execName": "pw.x", "flavorName": "pw_scf", "name": "pw_scf" }, "type": "executionBuilder" }, { "attributes": { "results": [{ "name": "band_gaps" }] }, "config": { "execName": "pw.x", "flavorName": "pw_bands", "flowchartId": "pw-bands-calculate-band-gap-right", "name": "pw_bands" }, "type": "executionBuilder" }, { "config": { "input": [{ "name": "band_gaps", "scope": "pw-bands-calculate-band-gap-right" }], "name": "Select indirect band gap", "operand": "BAND_GAP_INDIRECT", "value": "[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]" }, "type": "assignment" }, { "config": { "name": "Set Valence Band Maximum", "operand": "VBM_RIGHT", "value": "BAND_GAP_INDIRECT['eigenvalueValence']" }, "type": "assignment" }, { "config": { "execName": "bands.x", "flavorName": "bands", "name": "bands" }, "type": "executionBuilder" }, { "config": { "execName": "pp.x", "flavorName": "pp_electrostatic_potential", "name": "Electrostatic Potential (ESP)" }, "type": "executionBuilder" }, { "config": { "execName": "average.x", "flavorName": "average_potential", "flowchartId": "average-electrostatic-potential-right", "name": "average ESP" }, "type": "executionBuilder" }, { "config": { "input": [{ "name": "average_potential_profile", "scope": "average-electrostatic-potential-right" }], "name": "Set Macroscopically Averaged ESP Data", "operand": "array_from_context", "value": "average_potential_profile['yDataSeries'][1]" }, "type": "assignment" }] }, "band_gap": { "__path__": "band_gap", "application": { "name": "espresso", "version": "6.3" }, "config": {}, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "Band Gap", "units": [{ "config": { "execName": "pw.x", "flavorName": "pw_scf", "name": "pw_scf" }, "functions": { "head": true }, "type": "executionBuilder" }, { "config": { "execName": "pw.x", "flavorName": "pw_nscf", "name": "pw_nscf" }, "type": "executionBuilder" }] }, "band_gap_hse_dos": { "__path__": "band_gap_hse_dos", "application": { "name": "espresso", "version": "6.3" }, "config": {}, "method": { "config": { "subtype": "us", "type": "pseudopotential" }, "name": "PseudopotentialMethod" }, "model": { "config": { "functional": { "name": "hse06", "slug": "hse06" }, "subtype": "hybrid", "type": "dft" }, "name": "DFTModel" }, "name": "HSE Band Gap", "units": [{ "config": { "execName": "pw.x", "flavorName": "pw_scf_hse", "name": "pw_scf_hse" }, "functions": { "head": true }, "type": "executionBuilder" }, { "config": { "execName": "projwfc.x", "flavorName": "projwfc", "name": "projwfc" }, "type": "executionBuilder" }] }, "band_structure": { "__path__": "band_structure", "application": { "name": "espresso", "version": "6.3" }, "config": {}, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "Band Structure", "units": [{ "config": { "execName": "pw.x", "flavorName": "pw_scf", "name": "pw_scf" }, "functions": { "head": true }, "type": "executionBuilder" }, { "config": { "execName": "pw.x", "flavorName": "pw_bands", "name": "pw_bands" }, "type": "executionBuilder" }, { "config": { "execName": "bands.x", "flavorName": "bands", "name": "bands" }, "type": "executionBuilder" }] }, "band_structure_dos": { "__path__": "band_structure_dos", "application": { "name": "espresso", "version": "6.3" }, "config": {}, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "Band Structure + Density of States", "units": [{ "config": { "execName": "pw.x", "flavorName": "pw_scf", "name": "pw_scf" }, "type": "executionBuilder" }, { "config": { "execName": "pw.x", "flavorName": "pw_bands", "name": "pw_bands" }, "type": "executionBuilder" }, { "config": { "execName": "bands.x", "flavorName": "bands", "name": "bands" }, "type": "executionBuilder" }, { "config": { "execName": "pw.x", "flavorName": "pw_nscf", "name": "pw_nscf" }, "type": "executionBuilder" }, { "config": { "execName": "projwfc.x", "flavorName": "projwfc", "name": "projwfc" }, "type": "executionBuilder" }] }, "band_structure_hse": { "__path__": "band_structure_hse", "application": { "name": "espresso", "version": "6.3" }, "config": { "attributes": { "name": "Main HSE Run" } }, "method": { "config": { "subtype": "us", "type": "pseudopotential" }, "name": "PseudopotentialMethod" }, "model": { "config": { "functional": { "name": "hse06", "slug": "hse06" }, "subtype": "hybrid", "type": "dft" }, "name": "DFTModel" }, "name": "Band Structure - HSE", "units": [{ "config": { "execName": "pw.x", "flavorName": "pw_scf_bands_hse", "name": "pw_scf_bands_hse" }, "type": "executionBuilder" }, { "config": { "execName": "bands.x", "flavorName": "bands", "name": "bands" }, "type": "executionBuilder" }] }, "band_structure_magn": { "__path__": "band_structure_magn", "application": { "name": "espresso", "version": "6.3" }, "config": { "attributes": { "name": "Bandstructure with spin magnetism" } }, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "Spin magnetic bandstructure", "units": [{ "config": { "execName": "pw.x", "flavorName": "pw_scf_magn", "name": "pw_scf_magn" }, "functions": { "head": true }, "type": "executionBuilder" }, { "config": { "execName": "pw.x", "flavorName": "pw_bands_magn", "name": "pw_bands_magn" }, "type": "executionBuilder" }, { "config": { "execName": "bands.x", "flavorName": "bands_spin_up", "name": "bands_spin_up" }, "type": "executionBuilder" }, { "config": { "execName": "bands.x", "flavorName": "bands_spin_dn", "name": "bands_spin_dn" }, "type": "executionBuilder" }] }, "band_structure_soc": { "__path__": "band_structure_soc", "application": { "name": "espresso", "version": "6.3" }, "config": { "attributes": { "name": "Bandstructure with SOC" } }, "method": { "config": { "subtype": "nc-fr", "type": "pseudopotential" }, "name": "PseudopotentialMethod", "setSearchText": "nc-fr" }, "model": { "name": "DFTModel" }, "name": "Spin orbit coupling bandstructure", "units": [{ "config": { "execName": "pw.x", "flavorName": "pw_scf_soc", "name": "pw_scf_soc" }, "functions": { "head": true }, "type": "executionBuilder" }, { "config": { "execName": "pw.x", "flavorName": "pw_bands_soc", "name": "pw_bands_soc" }, "type": "executionBuilder" }, { "config": { "execName": "bands.x", "flavorName": "bands", "name": "bands" }, "type": "executionBuilder" }] }, "dielectric_tensor": { "__path__": "dielectric_tensor", "application": { "name": "espresso", "version": "6.3" }, "config": {}, "method": { "config": { "data": {}, "subtype": "nc", "type": "pseudopotential" }, "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "Compute Dielectric Function", "units": [{ "config": { "execName": "pw.x", "flavorName": "pw_scf", "name": "pw_scf" }, "functions": { "head": true }, "type": "executionBuilder" }, { "config": { "name": "Set No-Symmetry Flag", "operand": "NO_SYMMETRY_NO_INVERSION", "value": true }, "type": "assignment" }, { "config": { "execName": "pw.x", "flavorName": "pw_nscf", "name": "pw_nscf" }, "type": "executionBuilder" }, { "config": { "execName": "epsilon.x", "flavorName": "dielectric_tensor", "name": "Compute dielectric function" }, "type": "executionBuilder" }] }, "dos": { "__path__": "dos", "application": { "name": "espresso", "version": "6.3" }, "config": {}, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "Density of States", "units": [{ "config": { "execName": "pw.x", "flavorName": "pw_scf", "name": "pw_scf" }, "type": "executionBuilder" }, { "config": { "execName": "pw.x", "flavorName": "pw_nscf", "name": "pw_nscf" }, "type": "executionBuilder" }, { "config": { "execName": "projwfc.x", "flavorName": "projwfc", "name": "projwfc" }, "type": "executionBuilder" }] }, "electronic_density_mesh": { "__path__": "electronic_density_mesh", "application": { "name": "espresso", "version": "6.3" }, "config": {}, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "Electronic Density Mesh", "units": [{ "config": { "execName": "pw.x", "flavorName": "pw_scf", "name": "pw_scf" }, "type": "executionBuilder" }, { "config": { "execName": "pp.x", "flavorName": "pp_density", "name": "pp_density" }, "type": "executionBuilder" }] }, "esm": { "__path__": "esm", "application": { "name": "espresso", "version": "6.3" }, "config": {}, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "Effective Screening Medium (ESM)", "units": [{ "config": { "execName": "pw.x", "flavorName": "pw_esm", "name": "pw_esm" }, "type": "executionBuilder" }] }, "esm_relax": { "__path__": "esm_relax", "application": { "name": "espresso", "version": "6.3" }, "config": {}, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "Effective Screening Medium (ESM) Relax", "units": [{ "config": { "execName": "pw.x", "flavorName": "pw_esm_relax", "name": "pw_esm_relax" }, "type": "executionBuilder" }] }, "espresso_extract_kpoints": { "__path__": "espresso_extract_kpoints", "application": { "name": "python", "version": "3.10.13" }, "config": {}, "method": { "name": "UnknownMethod" }, "model": { "name": "UnknownModel" }, "name": "Extract KPOINTS", "units": [{ "config": { "execName": "python", "flavorName": "espresso_extract_kpoints", "name": "Extract kpoints" }, "type": "executionBuilder" }] }, "espresso_xml_get_qpt_irr": { "__path__": "espresso_xml_get_qpt_irr", "application": { "name": "python", "version": "3.10.13" }, "config": {}, "dynamicSubworkflow": { "name": "getQpointIrrep", "subfolder": "espresso" }, "method": { "name": "UnknownMethod" }, "model": { "name": "UnknownModel" }, "name": "espresso-xml-get-qpt-irr", "units": [] }, "fixed_cell_relaxation": { "__path__": "fixed_cell_relaxation", "application": { "name": "espresso", "version": "6.3" }, "config": {}, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "Fixed-cell Relaxation", "units": [{ "config": { "execName": "pw.x", "flavorName": "pw_relax", "name": "pw_relax" }, "functions": { "head": true }, "type": "executionBuilder" }] }, "gw_band_structure_band_gap_full_frequency": { "__path__": "gw_band_structure_band_gap_full_frequency", "application": { "name": "espresso", "version": "6.3" }, "config": {}, "method": { "name": "PseudopotentialMethod", "setSearchText": ".*dojo-oncv.*" }, "model": { "name": "DFTModel" }, "name": "Full Frequency GW Band Structure + Band Gap", "units": [{ "config": { "execName": "pw.x", "flavorName": "pw_scf", "name": "pw_scf" }, "functions": { "head": true }, "type": "executionBuilder" }, { "config": { "execName": "gw.x", "flavorName": "gw_bands_full_frequency", "name": "gw_bands_full_frequency" }, "type": "executionBuilder" }] }, "gw_band_structure_band_gap_plasmon_pole": { "__path__": "gw_band_structure_band_gap_plasmon_pole", "application": { "name": "espresso", "version": "6.3" }, "config": {}, "method": { "name": "PseudopotentialMethod", "setSearchText": ".*dojo-oncv.*" }, "model": { "name": "DFTModel" }, "name": "Plasmon-Pole GW Band Structure + Band Gap", "units": [{ "config": { "execName": "pw.x", "flavorName": "pw_scf", "name": "pw_scf" }, "functions": { "head": true }, "type": "executionBuilder" }, { "config": { "execName": "gw.x", "flavorName": "gw_bands_plasmon_pole", "name": "gw_bands_plasmon_pole" }, "type": "executionBuilder" }] }, "kpoint_convergence": { "__path__": "kpoint_convergence", "application": { "name": "espresso", "version": "6.3" }, "config": {}, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "K-point Convergence", "units": [{ "config": { "flowchartId": "init-tolerance", "name": "Init tolerance", "operand": "TOL", "value": 0.00001 }, "type": "assignment" }, { "config": { "flowchartId": "init-increment", "name": "Init increment", "operand": "INC", "value": 1 }, "type": "assignment" }, { "config": { "flowchartId": "init-result", "name": "Init result", "operand": "PREV_RESULT", "value": 0 }, "type": "assignment" }, { "config": { "flowchartId": "init-parameter", "name": "Init parameter", "operand": "PARAMETER", "value": 1 }, "type": "assignment" }, { "config": { "execName": "pw.x", "flavorName": "pw_scf_kpt_conv", "flowchartId": "pwscf-kpoint-convergence", "name": "pw_scf_kpt_conv" }, "type": "executionBuilder" }, { "config": { "flowchartId": "store-result", "input": [{ "name": "total_energy", "scope": "pwscf-kpoint-convergence" }], "name": "store result", "operand": "RESULT", "value": "total_energy" }, "type": "assignment" }, { "config": { "else": "update-result", "flowchartId": "check-convergence", "maxOccurrences": 50, "name": "check convergence", "statement": "abs((PREV_RESULT-RESULT)/RESULT) < TOL", "then": "convergence-is-reached" }, "type": "condition" }, { "config": { "flowchartId": "update-result", "input": [{ "name": "RESULT", "scope": "global" }], "name": "update result", "operand": "PREV_RESULT", "value": "RESULT" }, "type": "assignment" }, { "config": { "flowchartId": "increment-parameter", "input": [{ "name": "INC", "scope": "global" }, { "name": "PARAMETER", "scope": "global" }], "name": "increment parameter", "next": "pwscf-kpoint-convergence", "operand": "PREV_RESULT", "value": "PARAMETER+INC" }, "type": "assignment" }, { "config": { "flowchartId": "convergence-is-reached", "input": [{ "name": "PARAMETER", "scope": "global" }], "name": "exit", "operand": "PARAMETER", "value": "PARAMETER" }, "type": "assignment" }] }, "neb": { "__path__": "neb", "application": { "name": "espresso", "version": "6.3" }, "config": { "isMultiMaterial": true }, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "Nudged Elastic Band (NEB)", "units": [{ "config": { "execName": "neb.x", "flavorName": "neb", "name": "neb" }, "type": "executionBuilder" }] }, "ph_init_qpoints": { "__path__": "ph_init_qpoints", "application": { "name": "espresso", "version": "6.3" }, "config": {}, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "ph-init-qpoints", "units": [{ "config": { "execName": "ph.x", "flavorName": "ph_init_qpoints", "name": "ph_init_qpoints" }, "type": "executionBuilder" }] }, "ph_single_irr_qpt": { "__path__": "ph_single_irr_qpt", "application": { "name": "espresso", "version": "6.3" }, "config": {}, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "ph-single-irr-qpt", "units": [{ "config": { "execName": "ph.x", "flavorName": "ph_single_irr_qpt", "name": "ph_single_irr_qpt" }, "type": "executionBuilder" }] }, "phonon_dispersions": { "__path__": "phonon_dispersions", "application": { "name": "espresso", "version": "6.3" }, "config": {}, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "Phonon Dispersions", "units": [{ "config": { "execName": "pw.x", "flavorName": "pw_scf", "name": "pw_scf" }, "type": "executionBuilder" }, { "config": { "execName": "ph.x", "flavorName": "ph_grid", "name": "ph_grid" }, "type": "executionBuilder" }, { "config": { "execName": "q2r.x", "flavorName": "q2r", "name": "q2r" }, "type": "executionBuilder" }, { "config": { "execName": "matdyn.x", "flavorName": "matdyn_path", "name": "matdyn_path" }, "type": "executionBuilder" }] }, "phonon_dos": { "__path__": "phonon_dos", "application": { "name": "espresso", "version": "6.3" }, "config": {}, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "Phonon Density of States", "units": [{ "config": { "execName": "pw.x", "flavorName": "pw_scf", "name": "pw_scf" }, "type": "executionBuilder" }, { "config": { "execName": "ph.x", "flavorName": "ph_grid", "name": "ph_grid" }, "type": "executionBuilder" }, { "config": { "execName": "q2r.x", "flavorName": "q2r", "name": "q2r" }, "type": "executionBuilder" }, { "config": { "execName": "matdyn.x", "flavorName": "matdyn_grid", "name": "matdyn_grid" }, "type": "executionBuilder" }] }, "phonon_dos_dispersion": { "__path__": "phonon_dos_dispersion", "application": { "name": "espresso", "version": "6.3" }, "config": {}, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "Phonon Density of States + Dispersions", "units": [{ "config": { "execName": "pw.x", "flavorName": "pw_scf", "name": "pw_scf" }, "type": "executionBuilder" }, { "config": { "execName": "ph.x", "flavorName": "ph_grid", "name": "ph_grid" }, "type": "executionBuilder" }, { "config": { "execName": "q2r.x", "flavorName": "q2r", "name": "q2r" }, "type": "executionBuilder" }, { "config": { "execName": "matdyn.x", "flavorName": "matdyn_grid", "name": "matdyn_grid" }, "type": "executionBuilder" }, { "config": { "execName": "matdyn.x", "flavorName": "matdyn_path", "name": "matdyn_path" }, "type": "executionBuilder" }] }, "phonon_reduce": { "__path__": "phonon_reduce", "application": { "name": "espresso", "version": "6.3" }, "config": {}, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "reduce", "units": [{ "config": { "execName": "ph.x", "flavorName": "ph_grid_restart", "name": "ph_grid_restart" }, "type": "executionBuilder" }, { "config": { "execName": "q2r.x", "flavorName": "q2r", "name": "q2r" }, "type": "executionBuilder" }, { "config": { "execName": "matdyn.x", "flavorName": "matdyn_grid", "name": "matdyn_grid" }, "type": "executionBuilder" }, { "config": { "execName": "matdyn.x", "flavorName": "matdyn_path", "name": "matdyn_path" }, "type": "executionBuilder" }] }, "post_processor": { "__path__": "post_processor", "application": { "name": "shell", "version": "5.1.8" }, "config": {}, "method": { "name": "UnknownMethod" }, "model": { "name": "UnknownModel" }, "name": "post-processor", "units": [{ "config": { "execName": "sh", "flavorName": "espresso_collect_dynmat", "name": "shell" }, "type": "executionBuilder" }] }, "pre_processor": { "__path__": "pre_processor", "application": { "name": "shell", "version": "5.1.8" }, "config": {}, "method": { "name": "UnknownMethod" }, "model": { "name": "UnknownModel" }, "name": "pre-processor", "units": [{ "config": { "execName": "sh", "flavorName": "espresso_link_outdir_save", "name": "shell" }, "type": "executionBuilder" }] }, "pw_scf": { "__path__": "pw_scf", "application": { "name": "espresso", "version": "6.3" }, "config": { "attributes": { "name": "Preliminary SCF Calculation" } }, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "pw-scf", "units": [{ "config": { "execName": "pw.x", "flavorName": "pw_scf", "name": "pw_scf" }, "functions": { "head": true }, "type": "executionBuilder" }] }, "recalculate_bands": { "__path__": "recalculate_bands", "application": { "name": "espresso", "version": "6.3" }, "config": {}, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "Recalculate Bands", "units": [{ "config": { "execName": "pw.x", "flavorName": "pw_bands", "name": "pw_bands" }, "type": "executionBuilder" }, { "config": { "execName": "bands.x", "flavorName": "bands", "name": "bands" }, "type": "executionBuilder" }] }, "surface_energy": { "__path__": "surface_energy", "application": { "name": "espresso", "version": "6.3" }, "config": {}, "dynamicSubworkflow": { "name": "surfaceEnergy" }, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "Surface Energy", "units": [{ "config": { "execName": "pw.x", "flavorName": "pw_scf", "name": "pw_scf" }, "type": "executionBuilder" }] }, "total_energy": { "__path__": "total_energy", "application": { "name": "espresso", "version": "6.3" }, "config": {}, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "Total Energy", "tags": ["default"], "units": [{ "config": { "execName": "pw.x", "flavorName": "pw_scf", "name": "pw_scf" }, "functions": { "head": true }, "type": "executionBuilder" }] }, "valence_band_offset_calc_from_previous_esp_vbm": { "__path__": "valence_band_offset_calc_from_previous_esp_vbm", "application": { "name": "python", "version": "3.10.13" }, "config": {}, "method": { "name": "UnknownMethod" }, "model": { "name": "UnknownModel" }, "name": "Calculate VBO", "units": [{ "config": { "name": "Difference of valence band maxima", "operand": "VBM_DIFF", "value": "VBM_LEFT - VBM_RIGHT" }, "type": "assignment" }, { "config": { "name": "Difference of macroscopically averaged ESP in bulk", "operand": "AVG_ESP_DIFF", "value": "AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]" }, "type": "assignment" }, { "config": { "name": "Lineup of macroscopically averaged ESP in interface", "operand": "ESP_LINEUP", "value": "np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])" }, "type": "assignment" }, { "config": { "name": "Valence Band Offset", "operand": "VALENCE_BAND_OFFSET", "results": [{ "name": "valence_band_offset" }], "value": "abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))" }, "type": "assignment" }] }, "variable_cell_relaxation": { "__path__": "variable_cell_relaxation", "application": { "name": "espresso", "version": "6.3" }, "config": { "systemName": "espresso-variable-cell-relaxation" }, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "Variable-cell Relaxation", "tags": ["variable-cell_relaxation"], "units": [{ "config": { "execName": "pw.x", "flavorName": "pw_vc-relax", "name": "pw_vc-relax" }, "functions": { "head": true }, "type": "executionBuilder" }] }, "zero_point_energy": { "__path__": "zero_point_energy", "application": { "name": "espresso", "version": "6.3" }, "config": {}, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "Zero Point Energy", "units": [{ "config": { "execName": "pw.x", "flavorName": "pw_scf", "name": "pw_scf" }, "type": "executionBuilder" }, { "config": { "execName": "ph.x", "flavorName": "ph_gamma", "name": "ph_zpe" }, "type": "executionBuilder" }] } }, "nwchem": { "total_energy": { "__path__": "total_energy", "application": { "name": "nwchem", "version": "7.0.2" }, "config": {}, "method": { "name": "LocalOrbitalMethod" }, "model": { "name": "DFTModel" }, "name": "Total Energy", "units": [{ "config": { "execName": "nwchem", "flavorName": "nwchem_total_energy", "name": "nwchem_total_energy" }, "functions": { "head": true }, "type": "executionBuilder" }] } }, "python": { "classification_tail": { "__path__": "ml/classification_tail", "application": { "name": "python", "version": "3.10.13" }, "config": {}, "method": { "name": "UnknownMethod" }, "model": { "name": "UnknownModel" }, "name": "Machine Learning", "units": [{ "attributes": { "enableRender": true }, "config": { "execName": "python", "flavorName": "pyml:setup_variables_packages", "name": "Setup Variables and Packages" }, "type": "executionBuilder" }, { "config": { "execName": "python", "flavorName": "pyml:data_input:read_csv:pandas", "name": "Data Input" }, "type": "executionBuilder" }, { "config": { "execName": "python", "flavorName": "pyml:data_input:train_test_split:sklearn", "name": "Train Test Split" }, "type": "executionBuilder" }, { "config": { "execName": "python", "flavorName": "pyml:pre_processing:standardization:sklearn", "name": "Data Standardize" }, "type": "executionBuilder" }, { "attributes": { "results": [{ "name": "workflow:pyml_predict" }], "tags": ["remove-all-results", "creates-predictions-csv-during-predict-phase"] }, "config": { "execName": "python", "flavorName": "pyml:model:random_forest_classification:sklearn", "name": "Model Train and Predict" }, "type": "executionBuilder" }, { "attributes": { "postProcessors": [{ "name": "remove_virtual_environment" }], "results": [{ "basename": "my_roc_plot.png", "filetype": "image", "name": "file_content" }], "tags": ["remove-all-results"] }, "config": { "execName": "python", "flavorName": "pyml:post_processing:roc_curve:sklearn", "name": "ROC Curve Plot" }, "type": "executionBuilder" }] }, "clustering_tail": { "__path__": "ml/clustering_tail", "application": { "name": "python", "version": "3.10.13" }, "method": { "name": "UnknownMethod" }, "model": { "name": "UnknownModel" }, "name": "Machine Learning", "units": [{ "attributes": { "enableRender": true }, "config": { "execName": "python", "flavorName": "pyml:setup_variables_packages", "name": "Setup Variables and Packages" }, "type": "executionBuilder" }, { "config": { "execName": "python", "flavorName": "pyml:data_input:read_csv:pandas", "name": "Data Input" }, "type": "executionBuilder" }, { "config": { "execName": "python", "flavorName": "pyml:data_input:train_test_split:sklearn", "name": "Train Test Split" }, "type": "executionBuilder" }, { "config": { "execName": "python", "flavorName": "pyml:pre_processing:standardization:sklearn", "name": "Data Standardize" }, "type": "executionBuilder" }, { "attributes": { "results": [{ "name": "workflow:pyml_predict" }], "tags": ["remove-all-results", "creates-predictions-csv-during-predict-phase"] }, "config": { "execName": "python", "flavorName": "pyml:model:k_means_clustering:sklearn", "name": "Model Train and Predict" }, "type": "executionBuilder" }, { "attributes": { "postProcessors": [{ "name": "remove_virtual_environment" }], "results": [{ "basename": "train_test_split.png", "filetype": "image", "name": "file_content" }, { "basename": "train_clusters.png", "filetype": "image", "name": "file_content" }, { "basename": "test_clusters.png", "filetype": "image", "name": "file_content" }], "tags": ["remove-all-results"] }, "config": { "execName": "python", "flavorName": "pyml:post_processing:pca_2d_clusters:matplotlib", "name": "2D PCA Clusters Plot" }, "type": "executionBuilder" }] }, "python_script": { "__path__": "python_script", "application": { "name": "python", "version": "3.10.13" }, "config": {}, "method": { "name": "UnknownMethod" }, "model": { "name": "UnknownModel" }, "name": "Python Script", "units": [{ "config": { "execName": "python", "flavorName": "hello_world", "name": "python" }, "type": "executionBuilder" }] }, "regression_tail": { "__path__": "ml/regression_tail", "application": { "name": "python", "version": "3.10.13" }, "config": {}, "method": { "name": "UnknownMethod" }, "model": { "name": "UnknownModel" }, "name": "Machine Learning", "units": [{ "attributes": { "enableRender": true }, "config": { "execName": "python", "flavorName": "pyml:setup_variables_packages", "name": "Setup Variables and Packages" }, "type": "executionBuilder" }, { "config": { "execName": "python", "flavorName": "pyml:data_input:read_csv:pandas", "name": "Data Input" }, "type": "executionBuilder" }, { "config": { "execName": "python", "flavorName": "pyml:data_input:train_test_split:sklearn", "name": "Train Test Split" }, "type": "executionBuilder" }, { "config": { "execName": "python", "flavorName": "pyml:pre_processing:standardization:sklearn", "name": "Data Standardize" }, "type": "executionBuilder" }, { "attributes": { "results": [{ "name": "workflow:pyml_predict" }], "tags": ["remove-all-results", "creates-predictions-csv-during-predict-phase"] }, "config": { "execName": "python", "flavorName": "pyml:model:multilayer_perceptron:sklearn", "name": "Model Train and Predict" }, "type": "executionBuilder" }, { "attributes": { "postProcessors": [{ "name": "remove_virtual_environment" }], "results": [{ "basename": "my_parity_plot.png", "filetype": "image", "name": "file_content" }], "tags": ["remove-all-results"] }, "config": { "execName": "python", "flavorName": "pyml:post_processing:parity_plot:matplotlib", "name": "Parity Plot" }, "type": "executionBuilder" }] }, "train_head": { "__path__": "ml/train_head", "application": { "name": "python", "version": "3.10.13" }, "config": {}, "method": { "name": "UnknownMethod" }, "model": { "name": "UnknownModel" }, "name": "Set Up the Job", "units": [{ "config": { "flowchartId": "head-set-predict-status", "name": "Set Workflow Mode", "operand": "IS_WORKFLOW_RUNNING_TO_PREDICT", "tags": ["pyml:workflow-type-setter"], "value": "False" }, "type": "assignment" }, { "config": { "enableRender": true, "flowchartId": "head-fetch-training-data", "input": [{ "basename": "{{DATASET_BASENAME}}", "objectData": { "CONTAINER": "", "NAME": "{{DATASET_FILEPATH}}", "PROVIDER": "", "REGION": "" } }], "name": "Fetch Dataset", "source": "object_storage" }, "type": "io" }, { "config": { "else": "end-of-ml-train-head", "flowchartId": "head-branch-on-predict-status", "input": [{ "name": "IS_WORKFLOW_RUNNING_TO_PREDICT", "scope": "global" }], "name": "Train or Predict?", "statement": "IS_WORKFLOW_RUNNING_TO_PREDICT", "then": "head-fetch-trained-model" }, "type": "condition" }, { "config": { "enableRender": true, "flowchartId": "head-fetch-trained-model", "input": [{ "basename": "", "objectData": { "CONTAINER": "", "NAME": "", "PROVIDER": "", "REGION": "" } }], "name": "Fetch Trained Model as file", "source": "object_storage", "tags": ["set-io-unit-filenames"] }, "type": "io" }, { "config": { "flowchartId": "end-of-ml-train-head", "name": "End Setup", "operand": "IS_SETUP_COMPLETE", "value": "True" }, "type": "assignment" }] } }, "shell": { "batch_espresso_pwscf": { "__path__": "batch_espresso_pwscf", "application": { "name": "shell", "version": "5.1.8" }, "config": {}, "method": { "name": "UnknownMethod" }, "model": { "name": "UnknownModel" }, "name": "Shell Batch Job (Espresso PWSCF)", "units": [{ "config": { "execName": "sh", "flavorName": "job_espresso_pw_scf", "name": "shell" }, "type": "executionBuilder" }] }, "hello_world": { "__path__": "hello_world", "application": { "name": "shell", "version": "5.1.8" }, "config": {}, "method": { "name": "UnknownMethod" }, "model": { "name": "UnknownModel" }, "name": "Shell Hello World", "units": [{ "config": { "execName": "sh", "flavorName": "hello_world", "name": "shell" }, "type": "executionBuilder" }] } }, "vasp": { "band_gap": { "__path__": "band_gap", "application": { "name": "vasp", "version": "5.4.4" }, "config": {}, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "Band Gap", "units": [{ "config": { "execName": "vasp", "flavorName": "vasp", "name": "vasp" }, "functions": { "head": true }, "type": "executionBuilder" }, { "config": { "execName": "vasp", "flavorName": "vasp_nscf", "name": "vasp_nscf" }, "type": "executionBuilder" }] }, "band_structure": { "__path__": "band_structure", "application": { "name": "vasp", "version": "5.4.4" }, "config": {}, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "Band Structure", "units": [{ "config": { "execName": "vasp", "flavorName": "vasp", "name": "vasp" }, "functions": { "head": true }, "type": "executionBuilder" }, { "config": { "execName": "vasp", "flavorName": "vasp_bands", "name": "vasp_bands" }, "type": "executionBuilder" }] }, "band_structure_dos": { "__path__": "band_structure_dos", "application": { "name": "vasp", "version": "5.4.4" }, "config": {}, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "Band Structure + Density of States", "units": [{ "config": { "execName": "vasp", "flavorName": "vasp", "name": "vasp" }, "functions": { "addResults": ["density_of_states"], "head": true }, "type": "executionBuilder" }, { "config": { "execName": "vasp", "flavorName": "vasp_bands", "name": "vasp_bands" }, "type": "executionBuilder" }] }, "dos": { "__path__": "dos", "application": { "name": "vasp", "version": "5.4.4" }, "config": {}, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "Density of States", "units": [{ "config": { "execName": "vasp", "flavorName": "vasp", "name": "vasp" }, "functions": { "addResults": ["density_of_states"], "head": true }, "type": "executionBuilder" }] }, "fixed_cell_relaxation": { "__path__": "fixed_cell_relaxation", "application": { "name": "vasp", "version": "5.4.4" }, "config": {}, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "Fixed-cell Relaxation", "units": [{ "config": { "execName": "vasp", "flavorName": "vasp_relax", "name": "vasp_relax" }, "functions": { "head": true }, "type": "executionBuilder" }] }, "initial_final_total_energies": { "__path__": "initial_final_total_energies", "application": { "name": "vasp", "version": "5.4.4" }, "config": { "functions": { "setDefaultCompute": null }, "isMultiMaterial": true }, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "Initial/Final Total Energies", "units": [{ "config": { "execName": "vasp", "flavorName": "vasp_neb_initial", "name": "vasp_neb_initial" }, "functions": { "head": true }, "type": "executionBuilder" }, { "config": { "execName": "vasp", "flavorName": "vasp_neb_final", "name": "vasp_neb_final" }, "type": "executionBuilder" }] }, "kpoint_convergence": { "__path__": "kpoint_convergence", "application": { "name": "vasp", "version": "5.4.4" }, "config": {}, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "K-point Convergence", "units": [{ "config": { "flowchartId": "init-tolerance", "name": "Init tolerance", "operand": "TOL", "value": 0.00001 }, "type": "assignment" }, { "config": { "flowchartId": "init-increment", "name": "Init increment", "operand": "INC", "value": 1 }, "type": "assignment" }, { "config": { "flowchartId": "init-result", "name": "Init result", "operand": "PREV_RESULT", "value": 0 }, "type": "assignment" }, { "config": { "flowchartId": "init-parameter", "name": "Init parameter", "operand": "PARAMETER", "value": 1 }, "type": "assignment" }, { "config": { "execName": "vasp", "flavorName": "vasp_kpt_conv", "flowchartId": "vasp-kpoint-convergence", "name": "vasp_kpt_conv" }, "type": "executionBuilder" }, { "config": { "flowchartId": "store-result", "input": [{ "name": "total_energy", "scope": "vasp-kpoint-convergence" }], "name": "store result", "operand": "RESULT", "value": "total_energy" }, "type": "assignment" }, { "config": { "else": "update-result", "flowchartId": "check-convergence", "maxOccurrences": 50, "name": "check convergence", "statement": "abs((PREV_RESULT-RESULT)/RESULT) < TOL", "then": "convergence-is-reached" }, "type": "condition" }, { "config": { "flowchartId": "update-result", "input": [{ "name": "RESULT", "scope": "global" }], "name": "update result", "operand": "PREV_RESULT", "value": "RESULT" }, "type": "assignment" }, { "config": { "flowchartId": "increment-parameter", "input": [{ "name": "INC", "scope": "global" }, { "name": "PARAMETER", "scope": "global" }], "name": "increment parameter", "next": "vasp-kpoint-convergence", "operand": "PREV_RESULT", "value": "PARAMETER+INC" }, "type": "assignment" }, { "config": { "flowchartId": "convergence-is-reached", "input": [{ "name": "PARAMETER", "scope": "global" }], "name": "exit", "operand": "PARAMETER", "value": "PARAMETER" }, "type": "assignment" }] }, "neb_subworkflow": { "__path__": "neb_subworkflow", "application": { "name": "vasp", "version": "5.4.4" }, "config": { "isMultiMaterial": true }, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "Nudged Elastic Band (NEB)", "units": [{ "config": { "execName": "vasp", "flavorName": "vasp_neb", "name": "vasp_neb" }, "type": "executionBuilder" }] }, "prepare_images": { "__path__": "prepare_images", "application": { "name": "shell", "version": "5.1.8" }, "config": { "isMultiMaterial": true }, "method": { "name": "Method" }, "model": { "name": "Model" }, "name": "Prepare Directories", "units": [{ "config": { "execName": "sh", "flavorName": "bash_vasp_prepare_neb_images", "name": "prepare-neb-images" }, "type": "executionBuilder" }] }, "recalculate_bands": { "__path__": "recalculate_bands", "application": { "name": "vasp", "version": "5.4.4" }, "config": {}, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "Recalculate Bands", "units": [{ "config": { "execName": "vasp", "flavorName": "vasp_bands", "name": "vasp_bands" }, "functions": { "head": true }, "type": "executionBuilder" }] }, "surface_energy": { "__path__": "surface_energy", "application": { "name": "vasp", "version": "5.4.4" }, "config": {}, "dynamicSubworkflow": { "name": "surfaceEnergy" }, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "Surface Energy", "units": [{ "config": { "execName": "vasp", "flavorName": "vasp_symprec", "name": "vasp_symprec" }, "functions": { "head": true }, "type": "executionBuilder" }] }, "total_energy": { "__path__": "total_energy", "application": { "name": "vasp", "version": "5.4.4" }, "config": {}, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "Total Energy", "units": [{ "config": { "execName": "vasp", "flavorName": "vasp", "name": "vasp" }, "functions": { "head": true }, "type": "executionBuilder" }] }, "variable_cell_relaxation": { "__path__": "variable_cell_relaxation", "application": { "name": "vasp", "version": "5.4.4" }, "config": { "systemName": "vasp-variable-cell-relaxation" }, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "Variable-cell Relaxation", "tags": ["variable-cell_relaxation"], "units": [{ "config": { "execName": "vasp", "flavorName": "vasp_vc_relax", "name": "vasp_vc_relax" }, "functions": { "head": true }, "type": "executionBuilder" }] }, "zero_point_energy": { "__path__": "zero_point_energy", "application": { "name": "vasp", "version": "5.4.4" }, "config": {}, "method": { "name": "PseudopotentialMethod" }, "model": { "name": "DFTModel" }, "name": "Zero Point Energy", "units": [{ "config": { "execName": "vasp", "flavorName": "vasp_zpe", "name": "vasp_zpe" }, "functions": { "head": true }, "type": "executionBuilder" }] } } }, "workflows": { "espresso": { "average_electrostatic_potential": { "__path__": "average_electrostatic_potential", "name": "Average Electrostatic Potential", "units": [{ "name": "average_electrostatic_potential", "type": "subworkflow" }] }, "band_gap": { "__path__": "band_gap", "name": "Band Gap", "units": [{ "name": "band_gap", "type": "subworkflow" }] }, "band_gap_dos_hse": { "__path__": "band_gap_dos_hse", "name": "Band Gap + DoS - HSE", "units": [{ "name": "band_gap_hse_dos", "type": "subworkflow" }] }, "band_structure": { "__path__": "band_structure", "name": "Band Structure", "units": [{ "name": "band_structure", "type": "subworkflow" }] }, "band_structure_dos": { "__path__": "band_structure_dos", "name": "Band Structure + Density of States", "units": [{ "name": "band_structure_dos", "type": "subworkflow" }] }, "band_structure_hse": { "__path__": "band_structure_hse", "name": "Band Structure - HSE", "units": [{ "config": { "attributes": { "name": "Preliminary SCF Calculation" } }, "name": "pw_scf", "type": "subworkflow" }, { "name": "espresso_extract_kpoints", "type": "subworkflow" }, { "config": { "attributes": { "name": "Main HSE Run" } }, "name": "band_structure_hse", "type": "subworkflow" }] }, "band_structure_magn": { "__path__": "band_structure_magn", "name": "Bandstructure with spin magnetism - QE", "units": [{ "config": { "attributes": { "name": "Bandstructure with spin magnetism" } }, "name": "band_structure_magn", "type": "subworkflow" }] }, "band_structure_soc": { "__path__": "band_structure_soc", "name": "Bandstructure with SOC - QE", "units": [{ "config": { "attributes": { "name": "Bandstructure with SOC" } }, "name": "band_structure_soc", "type": "subworkflow" }] }, "dielectric_tensor": { "__path__": "dielectric_tensor", "name": "Dielectric Function", "units": [{ "name": "dielectric_tensor", "type": "subworkflow" }] }, "dos": { "__path__": "dos", "name": "Density of States", "units": [{ "name": "dos", "type": "subworkflow" }] }, "electronic_density_mesh": { "__path__": "electronic_density_mesh", "name": "Electronic Density Mesh", "units": [{ "name": "electronic_density_mesh", "type": "subworkflow" }] }, "esm": { "__path__": "esm", "name": "Effective Screening Medium (ESM)", "units": [{ "name": "esm", "type": "subworkflow" }] }, "esm_relax": { "__path__": "esm_relax", "name": "Effective Screening Medium (ESM) Relax", "units": [{ "name": "esm_relax", "type": "subworkflow" }] }, "fixed_cell_relaxation": { "__path__": "fixed_cell_relaxation", "name": "Fixed-cell Relaxation", "units": [{ "name": "fixed_cell_relaxation", "type": "subworkflow" }] }, "gw_band_structure_band_gap_full_frequency": { "__path__": "gw_band_structure_band_gap_full_frequency", "name": "Full Frequency GW Band Structure + Band Gap", "units": [{ "name": "gw_band_structure_band_gap_full_frequency", "type": "subworkflow" }] }, "gw_band_structure_band_gap_plasmon_pole": { "__path__": "gw_band_structure_band_gap_plasmon_pole", "name": "Plasmon-Pole GW Band Structure + Band Gap", "units": [{ "name": "gw_band_structure_band_gap_plasmon_pole", "type": "subworkflow" }] }, "kpoint_convergence": { "__path__": "kpoint_convergence", "name": "K-point Convergence", "units": [{ "name": "kpoint_convergence", "type": "subworkflow" }] }, "neb": { "__path__": "neb", "name": "Nudged Elastic Band (NEB)", "units": [{ "name": "neb", "type": "subworkflow" }] }, "phonon_dispersions": { "__path__": "phonon_dispersions", "name": "Phonon Dispersions", "units": [{ "name": "phonon_dispersions", "type": "subworkflow" }] }, "phonon_dos": { "__path__": "phonon_dos", "name": "Phonon Density of States", "units": [{ "name": "phonon_dos", "type": "subworkflow" }] }, "phonon_dos_dispersion": { "__path__": "phonon_dos_dispersion", "name": "Phonon Density of States + Dispersions", "units": [{ "name": "phonon_dos_dispersion", "type": "subworkflow" }] }, "phonon_map": { "__path__": "phonon_map", "name": "Phonon Map", "units": [{ "name": "phononMap", "type": "workflow", "units": [{ "name": "pw_scf", "type": "subworkflow" }, { "name": "ph_init_qpoints", "type": "subworkflow" }, { "name": "espresso_xml_get_qpt_irr", "type": "subworkflow" }] }, { "config": { "functions": { "setDefaultCompute": null }, "input": { "name": "Q_POINTS" }, "mapUnit": true }, "name": "phonon_map_workflow", "type": "workflow", "units": [{ "name": "pre_processor", "type": "subworkflow" }, { "name": "ph_single_irr_qpt", "type": "subworkflow" }, { "name": "post_processor", "type": "subworkflow" }] }, { "name": "phonon_reduce", "type": "subworkflow" }] }, "recalculate_bands": { "__path__": "recalculate_bands", "name": "Recalculate Bands", "units": [{ "name": "recalculate_bands", "type": "subworkflow" }] }, "surface_energy": { "__path__": "surface_energy", "name": "Surface Energy", "units": [{ "name": "surface_energy", "type": "subworkflow" }] }, "total_energy": { "__path__": "total_energy", "name": "Total Energy", "tags": ["default"], "units": [{ "name": "total_energy", "type": "subworkflow" }] }, "valence_band_offset": { "__path__": "valence_band_offset", "name": "Valence Band Offset (2D)", "units": [{ "config": { "attributes": { "name": "BS + Avg ESP (Interface)" } }, "name": "average_electrostatic_potential_via_band_structure", "type": "subworkflow", "unitConfigs": [{ "config": { "attributes": { "name": "Set Material Index (Interface)", "value": "0" } }, "index": 0, "type": "assignment" }] }, { "config": { "attributes": { "name": "Find ESP Values (Interface)" } }, "name": "average_electrostatic_potential_find_minima", "type": "subworkflow", "unitConfigs": [{ "config": { "attributes": { "operand": "AVG_ESP_INTERFACE" } }, "index": 1, "type": "assignment" }] }, { "config": { "attributes": { "name": "BS + Avg ESP (interface left)" } }, "name": "average_electrostatic_potential_via_band_structure", "type": "subworkflow", "unitConfigs": [{ "config": { "attributes": { "name": "Set Material Index (Interface left)", "value": "1" } }, "index": 0, "type": "assignment" }, { "config": { "attributes": { "flowchartId": "pw-bands-calculate-band-gap-left" } }, "index": 2, "type": "executionBuilder" }, { "config": { "attributes": { "input": [{ "name": "band_gaps", "scope": "pw-bands-calculate-band-gap-left" }] } }, "index": 3, "type": "assignment" }, { "config": { "attributes": { "operand": "VBM_LEFT" } }, "index": 4, "type": "assignment" }, { "config": { "attributes": { "flowchartId": "average-electrostatic-potential-left" } }, "index": 7, "type": "executionBuilder" }, { "config": { "attributes": { "input": [{ "name": "average_potential_profile", "scope": "average-electrostatic-potential-left" }] } }, "index": 8, "type": "assignment" }] }, { "config": { "attributes": { "name": "Find ESP Value (Interface left)" } }, "name": "average_electrostatic_potential_find_minima", "type": "subworkflow", "unitConfigs": [{ "config": { "attributes": { "flowchartId": "python-find-extrema-left" } }, "index": 0, "type": "executionBuilder" }, { "config": { "attributes": { "input": [{ "name": "STDOUT", "scope": "python-find-extrema-left" }], "operand": "AVG_ESP_LEFT" } }, "index": 1, "type": "assignment" }] }, { "config": { "attributes": { "name": "BS + Avg ESP (interface right)" } }, "name": "average_electrostatic_potential_via_band_structure", "type": "subworkflow", "unitConfigs": [{ "config": { "attributes": { "name": "Set Material Index (Interface right)", "value": "2" } }, "index": 0, "type": "assignment" }, { "config": { "attributes": { "flowchartId": "pw-bands-calculate-band-gap-right" } }, "index": 2, "type": "executionBuilder" }, { "config": { "attributes": { "input": [{ "name": "band_gaps", "scope": "pw-bands-calculate-band-gap-right" }] } }, "index": 3, "type": "assignment" }, { "config": { "attributes": { "operand": "VBM_RIGHT" } }, "index": 4, "type": "assignment" }, { "config": { "attributes": { "flowchartId": "average-electrostatic-potential-right" } }, "index": 7, "type": "executionBuilder" }, { "config": { "attributes": { "input": [{ "name": "average_potential_profile", "scope": "average-electrostatic-potential-right" }] } }, "index": 8, "type": "assignment" }] }, { "config": { "attributes": { "name": "Find ESP Value (Interface right)" } }, "name": "average_electrostatic_potential_find_minima", "type": "subworkflow", "unitConfigs": [{ "config": { "attributes": { "flowchartId": "python-find-extrema-right" } }, "index": 0, "type": "executionBuilder" }, { "config": { "attributes": { "input": [{ "name": "STDOUT", "scope": "python-find-extrema-right" }], "operand": "AVG_ESP_RIGHT" } }, "index": 1, "type": "assignment" }] }, { "name": "valence_band_offset_calc_from_previous_esp_vbm", "type": "subworkflow" }] }, "variable_cell_relaxation": { "__path__": "variable_cell_relaxation", "name": "Variable-cell Relaxation", "tags": ["variable-cell_relaxation"], "units": [{ "name": "variable_cell_relaxation", "type": "subworkflow" }] }, "zero_point_energy": { "__path__": "zero_point_energy", "name": "Zero Point Energy", "units": [{ "name": "zero_point_energy", "type": "subworkflow" }] } }, "nwchem": { "total_energy": { "__path__": "total_energy", "name": "Total Energy", "units": [{ "name": "total_energy", "type": "subworkflow" }] } }, "python": { "classification_workflow": { "__path__": "ml/classification_workflow", "config": { "attributes": { "isUsingDataset": true } }, "name": "Python ML Train Classification", "units": [{ "name": "train_head", "type": "subworkflow" }, { "name": "classification_tail", "type": "subworkflow" }] }, "clustering_workflow": { "__path__": "ml/clustering_workflow", "config": { "attributes": { "isUsingDataset": true } }, "name": "Python ML Train Clustering", "units": [{ "name": "train_head", "type": "subworkflow" }, { "name": "classification_tail", "type": "subworkflow" }] }, "python_script": { "__path__": "python_script", "name": "Python Script", "units": [{ "name": "python_script", "type": "subworkflow" }] }, "regression_workflow": { "__path__": "ml/regression_workflow", "config": { "attributes": { "isUsingDataset": true } }, "name": "Python ML Train Regression", "units": [{ "name": "train_head", "type": "subworkflow" }, { "name": "regression_tail", "type": "subworkflow" }] } }, "shell": { "batch_espresso_pwscf": { "__path__": "batch_espresso_pwscf", "name": "Shell Batch Job (Espresso PWSCF)", "units": [{ "name": "batch_espresso_pwscf", "type": "subworkflow" }] }, "hello_world": { "__path__": "hello_world", "name": "Shell Script", "units": [{ "name": "hello_world", "type": "subworkflow" }] } }, "vasp": { "band_gap": { "__path__": "band_gap", "name": "Band Gap", "units": [{ "name": "band_gap", "type": "subworkflow" }] }, "band_structure": { "__path__": "band_structure", "name": "Band Structure", "units": [{ "name": "band_structure", "type": "subworkflow" }] }, "band_structure_dos": { "__path__": "band_structure_dos", "name": "Band Structure + Density of States", "units": [{ "name": "band_structure_dos", "type": "subworkflow" }] }, "dos": { "__path__": "dos", "name": "Density of States", "units": [{ "name": "dos", "type": "subworkflow" }] }, "fixed_cell_relaxation": { "__path__": "fixed_cell_relaxation", "name": "Fixed-cell Relaxation", "units": [{ "name": "fixed_cell_relaxation", "type": "subworkflow" }] }, "kpoint_convergence": { "__path__": "kpoint_convergence", "name": "K-point Convergence", "units": [{ "name": "kpoint_convergence", "type": "subworkflow" }] }, "neb": { "__path__": "neb", "name": "Nudged Elastic Band (NEB)", "units": [{ "name": "initial_final_total_energies", "type": "subworkflow" }, { "name": "prepare_images", "type": "subworkflow" }, { "name": "neb_subworkflow", "type": "subworkflow" }] }, "recalculate_bands": { "__path__": "recalculate_bands", "name": "Recalculate Bands", "units": [{ "name": "recalculate_bands", "type": "subworkflow" }] }, "surface_energy": { "__path__": "surface_energy", "name": "Surface Energy", "units": [{ "name": "surface_energy", "type": "subworkflow" }] }, "total_energy": { "__path__": "total_energy", "name": "Total Energy", "units": [{ "name": "total_energy", "type": "subworkflow" }] }, "variable_cell_relaxation": { "__path__": "variable_cell_relaxation", "name": "Variable-cell Relaxation", "tags": ["variable-cell_relaxation"], "units": [{ "name": "variable_cell_relaxation", "type": "subworkflow" }] }, "zero_point_energy": { "__path__": "zero_point_energy", "name": "Zero Point Energy", "units": [{ "name": "zero_point_energy", "type": "subworkflow" }] } } } } diff --git a/dist/js/types/application.d.ts b/dist/js/types/application.d.ts index fad3eda1..a303b426 100644 --- a/dist/js/types/application.d.ts +++ b/dist/js/types/application.d.ts @@ -1,20 +1,19 @@ -import { ApplicationSchemaBase, ExecutableSchema } from "@mat3ra/esse/dist/js/types"; -export type ApplicationVersionInfo = Pick & { - version: Required["version"]; -}; -export type DefaultApplicationConfig = Pick; -export type ApplicationVersionsMapType = Pick & { +import { ApplicationSchema, ExecutableSchema, FlavorSchema } from "@mat3ra/esse/dist/js/types"; +type OptionalExecutableSchema = Partial; +export type ApplicationVersionInfo = Pick; +export type ApplicationVersionsMapType = Pick & { defaultVersion: string; versions: ApplicationVersionInfo[]; - name: Required["name"]; }; export type ApplicationVersionsMapByApplicationType = { [key: string]: ApplicationVersionsMapType; }; -export interface ExecutableTreeItem extends Pick { - isDefault?: ApplicationSchemaBase["isDefault"]; - supportedApplicationVersions?: ApplicationSchemaBase["version"][]; - flavors?: Record; +type OptionalFlavorSchema = Partial; +type Flavor = Pick & Pick; +export type ExecutableTreeItem = Pick & Pick & { + supportedApplicationVersions?: ApplicationSchema["version"][]; + flavors?: Record; [key: string]: any; -} -export type ApplicationExecutableTree = Record; +}; +export type ApplicationExecutableTree = Record>; +export {}; diff --git a/dist/js/types/applicationFilter.d.ts b/dist/js/types/applicationFilter.d.ts index 6ba676dd..26ac4f22 100644 --- a/dist/js/types/applicationFilter.d.ts +++ b/dist/js/types/applicationFilter.d.ts @@ -1,4 +1,4 @@ -import { ApplicationSchemaBase, ExecutableSchema } from "@mat3ra/esse/dist/js/types"; +import { ApplicationSchema, ExecutableSchema } from "@mat3ra/esse/dist/js/types"; import { ApplicationExecutableTree } from "./application"; export type FilterTree = ApplicationExecutableTree; export interface FilterObjectPath { @@ -9,7 +9,7 @@ export interface FilterObjectRegex { defaultPath?: string; } export type FilterObject = FilterObjectPath | FilterObjectRegex; -export interface FilterObjectsParams extends Partial> { +export interface FilterObjectsParams extends Partial> { filterTree: FilterTree; executable?: ExecutableSchema["name"]; flavor?: string; @@ -24,14 +24,14 @@ export interface FilterEntityListParams { } export interface ApplicationModelParametersInterface extends Omit { modelList: any[]; - name: Required["name"]; + name: Required["name"]; } -export type ModelMethodFilterTree = Record["name"], Record["version"], Record["build"], Record> | string>>>; +export type ModelMethodFilterTree = Record["name"], Record["version"], Record["build"], Record> | string>>>; export interface ModelMethodMapByApplication { models: ModelMethodFilterTree; methods: ModelMethodFilterTree; } export interface ApplicationMethodParametersInterface extends Omit { methodList: any[]; - name: Required["name"]; + name: Required["name"]; } diff --git a/dist/js/ui/methodTree.json b/dist/js/ui/methodTree.json index e37e7408..5167eb82 100644 --- a/dist/js/ui/methodTree.json +++ b/dist/js/ui/methodTree.json @@ -1 +1 @@ -{"path":"/","data":null,"children":[{"path":"/linalg","data":{"key":"tier1","value":"linalg","name":"Linear Algebra"},"children":[{"path":"/linalg/diag","data":{"key":"tier2","value":"diag","name":"Diagonalization"},"children":[{"path":"/linalg/diag/davidson","data":{"key":"type","value":"davidson","name":"Davidson Diagonalization"}}]}]},{"path":"/qm","data":{"key":"tier1","value":"qm","name":"Quantum-Mechanical"},"children":[{"path":"/qm/wf","data":{"key":"tier2","value":"wf","name":"Wave Function"},"children":[{"path":"/qm/wf/ao","data":{"key":"type","value":"ao","name":"Atomic Orbital"},"children":[{"path":"/qm/wf/ao/pople","data":{"key":"subtype","value":"pople","name":"Pople Basis"},"staticOptions":[{"key":"basisSlug","values":["3-21G","6-31G","6-311G"]}]}]},{"path":"/qm/wf/pw","data":{"key":"type","value":"pw","name":"Plane Wave"}},{"path":"/qm/wf/psp","data":{"key":"type","value":"psp","name":"Pseudopotential"},"children":[{"path":"/qm/wf/psp/us","data":{"key":"subtype","value":"us","name":"Ultra-Soft"}},{"path":"/qm/wf/psp/nc","data":{"key":"subtype","value":"nc","name":"Norm-conserving"}},{"path":"/qm/wf/psp/nc-fr","data":{"key":"subtype","value":"nc-fr","name":"Norm-conserving Fully-relativistic"}},{"path":"/qm/wf/psp/paw","data":{"key":"subtype","value":"paw","name":"Projector-Augmented Wave"}}]},{"path":"/qm/wf/smearing","data":{"key":"type","value":"smearing","name":"Occupation Number Smearing"},"children":[{"path":"/qm/wf/smearing/gaussian","data":{"key":"subtype","value":"gaussian","name":"Gaussian"}},{"path":"/qm/wf/smearing/methfessel-paxton","data":{"key":"subtype","value":"methfessel-paxton","name":"Methfessel-Paxton"}}]},{"path":"/qm/wf/tetrahedron","data":{"key":"type","value":"tetrahedron","name":"Tetrahedron Method"},"children":[{"path":"/qm/wf/tetrahedron/linear","data":{"key":"subtype","value":"linear","name":"Linear"}},{"path":"/qm/wf/tetrahedron/optimized","data":{"key":"subtype","value":"optimized","name":"Optimized (Kawamura)"}},{"path":"/qm/wf/tetrahedron/bloechl","data":{"key":"subtype","value":"bloechl","name":"Bloechl"}}]}]}]}]} +{ "path": "/", "data": null, "children": [{ "path": "/linalg", "data": { "key": "tier1", "value": "linalg", "name": "Linear Algebra" }, "children": [{ "path": "/linalg/diag", "data": { "key": "tier2", "value": "diag", "name": "Diagonalization" }, "children": [{ "path": "/linalg/diag/davidson", "data": { "key": "type", "value": "davidson", "name": "Davidson Diagonalization" } }] }] }, { "path": "/qm", "data": { "key": "tier1", "value": "qm", "name": "Quantum-Mechanical" }, "children": [{ "path": "/qm/wf", "data": { "key": "tier2", "value": "wf", "name": "Wave Function" }, "children": [{ "path": "/qm/wf/ao", "data": { "key": "type", "value": "ao", "name": "Atomic Orbital" }, "children": [{ "path": "/qm/wf/ao/pople", "data": { "key": "subtype", "value": "pople", "name": "Pople Basis" }, "staticOptions": [{ "key": "basisSlug", "values": ["3-21G", "6-31G", "6-311G"] }] }] }, { "path": "/qm/wf/pw", "data": { "key": "type", "value": "pw", "name": "Plane Wave" } }, { "path": "/qm/wf/psp", "data": { "key": "type", "value": "psp", "name": "Pseudopotential" }, "children": [{ "path": "/qm/wf/psp/us", "data": { "key": "subtype", "value": "us", "name": "Ultra-Soft" } }, { "path": "/qm/wf/psp/nc", "data": { "key": "subtype", "value": "nc", "name": "Norm-conserving" } }, { "path": "/qm/wf/psp/nc-fr", "data": { "key": "subtype", "value": "nc-fr", "name": "Norm-conserving Fully-relativistic" } }, { "path": "/qm/wf/psp/paw", "data": { "key": "subtype", "value": "paw", "name": "Projector-Augmented Wave" } }] }, { "path": "/qm/wf/smearing", "data": { "key": "type", "value": "smearing", "name": "Occupation Number Smearing" }, "children": [{ "path": "/qm/wf/smearing/gaussian", "data": { "key": "subtype", "value": "gaussian", "name": "Gaussian" } }, { "path": "/qm/wf/smearing/methfessel-paxton", "data": { "key": "subtype", "value": "methfessel-paxton", "name": "Methfessel-Paxton" } }] }, { "path": "/qm/wf/tetrahedron", "data": { "key": "type", "value": "tetrahedron", "name": "Tetrahedron Method" }, "children": [{ "path": "/qm/wf/tetrahedron/linear", "data": { "key": "subtype", "value": "linear", "name": "Linear" } }, { "path": "/qm/wf/tetrahedron/optimized", "data": { "key": "subtype", "value": "optimized", "name": "Optimized (Kawamura)" } }, { "path": "/qm/wf/tetrahedron/bloechl", "data": { "key": "subtype", "value": "bloechl", "name": "Bloechl" } }] }] }] }] } diff --git a/dist/js/ui/modelTree.json b/dist/js/ui/modelTree.json index ca31523b..d728d9e1 100644 --- a/dist/js/ui/modelTree.json +++ b/dist/js/ui/modelTree.json @@ -1 +1 @@ -{"path":"/","data":null,"children":[{"path":"/pb","data":{"key":"tier1","value":"pb","name":"Physics-based"},"children":[{"path":"/pb/qm","data":{"key":"tier2","value":"qm","name":"Quantum-mechanical"},"children":[{"path":"/pb/qm/dft","data":{"key":"tier3","value":"dft","name":"Density Functional Theory"},"children":[{"path":"/pb/qm/dft/ksdft","data":{"key":"type","value":"ksdft","name":"Kohn-Sham DFT"},"children":[{"path":"/pb/qm/dft/ksdft/lda","data":{"key":"subtype","value":"lda","name":"LDA"},"staticOptions":[{"key":"functional","values":["pz"],"namesMap":{"pz":"PZ"}}]},{"path":"/pb/qm/dft/ksdft/gga","data":{"key":"subtype","value":"gga","name":"GGA"},"staticOptions":[{"key":"functional","values":["pbe","pbesol"],"namesMap":{"pbe":"PBE","pbesol":"PBESOL"}}]},{"path":"/pb/qm/dft/ksdft/hybrid","data":{"key":"subtype","value":"hybrid","name":"Hybrid Functional"},"staticOptions":[{"key":"functional","values":["hse06","b3lyp"],"namesMap":{"hse06":"HSE06","b3lyp":"B3LYP"}}]}]}]}]}]}]} +{ "path": "/", "data": null, "children": [{ "path": "/pb", "data": { "key": "tier1", "value": "pb", "name": "Physics-based" }, "children": [{ "path": "/pb/qm", "data": { "key": "tier2", "value": "qm", "name": "Quantum-mechanical" }, "children": [{ "path": "/pb/qm/dft", "data": { "key": "tier3", "value": "dft", "name": "Density Functional Theory" }, "children": [{ "path": "/pb/qm/dft/ksdft", "data": { "key": "type", "value": "ksdft", "name": "Kohn-Sham DFT" }, "children": [{ "path": "/pb/qm/dft/ksdft/lda", "data": { "key": "subtype", "value": "lda", "name": "LDA" }, "staticOptions": [{ "key": "functional", "values": ["pz"], "namesMap": { "pz": "PZ" } }] }, { "path": "/pb/qm/dft/ksdft/gga", "data": { "key": "subtype", "value": "gga", "name": "GGA" }, "staticOptions": [{ "key": "functional", "values": ["pbe", "pbesol"], "namesMap": { "pbe": "PBE", "pbesol": "PBESOL" } }] }, { "path": "/pb/qm/dft/ksdft/hybrid", "data": { "key": "subtype", "value": "hybrid", "name": "Hybrid Functional" }, "staticOptions": [{ "key": "functional", "values": ["hse06", "b3lyp"], "namesMap": { "hse06": "HSE06", "b3lyp": "B3LYP" } }] }] }] }] }] }] } diff --git a/dist/js/ui/schemas.json b/dist/js/ui/schemas.json index 1a4e6904..33e9895f 100644 --- a/dist/js/ui/schemas.json +++ b/dist/js/ui/schemas.json @@ -1 +1 @@ -{"categories":{"tier1":{"ui:title":"Tier 1"},"tier2":{"ui:title":"Tier 2"},"tier3":{"ui:title":"Tier 3"},"type":{"ui:title":"Type"},"subtype":{"ui:title":"Subtype"}},"modelParameters":{"functional":{"ui:title":"Functional"},"dispersionCorrection":{"ui:title":"Dispersion Correction"},"spinOrbitCoupling":{"ui:title":"Spin-Orbit Coupling"},"hubbardType":{"ui:title":"Hubbard Term"},"spinPolarization":{"ui:title":"Spin-Polarization"}},"methodParameters":{"basisSlug":{"ui:title":"Basis Set"}}} +{ "categories": { "tier1": { "ui:title": "Tier 1" }, "tier2": { "ui:title": "Tier 2" }, "tier3": { "ui:title": "Tier 3" }, "type": { "ui:title": "Type" }, "subtype": { "ui:title": "Subtype" } }, "modelParameters": { "functional": { "ui:title": "Functional" }, "dispersionCorrection": { "ui:title": "Dispersion Correction" }, "spinOrbitCoupling": { "ui:title": "Spin-Orbit Coupling" }, "hubbardType": { "ui:title": "Hubbard Term" }, "spinPolarization": { "ui:title": "Spin-Polarization" } }, "methodParameters": { "basisSlug": { "ui:title": "Basis Set" } } } diff --git a/dist/js/utils/applicationFilter.d.ts b/dist/js/utils/applicationFilter.d.ts index cd3f4d06..dba84876 100644 --- a/dist/js/utils/applicationFilter.d.ts +++ b/dist/js/utils/applicationFilter.d.ts @@ -1,6 +1,6 @@ import { FilterTree } from "../types/applicationFilter"; export declare enum FilterMode { - ANY_MATCH = "ANY", + ANY_MATCH = "ANY",// OR logic - at least one filter must match (for models) ALL_MATCH = "ALL" } export declare abstract class ApplicationFilterStandata { diff --git a/dist/js/utils/applicationFilter.js b/dist/js/utils/applicationFilter.js index 51a19635..5b242991 100644 --- a/dist/js/utils/applicationFilter.js +++ b/dist/js/utils/applicationFilter.js @@ -5,7 +5,7 @@ var FilterMode; (function (FilterMode) { FilterMode["ANY_MATCH"] = "ANY"; FilterMode["ALL_MATCH"] = "ALL"; -})(FilterMode = exports.FilterMode || (exports.FilterMode = {})); +})(FilterMode || (exports.FilterMode = FilterMode = {})); function safelyGet(obj, ...args) { let current = obj; // We use for instead of forEach to allow early return on undefined diff --git a/dist/js/utils/applicationVersionMap.d.ts b/dist/js/utils/applicationVersionMap.d.ts index ed703870..5e33b383 100644 --- a/dist/js/utils/applicationVersionMap.d.ts +++ b/dist/js/utils/applicationVersionMap.d.ts @@ -1,8 +1,8 @@ -import { ApplicationSchemaBase } from "@mat3ra/esse/dist/js/types"; +import { ApplicationSchema } from "@mat3ra/esse/dist/js/types"; import { ApplicationVersionInfo, ApplicationVersionsMapType } from "../types/application"; export declare class ApplicationVersionsMap implements ApplicationVersionsMapType { - shortName?: string | undefined; - summary?: string | undefined; + shortName: string; + summary: string; isLicensed?: boolean | undefined; defaultVersion: string; versions: ApplicationVersionInfo[]; @@ -10,12 +10,12 @@ export declare class ApplicationVersionsMap implements ApplicationVersionsMapTyp constructor(config: ApplicationVersionsMapType); get name(): string; get nonVersionProperties(): { - shortName?: string | undefined; - summary?: string | undefined; - isLicensed?: boolean | undefined; name: string; + shortName: string; + summary: string; + isLicensed?: boolean | undefined; }; get versionConfigs(): ApplicationVersionInfo[]; - get versionConfigsFull(): ApplicationSchemaBase[]; - getSlugForVersionConfig(versionConfigFull: ApplicationSchemaBase): string; + get versionConfigsFull(): ApplicationSchema[]; + getSlugForVersionConfig(versionConfigFull: ApplicationSchema): string; } diff --git a/dist/js/utils/applicationVersionMap.js b/dist/js/utils/applicationVersionMap.js index ac7b1d5a..9f0f1af3 100644 --- a/dist/js/utils/applicationVersionMap.js +++ b/dist/js/utils/applicationVersionMap.js @@ -14,7 +14,8 @@ class ApplicationVersionsMap { return this.map.name; } get nonVersionProperties() { - const { versions, defaultVersion, ...rest } = this.map; + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { versions: _, defaultVersion: __, ...rest } = this.map; return rest; } get versionConfigs() { diff --git a/dist/js/utils/category.js b/dist/js/utils/category.js index 4008f37b..b73baf37 100644 --- a/dist/js/utils/category.js +++ b/dist/js/utils/category.js @@ -1,16 +1,15 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.getModelCategoryTags = exports.getCategoryValue = void 0; +exports.getCategoryValue = getCategoryValue; +exports.getModelCategoryTags = getModelCategoryTags; function getCategoryValue(category) { if (!category) return undefined; return typeof category === "string" ? category : category.slug; } -exports.getCategoryValue = getCategoryValue; function getModelCategoryTags(model) { var _a; const c = model.categories || {}; const typeVal = typeof c.type === "string" ? c.type : (_a = c.type) === null || _a === void 0 ? void 0 : _a.slug; return [c.tier1, c.tier2, c.tier3, typeVal, c.subtype].filter(Boolean); } -exports.getModelCategoryTags = getModelCategoryTags; diff --git a/dist/js/workflow.js b/dist/js/workflow.js index 93d3c6c4..912e2f1e 100644 --- a/dist/js/workflow.js +++ b/dist/js/workflow.js @@ -13,7 +13,7 @@ var TAGS; (function (TAGS) { TAGS["RELAXATION"] = "variable-cell_relaxation"; TAGS["DEFAULT"] = "default"; -})(TAGS = exports.TAGS || (exports.TAGS = {})); +})(TAGS || (exports.TAGS = TAGS = {})); class BaseWorkflowStandata extends base_1.Standata { findByApplication(appName) { return this.findEntitiesByTags(appName); diff --git a/package-lock.json b/package-lock.json index 55488b3f..fe22fbaa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,35 +9,27 @@ "version": "0.0.0", "license": "Apache-2.0", "dependencies": { - "@babel/cli": "7.16.0", - "@babel/core": "7.24.1", - "@babel/eslint-parser": "7.16.3", - "@babel/plugin-proposal-class-properties": "7.16.0", - "@babel/preset-env": "7.16.4", - "@babel/preset-react": "7.16.7", - "@babel/preset-typescript": "^7.22.5", - "@babel/register": "^7.16.0", - "@babel/runtime-corejs3": "7.16.8", "cmd-ts": "^0.13.0", "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "ts-node": "^10.9.1", - "typescript": "^4.5.5" + "lodash": "^4.17.21" }, "devDependencies": { - "@exabyte-io/eslint-config": "^2022.11.17-0", - "@mat3ra/ade": "2025.11.19-0", - "@mat3ra/code": "^2025.8.7-0", - "@mat3ra/esse": "^2025.11.19-0", + "@exabyte-io/eslint-config": "2025.5.13-0", + "@mat3ra/ade": "git+https://github.com/Exabyte-io/ade#6d494337d83e1b22fe272ff74cc1b6842a7c6561", + "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#3b42a844bebd5de65dc3877f7602521af308a09e", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#c6b904537bf86f655a6a1f080a84816094138f37", + "@mat3ra/fixtures": "git+https://github.com/Exabyte-io/fixtures#7501b0dcc28848b48194085685d332828509efdb", + "@mat3ra/made": "2025.12.29-0", "@mat3ra/mode": "2025.12.25-0", "@mat3ra/standata": "file:./", "@mat3ra/tsconfig": "^2024.6.3-0", - "@mat3ra/utils": "^2025.12.2-0", - "@mat3ra/wode": "2026.2.9-0", + "@mat3ra/utils": "2025.12.2-0", + "@mat3ra/wode": "git+https://github.com/Exabyte-io/wode#33471cd073aa6990a8109b247ccd1d62e5cafa65", "@types/chai": "^4.3.5", "@types/js-yaml": "^4.0.5", "@types/mocha": "^10.0.1", "@types/node": "^20.4.2", + "@types/sprintf-js": "^1.1.4", "@typescript-eslint/eslint-plugin": "^5.56.0", "@typescript-eslint/parser": "^5.56.0", "babel-eslint": "^10.1.0", @@ -56,8 +48,12 @@ "eslint-plugin-simple-import-sort": "7.0.0", "lint-staged": "^12.1.2", "mocha": "10.3.0", + "nunjucks": "^3.2.4", "nyc": "^15.1.0", - "prettier": "^2.7.1" + "prettier": "^2.7.1", + "sprintf-js": "^1.1.3", + "ts-node": "^10.9.1", + "typescript": "^4.5.5" }, "engines": { "node": ">=20.0.0" @@ -65,8 +61,7 @@ }, "node_modules/@ampproject/remapping": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -96,8 +91,7 @@ }, "node_modules/@babel/cli": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.16.0.tgz", - "integrity": "sha512-WLrM42vKX/4atIoQB+eb0ovUof53UUvecb4qGjU2PDDWRiZr50ZpiV8NpcLo7iSxeGYrRG0Mqembsa+UrTAV6Q==", + "dev": true, "license": "MIT", "dependencies": { "commander": "^4.0.1", @@ -124,12 +118,11 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", - "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "version": "7.27.1", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -138,9 +131,8 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", - "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "version": "7.28.5", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -148,8 +140,7 @@ }, "node_modules/@babel/core": { "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.1.tgz", - "integrity": "sha512-F82udohVyIgGAY2VVj/g34TpFUG606rumIHjTfVbssPg2zTR7PuuEpZcX8JA6sgBfIYmJrFtWgPvHQuJamVqZQ==", + "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", @@ -178,14 +169,12 @@ }, "node_modules/@babel/core/node_modules/convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, "license": "MIT" }, "node_modules/@babel/eslint-parser": { "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.16.3.tgz", - "integrity": "sha512-iB4ElZT0jAt7PKVaeVulOECdGe6UnmA/O0P9jlF5g5GBOwDVbna8AXhHRu4s27xQf6OkveyA8iTDv1jHdDejgQ==", + "dev": true, "license": "MIT", "dependencies": { "eslint-scope": "^5.1.1", @@ -201,13 +190,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.29.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", - "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "version": "7.28.5", + "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.29.0", - "@babel/types": "^7.29.0", + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -218,8 +206,7 @@ }, "node_modules/@babel/helper-annotate-as-pure": { "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", - "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.27.3" @@ -229,12 +216,11 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", - "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "version": "7.27.2", + "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.28.6", + "@babel/compat-data": "^7.27.2", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -245,17 +231,16 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz", - "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==", + "version": "7.28.5", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/helper-replace-supers": "^7.28.6", + "@babel/helper-replace-supers": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/traverse": "^7.28.6", + "@babel/traverse": "^7.28.5", "semver": "^6.3.1" }, "engines": { @@ -267,8 +252,7 @@ }, "node_modules/@babel/helper-create-regexp-features-plugin": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz", - "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", @@ -284,8 +268,7 @@ }, "node_modules/@babel/helper-define-polyfill-provider": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.17.7", @@ -301,8 +284,7 @@ }, "node_modules/@babel/helper-environment-visitor": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", - "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.24.7" @@ -313,8 +295,7 @@ }, "node_modules/@babel/helper-globals": { "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -322,8 +303,7 @@ }, "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", - "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.28.5", @@ -334,27 +314,25 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", - "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "version": "7.27.1", + "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", - "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "version": "7.28.3", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.6" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" }, "engines": { "node": ">=6.9.0" @@ -365,8 +343,7 @@ }, "node_modules/@babel/helper-optimise-call-expression": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", - "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.27.1" @@ -376,9 +353,8 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", - "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "version": "7.27.1", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -386,8 +362,7 @@ }, "node_modules/@babel/helper-remap-async-to-generator": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", - "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", @@ -402,14 +377,13 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz", - "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==", + "version": "7.27.1", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-member-expression-to-functions": "^7.27.1", "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/traverse": "^7.28.6" + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -420,8 +394,7 @@ }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", - "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.27.1", @@ -433,8 +406,7 @@ }, "node_modules/@babel/helper-string-parser": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -442,8 +414,7 @@ }, "node_modules/@babel/helper-validator-identifier": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -451,35 +422,32 @@ }, "node_modules/@babel/helper-validator-option": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.6.tgz", - "integrity": "sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==", + "version": "7.28.3", + "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.28.6", - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.3", + "@babel/types": "^7.28.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", - "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", + "version": "7.28.4", + "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" }, "engines": { "node": ">=6.9.0" @@ -487,8 +455,7 @@ }, "node_modules/@babel/highlight": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.9.tgz", - "integrity": "sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", @@ -502,8 +469,7 @@ }, "node_modules/@babel/highlight/node_modules/ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^1.9.0" @@ -514,8 +480,7 @@ }, "node_modules/@babel/highlight/node_modules/chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", @@ -528,8 +493,7 @@ }, "node_modules/@babel/highlight/node_modules/color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "license": "MIT", "dependencies": { "color-name": "1.1.3" @@ -537,14 +501,12 @@ }, "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, "license": "MIT" }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.8.0" @@ -552,8 +514,7 @@ }, "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -561,8 +522,7 @@ }, "node_modules/@babel/highlight/node_modules/supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^3.0.0" @@ -572,12 +532,11 @@ } }, "node_modules/@babel/parser": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", - "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", + "version": "7.28.5", + "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.29.0" + "@babel/types": "^7.28.5" }, "bin": { "parser": "bin/babel-parser.js" @@ -588,8 +547,6 @@ }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz", - "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -605,8 +562,6 @@ }, "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", - "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", "dev": true, "license": "MIT", "dependencies": { @@ -621,8 +576,7 @@ }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", - "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -636,8 +590,7 @@ }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", - "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -652,14 +605,12 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.6.tgz", - "integrity": "sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==", + "version": "7.28.3", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/traverse": "^7.28.6" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.3" }, "engines": { "node": ">=6.9.0" @@ -670,9 +621,7 @@ }, "node_modules/@babel/plugin-proposal-async-generator-functions": { "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead.", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", @@ -689,9 +638,7 @@ }, "node_modules/@babel/plugin-proposal-class-properties": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz", - "integrity": "sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.16.0", @@ -706,9 +653,7 @@ }, "node_modules/@babel/plugin-proposal-class-static-block": { "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", - "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-static-block instead.", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.21.0", @@ -724,9 +669,7 @@ }, "node_modules/@babel/plugin-proposal-dynamic-import": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-dynamic-import instead.", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", @@ -741,9 +684,7 @@ }, "node_modules/@babel/plugin-proposal-export-namespace-from": { "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-export-namespace-from instead.", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.9", @@ -758,9 +699,7 @@ }, "node_modules/@babel/plugin-proposal-json-strings": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-json-strings instead.", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", @@ -775,9 +714,7 @@ }, "node_modules/@babel/plugin-proposal-logical-assignment-operators": { "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", - "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead.", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", @@ -792,9 +729,7 @@ }, "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", @@ -809,9 +744,7 @@ }, "node_modules/@babel/plugin-proposal-numeric-separator": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", @@ -826,9 +759,7 @@ }, "node_modules/@babel/plugin-proposal-object-rest-spread": { "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", + "dev": true, "license": "MIT", "dependencies": { "@babel/compat-data": "^7.20.5", @@ -846,9 +777,7 @@ }, "node_modules/@babel/plugin-proposal-optional-catch-binding": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead.", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", @@ -863,9 +792,7 @@ }, "node_modules/@babel/plugin-proposal-optional-chaining": { "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", @@ -881,9 +808,7 @@ }, "node_modules/@babel/plugin-proposal-private-methods": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", @@ -898,9 +823,7 @@ }, "node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.21.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz", - "integrity": "sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", @@ -917,9 +840,7 @@ }, "node_modules/@babel/plugin-proposal-unicode-property-regex": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-unicode-property-regex instead.", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", @@ -934,8 +855,7 @@ }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -946,8 +866,7 @@ }, "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" @@ -958,8 +877,7 @@ }, "node_modules/@babel/plugin-syntax-class-static-block": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" @@ -973,8 +891,7 @@ }, "node_modules/@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -985,8 +902,7 @@ }, "node_modules/@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" @@ -996,13 +912,11 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.28.6.tgz", - "integrity": "sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==", + "version": "7.27.1", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1012,13 +926,11 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz", - "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==", + "version": "7.27.1", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1029,8 +941,7 @@ }, "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -1040,12 +951,11 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", - "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", + "version": "7.27.1", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1056,8 +966,7 @@ }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" @@ -1068,8 +977,7 @@ }, "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -1080,8 +988,7 @@ }, "node_modules/@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" @@ -1092,8 +999,7 @@ }, "node_modules/@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -1104,8 +1010,7 @@ }, "node_modules/@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -1116,8 +1021,7 @@ }, "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -1128,8 +1032,7 @@ }, "node_modules/@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" @@ -1143,8 +1046,7 @@ }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" @@ -1157,12 +1059,11 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", - "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", + "version": "7.27.1", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1173,8 +1074,6 @@ }, "node_modules/@babel/plugin-syntax-unicode-sets-regex": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dev": true, "license": "MIT", "dependencies": { @@ -1190,8 +1089,7 @@ }, "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", - "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1204,15 +1102,13 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.0.tgz", - "integrity": "sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==", + "version": "7.28.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-remap-async-to-generator": "^7.27.1", - "@babel/traverse": "^7.29.0" + "@babel/traverse": "^7.28.0" }, "engines": { "node": ">=6.9.0" @@ -1222,13 +1118,12 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.28.6.tgz", - "integrity": "sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==", + "version": "7.27.1", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-remap-async-to-generator": "^7.27.1" }, "engines": { @@ -1240,8 +1135,7 @@ }, "node_modules/@babel/plugin-transform-block-scoped-functions": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", - "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1254,12 +1148,11 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.6.tgz", - "integrity": "sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==", + "version": "7.28.5", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1269,14 +1162,12 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.28.6.tgz", - "integrity": "sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==", + "version": "7.27.1", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1286,14 +1177,12 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.6.tgz", - "integrity": "sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==", + "version": "7.28.3", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-create-class-features-plugin": "^7.28.3", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1303,17 +1192,16 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.6.tgz", - "integrity": "sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==", + "version": "7.28.4", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-globals": "^7.28.0", - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/helper-replace-supers": "^7.28.6", - "@babel/traverse": "^7.28.6" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/traverse": "^7.28.4" }, "engines": { "node": ">=6.9.0" @@ -1323,13 +1211,12 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.28.6.tgz", - "integrity": "sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==", + "version": "7.27.1", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/template": "^7.28.6" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/template": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1340,8 +1227,7 @@ }, "node_modules/@babel/plugin-transform-destructuring": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", - "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -1355,13 +1241,12 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.28.6.tgz", - "integrity": "sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==", + "version": "7.27.1", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.28.5", - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1372,8 +1257,7 @@ }, "node_modules/@babel/plugin-transform-duplicate-keys": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", - "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1386,14 +1270,12 @@ } }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.0.tgz", - "integrity": "sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==", + "version": "7.27.1", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.28.5", - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1404,8 +1286,6 @@ }, "node_modules/@babel/plugin-transform-dynamic-import": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", - "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", "dev": true, "license": "MIT", "dependencies": { @@ -1419,14 +1299,12 @@ } }, "node_modules/@babel/plugin-transform-explicit-resource-management": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.6.tgz", - "integrity": "sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg==", + "version": "7.28.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/plugin-transform-destructuring": "^7.28.5" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0" }, "engines": { "node": ">=6.9.0" @@ -1436,12 +1314,11 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.6.tgz", - "integrity": "sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==", + "version": "7.28.5", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1452,8 +1329,6 @@ }, "node_modules/@babel/plugin-transform-export-namespace-from": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", - "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1468,8 +1343,7 @@ }, "node_modules/@babel/plugin-transform-for-of": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", - "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -1484,8 +1358,7 @@ }, "node_modules/@babel/plugin-transform-function-name": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", - "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.27.1", @@ -1500,13 +1373,11 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.28.6.tgz", - "integrity": "sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==", + "version": "7.27.1", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1517,8 +1388,7 @@ }, "node_modules/@babel/plugin-transform-literals": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", - "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1531,13 +1401,11 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.6.tgz", - "integrity": "sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==", + "version": "7.28.5", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1548,8 +1416,7 @@ }, "node_modules/@babel/plugin-transform-member-expression-literals": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", - "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1563,8 +1430,7 @@ }, "node_modules/@babel/plugin-transform-modules-amd": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", - "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.27.1", @@ -1578,13 +1444,12 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz", - "integrity": "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==", + "version": "7.27.1", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1594,9 +1459,8 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.0.tgz", - "integrity": "sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==", + "version": "7.28.5", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.28.6", @@ -1613,8 +1477,7 @@ }, "node_modules/@babel/plugin-transform-modules-umd": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", - "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.27.1", @@ -1628,9 +1491,8 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz", - "integrity": "sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==", + "version": "7.27.1", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.28.5", @@ -1645,8 +1507,7 @@ }, "node_modules/@babel/plugin-transform-new-target": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", - "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1659,13 +1520,11 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.28.6.tgz", - "integrity": "sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==", + "version": "7.27.1", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1675,13 +1534,11 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.28.6.tgz", - "integrity": "sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==", + "version": "7.27.1", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1691,17 +1548,15 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.6.tgz", - "integrity": "sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==", + "version": "7.28.4", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/plugin-transform-destructuring": "^7.28.5", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0", "@babel/plugin-transform-parameters": "^7.27.7", - "@babel/traverse": "^7.28.6" + "@babel/traverse": "^7.28.4" }, "engines": { "node": ">=6.9.0" @@ -1712,8 +1567,7 @@ }, "node_modules/@babel/plugin-transform-object-super": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", - "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -1727,13 +1581,11 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.28.6.tgz", - "integrity": "sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==", + "version": "7.27.1", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1743,12 +1595,11 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.6.tgz", - "integrity": "sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==", + "version": "7.28.5", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { @@ -1760,8 +1611,7 @@ }, "node_modules/@babel/plugin-transform-parameters": { "version": "7.27.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", - "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1774,14 +1624,12 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.28.6.tgz", - "integrity": "sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==", + "version": "7.27.1", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1791,15 +1639,13 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.28.6.tgz", - "integrity": "sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==", + "version": "7.27.1", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-create-class-features-plugin": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1810,8 +1656,7 @@ }, "node_modules/@babel/plugin-transform-property-literals": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", - "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1825,8 +1670,7 @@ }, "node_modules/@babel/plugin-transform-react-display-name": { "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz", - "integrity": "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1839,16 +1683,15 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.28.6.tgz", - "integrity": "sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow==", + "version": "7.27.1", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/plugin-syntax-jsx": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1859,8 +1702,7 @@ }, "node_modules/@babel/plugin-transform-react-jsx-development": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz", - "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", + "dev": true, "license": "MIT", "dependencies": { "@babel/plugin-transform-react-jsx": "^7.27.1" @@ -1874,8 +1716,7 @@ }, "node_modules/@babel/plugin-transform-react-pure-annotations": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz", - "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", @@ -1889,12 +1730,11 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.0.tgz", - "integrity": "sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==", + "version": "7.28.4", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1904,14 +1744,12 @@ } }, "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.28.6.tgz", - "integrity": "sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==", + "version": "7.27.1", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.28.5", - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1922,8 +1760,7 @@ }, "node_modules/@babel/plugin-transform-reserved-words": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", - "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1937,8 +1774,7 @@ }, "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", - "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1951,12 +1787,11 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.28.6.tgz", - "integrity": "sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==", + "version": "7.27.1", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { @@ -1968,8 +1803,7 @@ }, "node_modules/@babel/plugin-transform-sticky-regex": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", - "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1983,8 +1817,7 @@ }, "node_modules/@babel/plugin-transform-template-literals": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", - "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1998,8 +1831,7 @@ }, "node_modules/@babel/plugin-transform-typeof-symbol": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", - "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -2012,16 +1844,15 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.6.tgz", - "integrity": "sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==", + "version": "7.28.5", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-create-class-features-plugin": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-create-class-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/plugin-syntax-typescript": "^7.28.6" + "@babel/plugin-syntax-typescript": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2032,8 +1863,7 @@ }, "node_modules/@babel/plugin-transform-unicode-escapes": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", - "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -2046,14 +1876,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.28.6.tgz", - "integrity": "sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==", + "version": "7.27.1", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.28.5", - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2064,8 +1892,7 @@ }, "node_modules/@babel/plugin-transform-unicode-regex": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", - "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", @@ -2079,14 +1906,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.28.6.tgz", - "integrity": "sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==", + "version": "7.27.1", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.28.5", - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2097,8 +1922,7 @@ }, "node_modules/@babel/preset-env": { "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.4.tgz", - "integrity": "sha512-v0QtNd81v/xKj4gNKeuAerQ/azeNn/G1B1qMLeXOcV8+4TWlD2j3NV1u8q29SDFBXx/NBq5kyEAO+0mpRgacjA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/compat-data": "^7.16.4", @@ -2185,8 +2009,7 @@ }, "node_modules/@babel/preset-modules": { "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz", - "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", @@ -2201,8 +2024,7 @@ }, "node_modules/@babel/preset-react": { "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.7.tgz", - "integrity": "sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.16.7", @@ -2221,8 +2043,7 @@ }, "node_modules/@babel/preset-typescript": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz", - "integrity": "sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -2239,9 +2060,8 @@ } }, "node_modules/@babel/register": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.28.6.tgz", - "integrity": "sha512-pgcbbEl/dWQYb6L6Yew6F94rdwygfuv+vJ/tXfwIOYAfPB6TNWpXUMEtEq3YuTeHRdvMIhvz13bkT9CNaS+wqA==", + "version": "7.28.3", + "dev": true, "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", @@ -2258,32 +2078,16 @@ } }, "node_modules/@babel/runtime": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", - "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs2": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.28.6.tgz", - "integrity": "sha512-pOHfxftxpetWUeBacCB3ZOPc/OO6hiT9MLv0qd9j474khiCcduwO8uuJI3N7vX3m8GJotTT6lxlA89TS/PylGg==", + "version": "7.28.4", "dev": true, "license": "MIT", - "dependencies": { - "core-js": "^2.6.12" - }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/runtime-corejs3": { "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.8.tgz", - "integrity": "sha512-3fKhuICS1lMz0plI5ktOE/yEtBRMVxplzRkdn6mJQ197XiY0JnrzYV0+Mxozq3JZ8SBV9Ecurmw1XsGbwOf+Sg==", + "dev": true, "license": "MIT", "dependencies": { "core-js-pure": "^3.20.2", @@ -2294,31 +2098,29 @@ } }, "node_modules/@babel/template": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", - "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "version": "7.27.2", + "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", - "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "version": "7.28.5", + "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.5", "debug": "^4.3.1" }, "engines": { @@ -2326,9 +2128,8 @@ } }, "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "version": "7.28.5", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", @@ -2340,8 +2141,7 @@ }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" @@ -2352,8 +2152,7 @@ }, "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", @@ -2362,8 +2161,6 @@ }, "node_modules/@es-joy/jsdoccomment": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.12.0.tgz", - "integrity": "sha512-Gw4/j9v36IKY8ET+W0GoOzrRw17xjf21EIFFRL3zx21fF5MnqmeNpNi+PU/LKjqLpPb2Pw2XdlJbYM31VVo/PQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2377,8 +2174,6 @@ }, "node_modules/@es-joy/jsdoccomment/node_modules/comment-parser": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.2.4.tgz", - "integrity": "sha512-pm0b+qv+CkWNriSTMsfnjChF9kH0kxz55y44Wo5le9qLxMj5xDQAaEd9ZN1ovSuk9CsrncWaFwgpOMg7ClJwkw==", "dev": true, "license": "MIT", "engines": { @@ -2387,8 +2182,6 @@ }, "node_modules/@es-joy/jsdoccomment/node_modules/jsdoc-type-pratt-parser": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.0.0.tgz", - "integrity": "sha512-sUuj2j48wxrEpbFjDp1sAesAxPiLT+z0SWVmMafyIINs6Lj5gIPKh3VrkBZu4E/Dv+wHpOot0m6H8zlHQjwqeQ==", "dev": true, "license": "MIT", "engines": { @@ -2396,9 +2189,7 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "version": "4.9.0", "dev": true, "license": "MIT", "dependencies": { @@ -2416,8 +2207,6 @@ }, "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2429,8 +2218,6 @@ }, "node_modules/@eslint-community/regexpp": { "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true, "license": "MIT", "engines": { @@ -2439,8 +2226,7 @@ }, "node_modules/@eslint/eslintrc": { "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, "license": "MIT", "dependencies": { "ajv": "^6.12.4", @@ -2459,8 +2245,7 @@ }, "node_modules/@eslint/eslintrc/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -2475,8 +2260,7 @@ }, "node_modules/@eslint/eslintrc/node_modules/argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" @@ -2484,8 +2268,7 @@ }, "node_modules/@eslint/eslintrc/node_modules/ignore": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 4" @@ -2493,8 +2276,7 @@ }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dev": true, "license": "MIT", "dependencies": { "argparse": "^1.0.7", @@ -2506,54 +2288,54 @@ }, "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, "license": "MIT" }, "node_modules/@eslint/eslintrc/node_modules/sprintf-js": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, "license": "BSD-3-Clause" }, "node_modules/@exabyte-io/eslint-config": { - "version": "2022.11.17-0", - "resolved": "https://registry.npmjs.org/@exabyte-io/eslint-config/-/eslint-config-2022.11.17-0.tgz", - "integrity": "sha512-BYTDSqvjj6ZiWb8l46T5BKrVfkelct+vK2mh7joHu5UWtJMUzLkb0KQMV1+6SUy4xHFnws33XS7/+JSW1yeZOQ==", + "version": "2025.5.13-0", + "resolved": "https://registry.npmjs.org/@exabyte-io/eslint-config/-/eslint-config-2025.5.13-0.tgz", + "integrity": "sha512-uZcq9jzmDHl+N71GYEM7l0z6mwyYfuZdNA/bIyql6Mp2H++Oot62nIoMhgvds1r7dbrtL/3jD3Xv0YDj12NiYw==", "dev": true, "license": "Apache-2.0", "engines": { "node": ">=12.0.0" }, "peerDependencies": { - "@babel/eslint-parser": "7.16.3", - "@babel/plugin-proposal-class-properties": "7.16.0", - "@babel/preset-env": "7.16.4", - "@babel/preset-react": "7.16.7", + "@babel/eslint-parser": "^7.16.3", + "@babel/plugin-proposal-class-properties": "^7.16.0", + "@babel/preset-env": "^7.16.4", + "@babel/preset-react": "^7.16.7", "@babel/register": "^7.16.0", - "@babel/runtime-corejs3": "7.16.8", - "eslint": "7.32.0", - "eslint-config-airbnb": "19.0.2", + "@babel/runtime-corejs3": "^7.16.8", + "@typescript-eslint/eslint-plugin": "^5.56.0", + "@typescript-eslint/parser": "^5.56.0", + "eslint": "^7.32.0", + "eslint-config-airbnb": "^19.0.2", "eslint-config-prettier": "^8.5.0", "eslint-import-resolver-exports": "^1.0.0-beta.2", "eslint-import-resolver-meteor": "^0.4.0", "eslint-import-resolver-node": "^0.3.6", - "eslint-plugin-import": "2.25.3", - "eslint-plugin-jsdoc": "37.1.0", - "eslint-plugin-jsx-a11y": "6.5.1", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jsdoc": "^37.1.0 || ^50.6.0", + "eslint-plugin-jsonc": "^2.12.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-mui-path-imports": "^0.0.15", "eslint-plugin-prettier": "^4.2.1", - "eslint-plugin-react": "7.30.0", - "eslint-plugin-simple-import-sort": "7.0.0" + "eslint-plugin-react": "^7.30.0", + "eslint-plugin-simple-import-sort": "^7.0.0", + "jsonc-eslint-parser": "^2.1.0" } }, "node_modules/@exabyte-io/periodic-table.js": { - "version": "2022.5.28-0", - "resolved": "https://registry.npmjs.org/@exabyte-io/periodic-table.js/-/periodic-table.js-2022.5.28-0.tgz", - "integrity": "sha512-BA+u07dkt4e8yqcBHTv5szXXeMyNFcW0G2Ki3Vbugv6ku6dfl4+Sji8cs5PUr+hkYptc7rTg5r89lfr6Vt+oJw==", + "version": "2022.6.8-0", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@babel/cli": "7.16.0", "@babel/core": "7.16.0", @@ -2569,11 +2351,8 @@ }, "node_modules/@exabyte-io/periodic-table.js/node_modules/@babel/core": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", - "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.16.0", "@babel/generator": "^7.16.0", @@ -2601,11 +2380,8 @@ }, "node_modules/@exabyte-io/periodic-table.js/node_modules/@babel/register": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.16.0.tgz", - "integrity": "sha512-lzl4yfs0zVXnooeLE0AAfYaT7F3SPA8yB2Bj4W1BiZwLbMS3MZH35ZvCWSRHvneUugwuM+Wsnrj7h0F7UmU3NQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "clone-deep": "^4.0.1", "find-cache-dir": "^2.0.0", @@ -2622,17 +2398,12 @@ }, "node_modules/@exabyte-io/periodic-table.js/node_modules/underscore": { "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha512-5WsVTFcH1ut/kkhAaHf4PVgI8c7++GiVcpCGxPouI6ZVjsqPnSDf8h/8HtVqc0t4fzRXwnMK70EcZeAs3PIddg==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@humanwhocodes/config-array": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "deprecated": "Use @eslint/config-array instead", + "dev": true, "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^1.2.0", @@ -2645,15 +2416,11 @@ }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "deprecated": "Use @eslint/object-schema instead", + "dev": true, "license": "BSD-3-Clause" }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "license": "ISC", "dependencies": { @@ -2669,8 +2436,6 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "license": "MIT", "dependencies": { @@ -2679,8 +2444,6 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", "dependencies": { @@ -2693,8 +2456,6 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "dev": true, "license": "MIT", "dependencies": { @@ -2707,8 +2468,6 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", "dependencies": { @@ -2720,8 +2479,6 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", "dependencies": { @@ -2736,8 +2493,6 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", "dependencies": { @@ -2749,8 +2504,6 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "license": "MIT", "engines": { @@ -2759,15 +2512,11 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/sprintf-js": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, "license": "MIT", "engines": { @@ -2776,8 +2525,7 @@ }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", @@ -2786,8 +2534,6 @@ }, "node_modules/@jridgewell/remapping": { "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2797,8 +2543,7 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -2806,14 +2551,12 @@ }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -2828,16 +2571,13 @@ "license": "MIT" }, "node_modules/@mat3ra/ade": { - "version": "2025.11.19-0", - "resolved": "https://registry.npmjs.org/@mat3ra/ade/-/ade-2025.11.19-0.tgz", - "integrity": "sha512-1rkm0vRH1fBKx3+NSaYUQkckQPW8X3BeijcEWKfazB/qiNDHIgJ6bnyVZdegt6z+6SJcBLVkE4XUsuyw74O0Yg==", + "version": "0.0.0", + "resolved": "git+ssh://git@github.com/Exabyte-io/ade.git#6d494337d83e1b22fe272ff74cc1b6842a7c6561", + "integrity": "sha512-6c0/WS3y8i1Su1PDiIQKWkAktlFlJN8etFHGVUmYBWEwb7yFlg4fGccvOpLAhqga5Yk/SPcA7NEuMB+BwnpyXQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@types/react-jsonschema-form": "^1.7.13", - "lodash": "^4.17.21", - "nunjucks": "^3.2.4", - "react-jsonschema-form": "^1.8.1" + "lodash": "^4.17.21" }, "engines": { "node": ">=20.0.0" @@ -2851,9 +2591,9 @@ } }, "node_modules/@mat3ra/code": { - "version": "2025.8.7-0", - "resolved": "https://registry.npmjs.org/@mat3ra/code/-/code-2025.8.7-0.tgz", - "integrity": "sha512-Bx5mFWQfpNU70vgSt2CR9zYWNsW7b8mU5emmPrsnGKIfKi1UH6xKwhaz7Fy77bju5NHi0iv3IE9UDXf0nr6SGQ==", + "version": "0.0.0", + "resolved": "git+ssh://git@github.com/Exabyte-io/code.git#3b42a844bebd5de65dc3877f7602521af308a09e", + "integrity": "sha512-M4tZbiS73aMZSuKS40xUeMyaq5MAEMXci98k3Ih9miON/6Z/4fWXWS6bLpqF9r5tzKPqUXCYYov3RXIc6pYmYg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2891,9 +2631,9 @@ } }, "node_modules/@mat3ra/esse": { - "version": "2025.11.19-0", - "resolved": "https://registry.npmjs.org/@mat3ra/esse/-/esse-2025.11.19-0.tgz", - "integrity": "sha512-FVj0gByZZLsaPlLOQlpO5hjO6MYGCUC0yThJN3fYPl7Agir0maHDKPIz1+4nU17/P0t5vjJ2oz60mpnwlVmY0A==", + "version": "0.0.0", + "resolved": "git+ssh://git@github.com/Exabyte-io/esse.git#c6b904537bf86f655a6a1f080a84816094138f37", + "integrity": "sha512-XHeaEaRtPdR9mpSjfsuRU3NHMicMM7p/5t/w7OuTsnTS10TJ327iSM3uzx4pHm62MqO9ChGrgUZXHoBg7JqCVA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2906,6 +2646,7 @@ "@babel/preset-typescript": "^7.27.0", "@babel/register": "^7.25.9", "@babel/runtime-corejs3": "^7.27.0", + "@mat3ra/utils": "^2025.11.20-0", "@types/chai": "^4.3.20", "@types/js-yaml": "^4.0.9", "@types/json-schema-merge-allof": "^0.6.5", @@ -2924,9 +2665,9 @@ } }, "node_modules/@mat3ra/esse/node_modules/@babel/cli": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.28.6.tgz", - "integrity": "sha512-6EUNcuBbNkj08Oj4gAZ+BUU8yLCgKzgVX4gaTh09Ya2C8ICM4P+G30g4m3akRxSYAp3A/gnWchrNst7px4/nUQ==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.28.3.tgz", + "integrity": "sha512-n1RU5vuCX0CsaqaXm9I0KUCNKNQMy5epmzl/xdSSm70bSqhg9GWhgeosypyQLc0bK24+Xpk1WGzZlI9pJtkZdg==", "dev": true, "license": "MIT", "dependencies": { @@ -2954,21 +2695,21 @@ } }, "node_modules/@mat3ra/esse/node_modules/@babel/core": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", - "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", + "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-compilation-targets": "^7.28.6", - "@babel/helper-module-transforms": "^7.28.6", - "@babel/helpers": "^7.28.6", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/traverse": "^7.29.0", - "@babel/types": "^7.29.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -2985,9 +2726,9 @@ } }, "node_modules/@mat3ra/esse/node_modules/@babel/eslint-parser": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.28.6.tgz", - "integrity": "sha512-QGmsKi2PBO/MHSQk+AAgA9R6OHQr+VqnniFE0eMWZcVcfBZoA2dKn2hUsl3Csg/Plt9opRUWdY7//VXsrIlEiA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.28.5.tgz", + "integrity": "sha512-fcdRcWahONYo+JRnJg1/AekOacGvKx12Gu0qXJXFi2WBqQA1i7+O5PaxRB7kxE/Op94dExnCiiar6T09pvdHpA==", "dev": true, "license": "MIT", "dependencies": { @@ -3052,76 +2793,76 @@ } }, "node_modules/@mat3ra/esse/node_modules/@babel/preset-env": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.0.tgz", - "integrity": "sha512-fNEdfc0yi16lt6IZo2Qxk3knHVdfMYX33czNb4v8yWhemoBhibCpQK/uYHtSKIiO+p/zd3+8fYVXhQdOVV608w==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.5.tgz", + "integrity": "sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.29.0", - "@babel/helper-compilation-targets": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6", + "@babel/compat-data": "^7.28.5", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.6", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.3", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.28.6", - "@babel/plugin-syntax-import-attributes": "^7.28.6", + "@babel/plugin-syntax-import-assertions": "^7.27.1", + "@babel/plugin-syntax-import-attributes": "^7.27.1", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.27.1", - "@babel/plugin-transform-async-generator-functions": "^7.29.0", - "@babel/plugin-transform-async-to-generator": "^7.28.6", + "@babel/plugin-transform-async-generator-functions": "^7.28.0", + "@babel/plugin-transform-async-to-generator": "^7.27.1", "@babel/plugin-transform-block-scoped-functions": "^7.27.1", - "@babel/plugin-transform-block-scoping": "^7.28.6", - "@babel/plugin-transform-class-properties": "^7.28.6", - "@babel/plugin-transform-class-static-block": "^7.28.6", - "@babel/plugin-transform-classes": "^7.28.6", - "@babel/plugin-transform-computed-properties": "^7.28.6", + "@babel/plugin-transform-block-scoping": "^7.28.5", + "@babel/plugin-transform-class-properties": "^7.27.1", + "@babel/plugin-transform-class-static-block": "^7.28.3", + "@babel/plugin-transform-classes": "^7.28.4", + "@babel/plugin-transform-computed-properties": "^7.27.1", "@babel/plugin-transform-destructuring": "^7.28.5", - "@babel/plugin-transform-dotall-regex": "^7.28.6", + "@babel/plugin-transform-dotall-regex": "^7.27.1", "@babel/plugin-transform-duplicate-keys": "^7.27.1", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.0", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", "@babel/plugin-transform-dynamic-import": "^7.27.1", - "@babel/plugin-transform-explicit-resource-management": "^7.28.6", - "@babel/plugin-transform-exponentiation-operator": "^7.28.6", + "@babel/plugin-transform-explicit-resource-management": "^7.28.0", + "@babel/plugin-transform-exponentiation-operator": "^7.28.5", "@babel/plugin-transform-export-namespace-from": "^7.27.1", "@babel/plugin-transform-for-of": "^7.27.1", "@babel/plugin-transform-function-name": "^7.27.1", - "@babel/plugin-transform-json-strings": "^7.28.6", + "@babel/plugin-transform-json-strings": "^7.27.1", "@babel/plugin-transform-literals": "^7.27.1", - "@babel/plugin-transform-logical-assignment-operators": "^7.28.6", + "@babel/plugin-transform-logical-assignment-operators": "^7.28.5", "@babel/plugin-transform-member-expression-literals": "^7.27.1", "@babel/plugin-transform-modules-amd": "^7.27.1", - "@babel/plugin-transform-modules-commonjs": "^7.28.6", - "@babel/plugin-transform-modules-systemjs": "^7.29.0", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-modules-systemjs": "^7.28.5", "@babel/plugin-transform-modules-umd": "^7.27.1", "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.0", "@babel/plugin-transform-new-target": "^7.27.1", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.28.6", - "@babel/plugin-transform-numeric-separator": "^7.28.6", - "@babel/plugin-transform-object-rest-spread": "^7.28.6", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", + "@babel/plugin-transform-numeric-separator": "^7.27.1", + "@babel/plugin-transform-object-rest-spread": "^7.28.4", "@babel/plugin-transform-object-super": "^7.27.1", - "@babel/plugin-transform-optional-catch-binding": "^7.28.6", - "@babel/plugin-transform-optional-chaining": "^7.28.6", + "@babel/plugin-transform-optional-catch-binding": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.28.5", "@babel/plugin-transform-parameters": "^7.27.7", - "@babel/plugin-transform-private-methods": "^7.28.6", - "@babel/plugin-transform-private-property-in-object": "^7.28.6", + "@babel/plugin-transform-private-methods": "^7.27.1", + "@babel/plugin-transform-private-property-in-object": "^7.27.1", "@babel/plugin-transform-property-literals": "^7.27.1", - "@babel/plugin-transform-regenerator": "^7.29.0", - "@babel/plugin-transform-regexp-modifiers": "^7.28.6", + "@babel/plugin-transform-regenerator": "^7.28.4", + "@babel/plugin-transform-regexp-modifiers": "^7.27.1", "@babel/plugin-transform-reserved-words": "^7.27.1", "@babel/plugin-transform-shorthand-properties": "^7.27.1", - "@babel/plugin-transform-spread": "^7.28.6", + "@babel/plugin-transform-spread": "^7.27.1", "@babel/plugin-transform-sticky-regex": "^7.27.1", "@babel/plugin-transform-template-literals": "^7.27.1", "@babel/plugin-transform-typeof-symbol": "^7.27.1", "@babel/plugin-transform-unicode-escapes": "^7.27.1", - "@babel/plugin-transform-unicode-property-regex": "^7.28.6", + "@babel/plugin-transform-unicode-property-regex": "^7.27.1", "@babel/plugin-transform-unicode-regex": "^7.27.1", - "@babel/plugin-transform-unicode-sets-regex": "^7.28.6", + "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.15", "babel-plugin-polyfill-corejs3": "^0.14.0", @@ -3173,9 +2914,9 @@ } }, "node_modules/@mat3ra/esse/node_modules/@babel/runtime-corejs3": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.29.0.tgz", - "integrity": "sha512-TgUkdp71C9pIbBcHudc+gXZnihEDOjUAmXO1VO4HHGES7QLZcShR0stfKIxLSNIYx2fqhmJChOjm/wkF8wv4gA==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.28.4.tgz", + "integrity": "sha512-h7iEYiW4HebClDEhtvFObtPmIvrd1SSfpI9EhOeKk4CtIK/ngBWFpuhCzhdmRKtg71ylcue+9I6dv54XYO1epQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3185,144 +2926,656 @@ "node": ">=6.9.0" } }, - "node_modules/@mat3ra/esse/node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.15.tgz", - "integrity": "sha512-hR3GwrRwHUfYwGfrisXPIDP3JcYfBrW7wKE7+Au6wDYl7fm/ka1NEII6kORzxNU556JjfidZeBsO10kYvtV1aw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.28.6", - "@babel/helper-define-polyfill-provider": "^0.6.6", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@mat3ra/esse/node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.0.tgz", - "integrity": "sha512-AvDcMxJ34W4Wgy4KBIIePQTAOP1Ie2WFwkQp3dB7FQ/f0lI5+nM96zUnYEOE1P9sEg0es5VCP0HxiWu5fUHZAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.6", - "core-js-compat": "^3.48.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@mat3ra/esse/node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.6.tgz", - "integrity": "sha512-hYm+XLYRMvupxiQzrvXUj7YyvFFVfv5gI0R71AJzudg1g2AI2vyCPPIFEBjk162/wFzti3inBHo7isWFuEVS/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.6" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@mat3ra/esse/node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/@mat3ra/esse/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@mat3ra/esse/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@mat3ra/ide": { - "version": "2025.11.19-0", - "resolved": "https://registry.npmjs.org/@mat3ra/ide/-/ide-2025.11.19-0.tgz", - "integrity": "sha512-RG/qKLgOZ7akAkv4LWTn6WtMF/sx1JECdZF9CF7dHDR2o1jbYurXRyvccVZbb823SDZWB4rUdWu9+b/mOkDeCA==", + "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils": { + "version": "2025.11.20-0", + "resolved": "https://registry.npmjs.org/@mat3ra/utils/-/utils-2025.11.20-0.tgz", + "integrity": "sha512-igkswFIPrvIsOKiGdLE6ifgKGa3nruepjq2pPs9us+gHRn4tCaFNsBJqHw3ysw1dLgCtoYhHyYbMdpQu46+FCw==", "dev": true, - "license": "Apache-2.0", - "peer": true, + "license": "ISC", "dependencies": { "@babel/cli": "7.16.0", - "@babel/core": "7.16.0", + "@babel/core": "7.24.1", "@babel/eslint-parser": "7.16.3", "@babel/plugin-proposal-class-properties": "7.16.0", "@babel/preset-env": "7.16.4", "@babel/preset-react": "7.16.7", + "@babel/preset-typescript": "^7.22.5", "@babel/register": "^7.16.0", "@babel/runtime-corejs3": "7.16.8", - "chai": "^4.3.4", + "crypto-js": "^4.1.1", + "js-yaml": "^4.1.0", "lodash": "^4.17.21", - "moment": "^2.17.1", - "pluralize": "^3.0.0" + "mathjs": "12.4.1", + "semver": "^7.5.3", + "ts-node": "^10.9.1", + "typescript": "^4.5.5", + "underscore": "^1.13.3", + "underscore.string": "^3.3.4", + "uuid": "8.3.2" }, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@mat3ra/code": "*", - "@mat3ra/esse": "*" + "node": ">=20.0.0" } }, - "node_modules/@mat3ra/ide/node_modules/@babel/core": { + "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/cli": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", - "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.16.0.tgz", + "integrity": "sha512-WLrM42vKX/4atIoQB+eb0ovUof53UUvecb4qGjU2PDDWRiZr50ZpiV8NpcLo7iSxeGYrRG0Mqembsa+UrTAV6Q==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-compilation-targets": "^7.16.0", - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helpers": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", + "commander": "^4.0.1", + "convert-source-map": "^1.1.0", + "fs-readdir-recursive": "^1.1.0", + "glob": "^7.0.0", + "make-dir": "^2.1.0", + "slash": "^2.0.0", "source-map": "^0.5.0" }, + "bin": { + "babel": "bin/babel.js", + "babel-external-helpers": "bin/babel-external-helpers.js" + }, "engines": { "node": ">=6.9.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" + "optionalDependencies": { + "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3", + "chokidar": "^3.4.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@mat3ra/made": { - "version": "2025.12.29-0", - "resolved": "https://registry.npmjs.org/@mat3ra/made/-/made-2025.12.29-0.tgz", - "integrity": "sha512-GbfjMWlP/WE+yUR2gviyFbfpCHbizlLbt1SoVy/eAuNxvxcpT8T2SY8jcZDrMB8c0S18jit11xFHL0Hisssivg==", + "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/cli/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@babel/core": "7.24.1", - "@exabyte-io/periodic-table.js": "2022.5.28-0", - "@types/chai": "^4.3.5", + "license": "MIT" + }, + "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/core": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.1.tgz", + "integrity": "sha512-F82udohVyIgGAY2VVj/g34TpFUG606rumIHjTfVbssPg2zTR7PuuEpZcX8JA6sgBfIYmJrFtWgPvHQuJamVqZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.24.1", + "@babel/parser": "^7.24.1", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/eslint-parser": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.16.3.tgz", + "integrity": "sha512-iB4ElZT0jAt7PKVaeVulOECdGe6UnmA/O0P9jlF5g5GBOwDVbna8AXhHRu4s27xQf6OkveyA8iTDv1jHdDejgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-scope": "^5.1.1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.11.0", + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/eslint-parser/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz", + "integrity": "sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz", + "integrity": "sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/preset-env": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.4.tgz", + "integrity": "sha512-v0QtNd81v/xKj4gNKeuAerQ/azeNn/G1B1qMLeXOcV8+4TWlD2j3NV1u8q29SDFBXx/NBq5kyEAO+0mpRgacjA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-compilation-targets": "^7.16.3", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.2", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-async-generator-functions": "^7.16.4", + "@babel/plugin-proposal-class-properties": "^7.16.0", + "@babel/plugin-proposal-class-static-block": "^7.16.0", + "@babel/plugin-proposal-dynamic-import": "^7.16.0", + "@babel/plugin-proposal-export-namespace-from": "^7.16.0", + "@babel/plugin-proposal-json-strings": "^7.16.0", + "@babel/plugin-proposal-logical-assignment-operators": "^7.16.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", + "@babel/plugin-proposal-numeric-separator": "^7.16.0", + "@babel/plugin-proposal-object-rest-spread": "^7.16.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-private-methods": "^7.16.0", + "@babel/plugin-proposal-private-property-in-object": "^7.16.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.16.0", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.16.0", + "@babel/plugin-transform-async-to-generator": "^7.16.0", + "@babel/plugin-transform-block-scoped-functions": "^7.16.0", + "@babel/plugin-transform-block-scoping": "^7.16.0", + "@babel/plugin-transform-classes": "^7.16.0", + "@babel/plugin-transform-computed-properties": "^7.16.0", + "@babel/plugin-transform-destructuring": "^7.16.0", + "@babel/plugin-transform-dotall-regex": "^7.16.0", + "@babel/plugin-transform-duplicate-keys": "^7.16.0", + "@babel/plugin-transform-exponentiation-operator": "^7.16.0", + "@babel/plugin-transform-for-of": "^7.16.0", + "@babel/plugin-transform-function-name": "^7.16.0", + "@babel/plugin-transform-literals": "^7.16.0", + "@babel/plugin-transform-member-expression-literals": "^7.16.0", + "@babel/plugin-transform-modules-amd": "^7.16.0", + "@babel/plugin-transform-modules-commonjs": "^7.16.0", + "@babel/plugin-transform-modules-systemjs": "^7.16.0", + "@babel/plugin-transform-modules-umd": "^7.16.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.0", + "@babel/plugin-transform-new-target": "^7.16.0", + "@babel/plugin-transform-object-super": "^7.16.0", + "@babel/plugin-transform-parameters": "^7.16.3", + "@babel/plugin-transform-property-literals": "^7.16.0", + "@babel/plugin-transform-regenerator": "^7.16.0", + "@babel/plugin-transform-reserved-words": "^7.16.0", + "@babel/plugin-transform-shorthand-properties": "^7.16.0", + "@babel/plugin-transform-spread": "^7.16.0", + "@babel/plugin-transform-sticky-regex": "^7.16.0", + "@babel/plugin-transform-template-literals": "^7.16.0", + "@babel/plugin-transform-typeof-symbol": "^7.16.0", + "@babel/plugin-transform-unicode-escapes": "^7.16.0", + "@babel/plugin-transform-unicode-regex": "^7.16.0", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.16.0", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.4.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.19.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/preset-modules": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz", + "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/preset-react": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.7.tgz", + "integrity": "sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-react-display-name": "^7.16.7", + "@babel/plugin-transform-react-jsx": "^7.16.7", + "@babel/plugin-transform-react-jsx-development": "^7.16.7", + "@babel/plugin-transform-react-pure-annotations": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/@babel/runtime-corejs3": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.8.tgz", + "integrity": "sha512-3fKhuICS1lMz0plI5ktOE/yEtBRMVxplzRkdn6mJQ197XiY0JnrzYV0+Mxozq3JZ8SBV9Ecurmw1XsGbwOf+Sg==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-js-pure": "^3.20.2", + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz", + "integrity": "sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.0", + "core-js-compat": "^3.18.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@mat3ra/esse/node_modules/@mat3ra/utils/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@mat3ra/esse/node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.15.tgz", + "integrity": "sha512-hR3GwrRwHUfYwGfrisXPIDP3JcYfBrW7wKE7+Au6wDYl7fm/ka1NEII6kORzxNU556JjfidZeBsO10kYvtV1aw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-define-polyfill-provider": "^0.6.6", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@mat3ra/esse/node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.0.tgz", + "integrity": "sha512-AvDcMxJ34W4Wgy4KBIIePQTAOP1Ie2WFwkQp3dB7FQ/f0lI5+nM96zUnYEOE1P9sEg0es5VCP0HxiWu5fUHZAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.6", + "core-js-compat": "^3.48.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@mat3ra/esse/node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.6.tgz", + "integrity": "sha512-hYm+XLYRMvupxiQzrvXUj7YyvFFVfv5gI0R71AJzudg1g2AI2vyCPPIFEBjk162/wFzti3inBHo7isWFuEVS/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.6" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@mat3ra/esse/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@mat3ra/esse/node_modules/complex.js": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.4.3.tgz", + "integrity": "sha512-UrQVSUur14tNX6tiP4y8T4w4FeJAX3bi2cIv0pu/DTLFNxoq7z2Yh83Vfzztj6Px3X/lubqQ9IrPp7Bpn6p4MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/@mat3ra/esse/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@mat3ra/esse/node_modules/fraction.js": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.4.tgz", + "integrity": "sha512-pwiTgt0Q7t+GHZA4yaLjObx4vXmmdcS0iSJ19o8d/goUGgItX9UZWKWNnLHehxviD8wU2IWRsnR8cD5+yOJP2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/@mat3ra/esse/node_modules/mathjs": { + "version": "12.4.1", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-12.4.1.tgz", + "integrity": "sha512-welnW3khgwYjPYvECFHO+xkCxAx9IKIIPDDWPi8B5rKAvmgoEHnQX9slEmHKZTNaJiE+OS4qrJJcB4sfDn/4sw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.24.0", + "complex.js": "^2.1.1", + "decimal.js": "^10.4.3", + "escape-latex": "^1.2.0", + "fraction.js": "4.3.4", + "javascript-natural-sort": "^0.7.1", + "seedrandom": "^3.0.5", + "tiny-emitter": "^2.1.0", + "typed-function": "^4.1.1" + }, + "bin": { + "mathjs": "bin/cli.js" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@mat3ra/esse/node_modules/typed-function": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.2.2.tgz", + "integrity": "sha512-VwaXim9Gp1bngi/q3do8hgttYn2uC3MoT/gfuMWylnj1IeZBUAyPddHZlo1K05BDoj8DYPpMdiHqH1dDYdJf2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@mat3ra/fixtures": { + "version": "0.0.0", + "resolved": "git+ssh://git@github.com/Exabyte-io/fixtures.git#7501b0dcc28848b48194085685d332828509efdb", + "integrity": "sha512-PNRccB63LtSYrLSxkVwfoMn/HEuin5vC2BkcgxsgXEFF66wC2SieFMlOuzIHP3HtsTnP2GBlUVHGQP6jeGInJg==", + "dev": true, + "license": "ISC", + "dependencies": { + "ts-node": "^10.9.1", + "typescript": "^5.0.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@mat3ra/fixtures/node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/@mat3ra/ide": { + "version": "2025.11.19-0", + "resolved": "https://registry.npmjs.org/@mat3ra/ide/-/ide-2025.11.19-0.tgz", + "integrity": "sha512-RG/qKLgOZ7akAkv4LWTn6WtMF/sx1JECdZF9CF7dHDR2o1jbYurXRyvccVZbb823SDZWB4rUdWu9+b/mOkDeCA==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@babel/cli": "7.16.0", + "@babel/core": "7.16.0", + "@babel/eslint-parser": "7.16.3", + "@babel/plugin-proposal-class-properties": "7.16.0", + "@babel/preset-env": "7.16.4", + "@babel/preset-react": "7.16.7", + "@babel/register": "^7.16.0", + "@babel/runtime-corejs3": "7.16.8", + "chai": "^4.3.4", + "lodash": "^4.17.21", + "moment": "^2.17.1", + "pluralize": "^3.0.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@mat3ra/code": "*", + "@mat3ra/esse": "*" + } + }, + "node_modules/@mat3ra/ide/node_modules/@babel/core": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", + "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helpers": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@mat3ra/made": { + "version": "2025.12.29-0", + "resolved": "https://registry.npmjs.org/@mat3ra/made/-/made-2025.12.29-0.tgz", + "integrity": "sha512-GbfjMWlP/WE+yUR2gviyFbfpCHbizlLbt1SoVy/eAuNxvxcpT8T2SY8jcZDrMB8c0S18jit11xFHL0Hisssivg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@babel/core": "7.24.1", + "@exabyte-io/periodic-table.js": "2022.5.28-0", + "@types/chai": "^4.3.5", "@types/chai-almost": "^1.0.3", "@types/mocha": "^10.0.1", "@types/node": "^20.4.2", @@ -3342,6 +3595,84 @@ "@mat3ra/esse": "*" } }, + "node_modules/@mat3ra/made/node_modules/@babel/register": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.16.0.tgz", + "integrity": "sha512-lzl4yfs0zVXnooeLE0AAfYaT7F3SPA8yB2Bj4W1BiZwLbMS3MZH35ZvCWSRHvneUugwuM+Wsnrj7h0F7UmU3NQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.0", + "source-map-support": "^0.5.16" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@mat3ra/made/node_modules/@exabyte-io/periodic-table.js": { + "version": "2022.5.28-0", + "resolved": "https://registry.npmjs.org/@exabyte-io/periodic-table.js/-/periodic-table.js-2022.5.28-0.tgz", + "integrity": "sha512-BA+u07dkt4e8yqcBHTv5szXXeMyNFcW0G2Ki3Vbugv6ku6dfl4+Sji8cs5PUr+hkYptc7rTg5r89lfr6Vt+oJw==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@babel/cli": "7.16.0", + "@babel/core": "7.16.0", + "@babel/eslint-parser": "7.16.3", + "@babel/plugin-proposal-class-properties": "7.16.0", + "@babel/preset-env": "7.16.4", + "@babel/register": "7.16.0", + "underscore": "1.8.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@mat3ra/made/node_modules/@exabyte-io/periodic-table.js/node_modules/@babel/core": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", + "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helpers": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@mat3ra/made/node_modules/underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha512-5WsVTFcH1ut/kkhAaHf4PVgI8c7++GiVcpCGxPouI6ZVjsqPnSDf8h/8HtVqc0t4fzRXwnMK70EcZeAs3PIddg==", + "dev": true, + "license": "MIT" + }, "node_modules/@mat3ra/mode": { "version": "2025.12.25-0", "resolved": "https://registry.npmjs.org/@mat3ra/mode/-/mode-2025.12.25-0.tgz", @@ -3534,9 +3865,9 @@ } }, "node_modules/@mat3ra/utils/node_modules/typed-function": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.2.2.tgz", - "integrity": "sha512-VwaXim9Gp1bngi/q3do8hgttYn2uC3MoT/gfuMWylnj1IeZBUAyPddHZlo1K05BDoj8DYPpMdiHqH1dDYdJf2A==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.2.1.tgz", + "integrity": "sha512-EGjWssW7Tsk4DGfE+5yluuljS1OGYWiI1J6e8puZz9nTMM51Oug8CD5Zo4gWMsOhq5BI+1bF+rWTm4Vbj3ivRA==", "dev": true, "license": "MIT", "engines": { @@ -3544,132 +3875,63 @@ } }, "node_modules/@mat3ra/wode": { - "version": "2026.2.9-0", - "resolved": "https://registry.npmjs.org/@mat3ra/wode/-/wode-2026.2.9-0.tgz", - "integrity": "sha512-MD6qBImtwQH7m/l8gjmuTxCM7p51jQnEOuwI1CnS9fBeGBpblYAptwHGS1qVYfjvC58pxFNqc7PmsFzl7/Mm3Q==", + "version": "0.0.0", + "resolved": "git+ssh://git@github.com/Exabyte-io/wode.git#33471cd073aa6990a8109b247ccd1d62e5cafa65", + "integrity": "sha512-9TLl92JVMrzRceVhuyc0jMdrtc/EzSnGrWrzafoHlEKf51WjUzAb/50MAFLKj+qDvmqzPGaifjpHZov9E1Trlw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@babel/cli": "7.16.0", - "@babel/core": "7.16.0", - "@babel/eslint-parser": "7.16.3", - "@babel/plugin-proposal-class-properties": "7.16.0", - "@babel/preset-env": "7.16.4", - "@babel/preset-react": "7.16.7", - "@babel/register": "^7.16.0", - "@babel/runtime-corejs3": "7.16.8", "@exabyte-io/periodic-table.js": "2022.6.8-0", + "@types/json-schema": "^7.0.15", + "@types/nunjucks": "^3.2.6", + "@types/react-jsonschema-form": "^1.7.13", "crypto-js": "^4.2.0", "js-yaml": "^4.1.0", "lodash": "^4.17.21", "mixwith": "^0.1.1", + "nunjucks": "^3.2.4", + "ts-node": "^10.9.2", + "typescript": "^5.6.6", "underscore": "^1.13.3", "underscore.string": "^3.3.4", - "v20": "^0.1.0" - }, - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "@mat3ra/ade": "*", - "@mat3ra/code": "*", - "@mat3ra/esse": "*", - "@mat3ra/ide": "*", - "@mat3ra/made": "*", - "@mat3ra/mode": "*", - "@mat3ra/standata": "*", - "@mat3ra/utils": "*" - } - }, - "node_modules/@mat3ra/wode/node_modules/@babel/core": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", - "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-compilation-targets": "^7.16.0", - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helpers": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@mat3ra/wode/node_modules/@babel/register": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.16.0.tgz", - "integrity": "sha512-lzl4yfs0zVXnooeLE0AAfYaT7F3SPA8yB2Bj4W1BiZwLbMS3MZH35ZvCWSRHvneUugwuM+Wsnrj7h0F7UmU3NQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.0", - "source-map-support": "^0.5.16" + "v20": "^0.1.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=20.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@mat3ra/ade": "*", + "@mat3ra/code": "*", + "@mat3ra/esse": "*", + "@mat3ra/ide": "*", + "@mat3ra/made": "*", + "@mat3ra/mode": "*", + "@mat3ra/standata": "*", + "@mat3ra/utils": "*" } }, - "node_modules/@mat3ra/wode/node_modules/@exabyte-io/periodic-table.js": { - "version": "2022.6.8-0", - "resolved": "https://registry.npmjs.org/@exabyte-io/periodic-table.js/-/periodic-table.js-2022.6.8-0.tgz", - "integrity": "sha512-tN9V+Q6AUo/RVn9qrgx4dV+1VI5GbBjwJGbx4+K+zIw2W8Rnwp2l22lj123Xj9wdFLpygyPruETCM04XJkPNuw==", + "node_modules/@mat3ra/wode/node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, - "hasInstallScript": true, "license": "Apache-2.0", - "dependencies": { - "@babel/cli": "7.16.0", - "@babel/core": "7.16.0", - "@babel/eslint-parser": "7.16.3", - "@babel/plugin-proposal-class-properties": "7.16.0", - "@babel/preset-env": "7.16.4", - "@babel/register": "7.16.0", - "underscore": "1.8.3" + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, "engines": { - "node": ">=8.0.0" + "node": ">=14.17" } }, - "node_modules/@mat3ra/wode/node_modules/@exabyte-io/periodic-table.js/node_modules/underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha512-5WsVTFcH1ut/kkhAaHf4PVgI8c7++GiVcpCGxPouI6ZVjsqPnSDf8h/8HtVqc0t4fzRXwnMK70EcZeAs3PIddg==", - "dev": true, - "license": "MIT" - }, "node_modules/@nicolo-ribaudo/chokidar-2": { "version": "2.1.8-no-fsevents.3", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", - "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", + "dev": true, "license": "MIT", "optional": true }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", "dev": true, "license": "MIT", "dependencies": { @@ -3678,8 +3940,6 @@ }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "license": "MIT", "dependencies": { @@ -3692,8 +3952,6 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "license": "MIT", "engines": { @@ -3702,8 +3960,6 @@ }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "license": "MIT", "dependencies": { @@ -3714,34 +3970,42 @@ "node": ">= 8" } }, + "node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, "node_modules/@tsconfig/node10": { "version": "1.0.12", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", - "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", + "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, "license": "MIT" }, "node_modules/@types/chai": { "version": "4.3.20", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz", - "integrity": "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==", "dev": true, "license": "MIT" }, @@ -3751,29 +4015,22 @@ "integrity": "sha512-NMLjvnFjgxS0Z36whNuoma2p/2Fu6m+dV8eddO8tRAztMAqTqYxFYGyJNsAsOlwx89siUMfxQ1Wdqew2xXsiEg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/chai": "*" } }, "node_modules/@types/js-yaml": { "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", - "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", "dev": true, "license": "MIT" }, "node_modules/@types/json-schema": { "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true, "license": "MIT" }, "node_modules/@types/json-schema-merge-allof": { "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@types/json-schema-merge-allof/-/json-schema-merge-allof-0.6.5.tgz", - "integrity": "sha512-5mS11ZUTyFNUVEMpK3uKoPb6BWL/nLgW/ln2VOiI8OOxKEYC4Gl9O3WjS5P49yqVTfkcbCAPKw3T1O4erUah5g==", "dev": true, "license": "MIT", "dependencies": { @@ -3782,22 +4039,16 @@ }, "node_modules/@types/json5": { "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true, "license": "MIT" }, "node_modules/@types/lodash": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.23.tgz", - "integrity": "sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA==", + "version": "4.17.20", "dev": true, "license": "MIT" }, "node_modules/@types/mathjs": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/mathjs/-/mathjs-5.0.1.tgz", - "integrity": "sha512-EFBuueI+BRed9bnUO6/9my55b4FH+VQIvqMm58h9JGbtaGCkqr3YSDhnmVbM1SJjF//8SURERSypzNwejOk7lA==", "dev": true, "license": "MIT", "dependencies": { @@ -3806,20 +4057,24 @@ }, "node_modules/@types/mocha": { "version": "10.0.10", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", - "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", "dev": true, "license": "MIT" }, "node_modules/@types/node": { - "version": "20.19.33", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.33.tgz", - "integrity": "sha512-Rs1bVAIdBs5gbTIKza/tgpMuG1k3U/UMJLWecIMxNdJFDMzcM5LOiLVRYh3PilWEYDIeUDv7bpiHPLPsbydGcw==", + "version": "20.19.25", + "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, + "node_modules/@types/nunjucks": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@types/nunjucks/-/nunjucks-3.2.6.tgz", + "integrity": "sha512-pHiGtf83na1nCzliuAdq8GowYiXvH5l931xZ0YEHaLMNFgynpEqx+IPStlu7UaDkehfvl01e4x/9Tpwhy7Ue3w==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/react": { "version": "19.2.13", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.13.tgz", @@ -3843,15 +4098,18 @@ }, "node_modules/@types/semver": { "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/sprintf-js": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@types/sprintf-js/-/sprintf-js-1.1.4.tgz", + "integrity": "sha512-aWK1reDYWxcjgcIIPmQi3u+OQDuYa9b+lr6eIsGWrekJ9vr1NSjr4Eab8oQ1iKuH1ltFHpXGyerAv1a3FMKxzQ==", "dev": true, "license": "MIT" }, "node_modules/@types/underscore": { "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.13.0.tgz", - "integrity": "sha512-L6LBgy1f0EFQZ+7uSA57+n2g/s4Qs5r06Vwrwn0/nuK1de+adz00NWaztRQ30aEqw5qOaWbPI8u2cGQ52lj6VA==", "dev": true, "license": "MIT" }, @@ -3861,15 +4119,12 @@ "integrity": "sha512-6J3Wp6PnuXhSxVSVaSoh9SKiormScoa2pPLKpZk5QsjKD3RKQZQj/mwBVfULd2MUl5gM/UlLSvr+cynd/7VWQA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/underscore": "*" } }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", "dev": true, "license": "MIT", "dependencies": { @@ -3902,9 +4157,7 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "version": "7.7.3", "dev": true, "license": "ISC", "bin": { @@ -3916,8 +4169,6 @@ }, "node_modules/@typescript-eslint/parser": { "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -3944,8 +4195,6 @@ }, "node_modules/@typescript-eslint/scope-manager": { "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "dev": true, "license": "MIT", "dependencies": { @@ -3962,8 +4211,6 @@ }, "node_modules/@typescript-eslint/type-utils": { "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", "dev": true, "license": "MIT", "dependencies": { @@ -3990,8 +4237,6 @@ }, "node_modules/@typescript-eslint/types": { "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "dev": true, "license": "MIT", "engines": { @@ -4004,8 +4249,6 @@ }, "node_modules/@typescript-eslint/typescript-estree": { "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -4031,9 +4274,7 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "version": "7.7.3", "dev": true, "license": "ISC", "bin": { @@ -4045,8 +4286,6 @@ }, "node_modules/@typescript-eslint/utils": { "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4071,9 +4310,7 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "version": "7.7.3", "dev": true, "license": "ISC", "bin": { @@ -4085,8 +4322,6 @@ }, "node_modules/@typescript-eslint/visitor-keys": { "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, "license": "MIT", "dependencies": { @@ -4103,8 +4338,6 @@ }, "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "license": "Apache-2.0", "engines": { @@ -4116,15 +4349,12 @@ }, "node_modules/a-sync-waterfall": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", - "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==", "dev": true, "license": "MIT" }, "node_modules/acorn": { "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -4135,8 +4365,7 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" @@ -4144,8 +4373,7 @@ }, "node_modules/acorn-walk": { "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, "license": "MIT", "dependencies": { "acorn": "^8.11.0" @@ -4156,8 +4384,7 @@ }, "node_modules/acorn-walk/node_modules/acorn": { "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -4168,8 +4395,6 @@ }, "node_modules/aggregate-error": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "license": "MIT", "dependencies": { @@ -4182,8 +4407,7 @@ }, "node_modules/ajv": { "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -4198,8 +4422,6 @@ }, "node_modules/ajv-formats": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, "license": "MIT", "dependencies": { @@ -4219,21 +4441,18 @@ "resolved": "https://registry.npmjs.org/almost-equal/-/almost-equal-0.0.0.tgz", "integrity": "sha512-/wvWNupeAr7sp7J2ZXvQvd97uyxsokx4TXdV6YMhd/EDwctlgY3wUGZCgQx1sJQyxU+c8EWRCWsLGOumdiS9aw==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/an-array": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/an-array/-/an-array-1.0.0.tgz", "integrity": "sha512-M175GYI7RmsYu24Ok383yZQa3eveDfNnmhTe3OQ3bm70bEovz2gWenH+ST/n32M8lrwLWk74hcPds5CDRPe2wg==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/ansi-colors": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -4241,8 +4460,6 @@ }, "node_modules/ansi-escapes": { "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4257,8 +4474,6 @@ }, "node_modules/ansi-escapes/node_modules/type-fest": { "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -4270,8 +4485,6 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "license": "MIT", "engines": { "node": ">=8" @@ -4279,8 +4492,6 @@ }, "node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -4294,9 +4505,7 @@ }, "node_modules/anymatch": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", @@ -4308,8 +4517,6 @@ }, "node_modules/append-transform": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", - "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", "dev": true, "license": "MIT", "dependencies": { @@ -4321,27 +4528,20 @@ }, "node_modules/archy": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", "dev": true, "license": "MIT" }, "node_modules/arg": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "license": "Python-2.0" }, "node_modules/aria-query": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -4358,7 +4558,6 @@ "integrity": "sha512-NiQJq0vH5nEebm7FMs52fli23nwCh+RBKZZtA5g5qUmqGAkb9n8/WOTW8zjDocLADXXM1CRanFfPTMdrI2yZwg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "almost-equal": "0.0.0", "an-array": "^1.0.0" @@ -4366,8 +4565,6 @@ }, "node_modules/array-buffer-byte-length": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, "license": "MIT", "dependencies": { @@ -4383,8 +4580,6 @@ }, "node_modules/array-includes": { "version": "3.1.9", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", - "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4406,8 +4601,6 @@ }, "node_modules/array-union": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, "license": "MIT", "engines": { @@ -4416,8 +4609,6 @@ }, "node_modules/array.prototype.flat": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", - "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", "dev": true, "license": "MIT", "dependencies": { @@ -4435,8 +4626,6 @@ }, "node_modules/array.prototype.flatmap": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", - "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, "license": "MIT", "dependencies": { @@ -4454,8 +4643,6 @@ }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4476,15 +4663,11 @@ }, "node_modules/asap": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", "dev": true, "license": "MIT" }, "node_modules/assertion-error": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true, "license": "MIT", "engines": { @@ -4493,15 +4676,12 @@ }, "node_modules/ast-types-flow": { "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", "dev": true, "license": "ISC" }, "node_modules/astral-regex": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -4509,8 +4689,6 @@ }, "node_modules/async-function": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", "dev": true, "license": "MIT", "engines": { @@ -4519,8 +4697,6 @@ }, "node_modules/available-typed-arrays": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4534,9 +4710,7 @@ } }, "node_modules/axe-core": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.1.tgz", - "integrity": "sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==", + "version": "4.11.0", "dev": true, "license": "MPL-2.0", "engines": { @@ -4545,16 +4719,11 @@ }, "node_modules/axobject-query": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", "dev": true, "license": "Apache-2.0" }, "node_modules/babel-eslint": { "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", "dev": true, "license": "MIT", "dependencies": { @@ -4574,8 +4743,6 @@ }, "node_modules/babel-eslint/node_modules/eslint-visitor-keys": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -4584,8 +4751,7 @@ }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", + "dev": true, "license": "MIT", "dependencies": { "@babel/compat-data": "^7.17.7", @@ -4598,8 +4764,7 @@ }, "node_modules/babel-plugin-polyfill-corejs3": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz", - "integrity": "sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.3.0", @@ -4611,8 +4776,7 @@ }, "node_modules/babel-plugin-polyfill-regenerator": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.3.1" @@ -4623,14 +4787,12 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.9.19", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", - "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", + "version": "2.8.29", + "dev": true, "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.js" @@ -4638,9 +4800,7 @@ }, "node_modules/binary-extensions": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -4651,8 +4811,7 @@ }, "node_modules/brace-expansion": { "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -4661,9 +4820,7 @@ }, "node_modules/braces": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -4674,15 +4831,12 @@ }, "node_modules/browser-stdout": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true, "license": "ISC" }, "node_modules/browserslist": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", - "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "version": "4.28.0", + "dev": true, "funding": [ { "type": "opencollective", @@ -4699,11 +4853,11 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.9.0", - "caniuse-lite": "^1.0.30001759", - "electron-to-chromium": "^1.5.263", + "baseline-browser-mapping": "^2.8.25", + "caniuse-lite": "^1.0.30001754", + "electron-to-chromium": "^1.5.249", "node-releases": "^2.0.27", - "update-browserslist-db": "^1.2.0" + "update-browserslist-db": "^1.1.4" }, "bin": { "browserslist": "cli.js" @@ -4714,14 +4868,11 @@ }, "node_modules/buffer-from": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, "license": "MIT" }, "node_modules/caching-transform": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", - "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", "dev": true, "license": "MIT", "dependencies": { @@ -4736,8 +4887,6 @@ }, "node_modules/caching-transform/node_modules/make-dir": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "license": "MIT", "dependencies": { @@ -4752,8 +4901,6 @@ }, "node_modules/call-bind": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, "license": "MIT", "dependencies": { @@ -4771,8 +4918,6 @@ }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4785,8 +4930,6 @@ }, "node_modules/call-bound": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dev": true, "license": "MIT", "dependencies": { @@ -4802,8 +4945,7 @@ }, "node_modules/callsites": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -4811,8 +4953,6 @@ }, "node_modules/camelcase": { "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "license": "MIT", "engines": { @@ -4820,9 +4960,8 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001769", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001769.tgz", - "integrity": "sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==", + "version": "1.0.30001756", + "dev": true, "funding": [ { "type": "opencollective", @@ -4841,8 +4980,6 @@ }, "node_modules/chai": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", - "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", "dev": true, "license": "MIT", "dependencies": { @@ -4860,8 +4997,6 @@ }, "node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -4876,8 +5011,6 @@ }, "node_modules/charenc": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -4886,8 +5019,6 @@ }, "node_modules/check-error": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, "license": "MIT", "dependencies": { @@ -4899,8 +5030,7 @@ }, "node_modules/chokidar": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -4924,8 +5054,6 @@ }, "node_modules/clean-stack": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, "license": "MIT", "engines": { @@ -4934,8 +5062,6 @@ }, "node_modules/cli-cursor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "license": "MIT", "dependencies": { @@ -4947,8 +5073,6 @@ }, "node_modules/cli-truncate": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", "dev": true, "license": "MIT", "dependencies": { @@ -4964,8 +5088,6 @@ }, "node_modules/cliui": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "license": "ISC", "dependencies": { @@ -4976,15 +5098,11 @@ }, "node_modules/cliui/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, "node_modules/cliui/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { @@ -4993,8 +5111,6 @@ }, "node_modules/cliui/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -5008,8 +5124,6 @@ }, "node_modules/clone": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", "dev": true, "license": "MIT", "engines": { @@ -5018,8 +5132,7 @@ }, "node_modules/clone-deep": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4", @@ -5032,8 +5145,6 @@ }, "node_modules/cmd-ts": { "version": "0.13.0", - "resolved": "https://registry.npmjs.org/cmd-ts/-/cmd-ts-0.13.0.tgz", - "integrity": "sha512-nsnxf6wNIM/JAS7T/x/1JmbEsjH0a8tezXqqpaL0O6+eV0/aDEnRxwjxpu0VzDdRcaC1ixGSbRlUuf/IU59I4g==", "license": "MIT", "dependencies": { "chalk": "^4.0.0", @@ -5044,8 +5155,6 @@ }, "node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -5056,21 +5165,16 @@ }, "node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, "node_modules/colorette": { "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true, "license": "MIT" }, "node_modules/commander": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, "license": "MIT", "engines": { "node": ">= 6" @@ -5078,8 +5182,6 @@ }, "node_modules/comment-parser": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.0.tgz", - "integrity": "sha512-hRpmWIKgzd81vn0ydoWoyPoALEOnF4wt8yKD35Ib1D6XC2siLiYaiqfGkYrunuKdsXGwpBpHU3+9r+RVw2NZfA==", "dev": true, "license": "MIT", "engines": { @@ -5088,14 +5190,11 @@ }, "node_modules/commondir": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true, "license": "MIT" }, "node_modules/complex.js": { "version": "2.0.11", - "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.0.11.tgz", - "integrity": "sha512-6IArJLApNtdg1P1dFtn3dnyzoZBEF0MwMnrfF1exSBRpZYoy4yieMkpZhQDC0uwctw48vii0CFVyHfpgZ/DfGw==", "dev": true, "license": "MIT OR GPL-2.0", "engines": { @@ -5104,8 +5203,6 @@ }, "node_modules/compute-gcd": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/compute-gcd/-/compute-gcd-1.2.1.tgz", - "integrity": "sha512-TwMbxBNz0l71+8Sc4czv13h4kEqnchV9igQZBi6QUaz09dnz13juGnnaWWJTRsP3brxOoxeB4SA2WELLw1hCtg==", "dev": true, "dependencies": { "validate.io-array": "^1.0.3", @@ -5115,8 +5212,6 @@ }, "node_modules/compute-lcm": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/compute-lcm/-/compute-lcm-1.1.2.tgz", - "integrity": "sha512-OFNPdQAXnQhDSKioX8/XYT6sdUlXwpeMjfd6ApxMJfyZ4GxmLR1xvMERctlYhlHwIiz6CSpBc2+qYKjHGZw4TQ==", "dev": true, "dependencies": { "compute-gcd": "^1.2.1", @@ -5127,36 +5222,22 @@ }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, "license": "MIT" }, "node_modules/confusing-browser-globals": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", "dev": true, "license": "MIT" }, "node_modules/convert-source-map": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "license": "MIT" - }, - "node_modules/core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", "dev": true, - "hasInstallScript": true, "license": "MIT" }, "node_modules/core-js-compat": { - "version": "3.48.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.48.0.tgz", - "integrity": "sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q==", + "version": "3.47.0", + "dev": true, "license": "MIT", "dependencies": { "browserslist": "^4.28.1" @@ -5167,9 +5248,8 @@ } }, "node_modules/core-js-pure": { - "version": "3.48.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.48.0.tgz", - "integrity": "sha512-1slJgk89tWC51HQ1AEqG+s2VuwpTRr8ocu4n20QUcH1v9lAN0RXen0Q0AABa/DK1I7RrNWLucplOHMx8hfTGTw==", + "version": "3.47.0", + "dev": true, "hasInstallScript": true, "license": "MIT", "funding": { @@ -5179,14 +5259,12 @@ }, "node_modules/create-require": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, "license": "MIT" }, "node_modules/cross-spawn": { "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -5199,8 +5277,6 @@ }, "node_modules/crypt": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -5209,8 +5285,6 @@ }, "node_modules/crypto-js": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", - "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", "dev": true, "license": "MIT" }, @@ -5223,22 +5297,16 @@ }, "node_modules/dag-map": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/dag-map/-/dag-map-1.0.2.tgz", - "integrity": "sha512-+LSAiGFwQ9dRnRdOeaj7g47ZFJcOUPukAP8J3A3fuZ1g9Y44BG+P1sgApjLXTQPOzC4+7S9Wr8kXsfpINM4jpw==", "dev": true, "license": "MIT" }, "node_modules/damerau-levenshtein": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true, "license": "BSD-2-Clause" }, "node_modules/data-view-buffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5255,8 +5323,6 @@ }, "node_modules/data-view-byte-length": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5273,8 +5339,6 @@ }, "node_modules/data-view-byte-offset": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5291,8 +5355,6 @@ }, "node_modules/debug": { "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -5308,8 +5370,6 @@ }, "node_modules/decamelize": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, "license": "MIT", "engines": { @@ -5318,15 +5378,11 @@ }, "node_modules/decimal.js": { "version": "10.6.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", - "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", "dev": true, "license": "MIT" }, "node_modules/deep-eql": { "version": "4.1.4", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", - "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", "dev": true, "license": "MIT", "dependencies": { @@ -5338,14 +5394,11 @@ }, "node_modules/deep-is": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, "license": "MIT" }, "node_modules/default-require-extensions": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", - "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", "dev": true, "license": "MIT", "dependencies": { @@ -5360,8 +5413,6 @@ }, "node_modules/define-data-property": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "license": "MIT", "dependencies": { @@ -5378,8 +5429,6 @@ }, "node_modules/define-properties": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "license": "MIT", "dependencies": { @@ -5396,24 +5445,29 @@ }, "node_modules/didyoumean": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", "license": "Apache-2.0" }, "node_modules/diff": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, + "node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/dir-glob": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "license": "MIT", "dependencies": { @@ -5425,8 +5479,7 @@ }, "node_modules/doctrine": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" @@ -5437,8 +5490,6 @@ }, "node_modules/dunder-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "dev": true, "license": "MIT", "dependencies": { @@ -5452,28 +5503,22 @@ }, "node_modules/eastasianwidth": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true, "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.286", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", - "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", + "version": "1.5.257", + "dev": true, "license": "ISC" }, "node_modules/emoji-regex": { "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true, "license": "MIT" }, "node_modules/enquirer": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, "license": "MIT", "dependencies": { "ansi-colors": "^4.1.1", @@ -5484,9 +5529,7 @@ } }, "node_modules/es-abstract": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz", - "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==", + "version": "1.24.0", "dev": true, "license": "MIT", "dependencies": { @@ -5554,8 +5597,6 @@ }, "node_modules/es-define-property": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, "license": "MIT", "engines": { @@ -5564,8 +5605,6 @@ }, "node_modules/es-errors": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, "license": "MIT", "engines": { @@ -5574,8 +5613,6 @@ }, "node_modules/es-object-atoms": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "dev": true, "license": "MIT", "dependencies": { @@ -5587,8 +5624,6 @@ }, "node_modules/es-set-tostringtag": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dev": true, "license": "MIT", "dependencies": { @@ -5603,8 +5638,6 @@ }, "node_modules/es-shim-unscopables": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", - "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", "dev": true, "license": "MIT", "dependencies": { @@ -5616,8 +5649,6 @@ }, "node_modules/es-to-primitive": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, "license": "MIT", "dependencies": { @@ -5634,15 +5665,12 @@ }, "node_modules/es6-error": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true, "license": "MIT" }, "node_modules/escalade": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -5650,15 +5678,12 @@ }, "node_modules/escape-latex": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz", - "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==", "dev": true, "license": "MIT" }, "node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -5669,9 +5694,7 @@ }, "node_modules/eslint": { "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "7.12.11", @@ -5725,10 +5748,39 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint-compat-utils": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.6.5.tgz", + "integrity": "sha512-vAUHYzue4YAa2hNACjB8HvUQj5yehAZgiClyFVVom9cP8z5NSFq3PwB/TtJslN2zAMgRX6FCFCjYBbQh71g5RQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/eslint-compat-utils/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/eslint-config-airbnb": { "version": "19.0.2", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.2.tgz", - "integrity": "sha512-4v5DEMVSl043LaCT+gsxPcoiIk0iYG5zxJKKjIy80H/D//2E0vtuOBWkb0CBDxjF+y26yQzspIXYuY6wMmt9Cw==", "dev": true, "license": "MIT", "dependencies": { @@ -5749,8 +5801,6 @@ }, "node_modules/eslint-config-airbnb-base": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", - "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", "dev": true, "license": "MIT", "dependencies": { @@ -5769,8 +5819,6 @@ }, "node_modules/eslint-config-prettier": { "version": "8.10.2", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.2.tgz", - "integrity": "sha512-/IGJ6+Dka158JnP5n5YFMOszjDWrXggGz1LaK/guZq9vZTmniaKlHcsscvkAhn9y4U+BU3JuUdYvtAMcv30y4A==", "dev": true, "license": "MIT", "bin": { @@ -5782,8 +5830,6 @@ }, "node_modules/eslint-import-resolver-exports": { "version": "1.0.0-beta.5", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-exports/-/eslint-import-resolver-exports-1.0.0-beta.5.tgz", - "integrity": "sha512-o6t0w7muUpXr7MkUVzD5igQoDfAQvTmcPp8HEAJdNF8eOuAO+yn6I/TTyMxz9ecCwzX7e02vzlkHURoScUuidg==", "dev": true, "license": "MIT", "dependencies": { @@ -5811,8 +5857,6 @@ }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "license": "MIT", "dependencies": { @@ -5823,18 +5867,37 @@ }, "node_modules/eslint-import-resolver-node/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, + "node_modules/eslint-json-compat-utils": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/eslint-json-compat-utils/-/eslint-json-compat-utils-0.2.1.tgz", + "integrity": "sha512-YzEodbDyW8DX8bImKhAcCeu/L31Dd/70Bidx2Qex9OFUtgzXLqtfWL4Hr5fM/aCCB8QUZLuJur0S9k6UfgFkfg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "esquery": "^1.6.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "eslint": "*", + "jsonc-eslint-parser": "^2.4.0" + }, + "peerDependenciesMeta": { + "@eslint/json": { + "optional": true + } + } + }, "node_modules/eslint-module-utils": { "version": "2.12.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", - "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", "dev": true, "license": "MIT", "dependencies": { @@ -5851,8 +5914,6 @@ }, "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5861,8 +5922,6 @@ }, "node_modules/eslint-plugin-import": { "version": "2.25.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.3.tgz", - "integrity": "sha512-RzAVbby+72IB3iOEL8clzPLzL3wpDrlwjsTBAQXgyp5SeTqqY+0bFubwuo+y/HLhNZcXV4XqTBO4LGsfyHIDXg==", "dev": true, "license": "MIT", "dependencies": { @@ -5889,8 +5948,6 @@ }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "license": "MIT", "dependencies": { @@ -5899,8 +5956,6 @@ }, "node_modules/eslint-plugin-import/node_modules/doctrine": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -5912,15 +5967,11 @@ }, "node_modules/eslint-plugin-import/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, "license": "MIT" }, "node_modules/eslint-plugin-jsdoc": { "version": "37.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-37.1.0.tgz", - "integrity": "sha512-DpkFzX5Sqkqzy4MCgowhDXmusWcF1Gn7wYnphdGfWmIkoQr6SwL0jEtltGAVyF5Rj6ACi6ydw0oCCI5hF3yz6w==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -5942,9 +5993,7 @@ } }, "node_modules/eslint-plugin-jsdoc/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "version": "7.7.3", "dev": true, "license": "ISC", "bin": { @@ -5954,10 +6003,83 @@ "node": ">=10" } }, + "node_modules/eslint-plugin-jsonc": { + "version": "2.21.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsonc/-/eslint-plugin-jsonc-2.21.0.tgz", + "integrity": "sha512-HttlxdNG5ly3YjP1cFMP62R4qKLxJURfBZo2gnMY+yQojZxkLyOpY1H1KRTKBmvQeSG9pIpSGEhDjE17vvYosg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.5.1", + "diff-sequences": "^27.5.1", + "eslint-compat-utils": "^0.6.4", + "eslint-json-compat-utils": "^0.2.1", + "espree": "^9.6.1 || ^10.3.0", + "graphemer": "^1.4.0", + "jsonc-eslint-parser": "^2.4.0", + "natural-compare": "^1.4.0", + "synckit": "^0.6.2 || ^0.7.3 || ^0.11.5" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/eslint-plugin-jsonc/node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/eslint-plugin-jsonc/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-jsonc/node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/eslint-plugin-jsx-a11y": { "version": "6.5.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz", - "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==", "dev": true, "license": "MIT", "dependencies": { @@ -5983,8 +6105,6 @@ }, "node_modules/eslint-plugin-mui-path-imports": { "version": "0.0.15", - "resolved": "https://registry.npmjs.org/eslint-plugin-mui-path-imports/-/eslint-plugin-mui-path-imports-0.0.15.tgz", - "integrity": "sha512-u61kgRBtUAG+zoApuf8oWuW6mf3SIfrpMq/gSQEM2h/3qzkqvWXB4RRmPzVryS6bpeXT0QsW8rFcdcMVnoz0hw==", "dev": true, "license": "MIT", "dependencies": { @@ -5999,8 +6119,6 @@ }, "node_modules/eslint-plugin-prettier": { "version": "4.2.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.5.tgz", - "integrity": "sha512-9Ni+xgemM2IWLq6aXEpP2+V/V30GeA/46Ar629vcMqVPodFFWC9skHu/D1phvuqtS8bJCFnNf01/qcmqYEwNfg==", "dev": true, "license": "MIT", "dependencies": { @@ -6021,8 +6139,6 @@ }, "node_modules/eslint-plugin-react": { "version": "7.30.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.30.0.tgz", - "integrity": "sha512-RgwH7hjW48BleKsYyHK5vUAvxtE9SMPDKmcPRQgtRCYaZA0XQPt5FSkrU3nhz5ifzMZcA8opwmRJ2cmOO8tr5A==", "dev": true, "license": "MIT", "dependencies": { @@ -6064,8 +6180,6 @@ }, "node_modules/eslint-plugin-react/node_modules/doctrine": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -6077,8 +6191,6 @@ }, "node_modules/eslint-plugin-react/node_modules/resolve": { "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, "license": "MIT", "dependencies": { @@ -6095,8 +6207,6 @@ }, "node_modules/eslint-plugin-simple-import-sort": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-7.0.0.tgz", - "integrity": "sha512-U3vEDB5zhYPNfxT5TYR7u01dboFZp+HNpnGhkDB2g/2E4wZ/g1Q9Ton8UwCLfRV9yAKyYqDh62oHOamvkFxsvw==", "dev": true, "license": "MIT", "peerDependencies": { @@ -6105,8 +6215,7 @@ }, "node_modules/eslint-scope": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", @@ -6118,8 +6227,7 @@ }, "node_modules/eslint-scope/node_modules/estraverse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=4.0" @@ -6127,8 +6235,7 @@ }, "node_modules/eslint-utils": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, "license": "MIT", "dependencies": { "eslint-visitor-keys": "^1.1.0" @@ -6142,8 +6249,7 @@ }, "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, "license": "Apache-2.0", "engines": { "node": ">=4" @@ -6151,8 +6257,7 @@ }, "node_modules/eslint-visitor-keys": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, "license": "Apache-2.0", "engines": { "node": ">=10" @@ -6160,8 +6265,7 @@ }, "node_modules/eslint/node_modules/@babel/code-frame": { "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/highlight": "^7.10.4" @@ -6169,8 +6273,7 @@ }, "node_modules/eslint/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -6185,8 +6288,7 @@ }, "node_modules/eslint/node_modules/argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" @@ -6194,8 +6296,7 @@ }, "node_modules/eslint/node_modules/ignore": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 4" @@ -6203,8 +6304,7 @@ }, "node_modules/eslint/node_modules/js-yaml": { "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dev": true, "license": "MIT", "dependencies": { "argparse": "^1.0.7", @@ -6216,14 +6316,12 @@ }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, "license": "MIT" }, "node_modules/eslint/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "version": "7.7.3", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -6234,14 +6332,12 @@ }, "node_modules/eslint/node_modules/sprintf-js": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, "license": "BSD-3-Clause" }, "node_modules/espree": { "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "acorn": "^7.4.0", @@ -6254,8 +6350,7 @@ }, "node_modules/espree/node_modules/eslint-visitor-keys": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, "license": "Apache-2.0", "engines": { "node": ">=4" @@ -6263,8 +6358,7 @@ }, "node_modules/esprima": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", @@ -6275,9 +6369,8 @@ } }, "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "version": "1.6.0", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" @@ -6288,8 +6381,7 @@ }, "node_modules/esrecurse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" @@ -6300,8 +6392,7 @@ }, "node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=4.0" @@ -6309,8 +6400,7 @@ }, "node_modules/esutils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" @@ -6318,8 +6408,6 @@ }, "node_modules/execa": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "license": "MIT", "dependencies": { @@ -6342,21 +6430,16 @@ }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, "license": "MIT" }, "node_modules/fast-diff": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", "dev": true, "license": "Apache-2.0" }, "node_modules/fast-glob": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, "license": "MIT", "dependencies": { @@ -6372,20 +6455,17 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, "license": "MIT" }, "node_modules/fast-uri": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "dev": true, "funding": [ { "type": "github", @@ -6399,9 +6479,7 @@ "license": "BSD-3-Clause" }, "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "version": "1.19.1", "dev": true, "license": "ISC", "dependencies": { @@ -6410,8 +6488,7 @@ }, "node_modules/file-entry-cache": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" @@ -6422,9 +6499,7 @@ }, "node_modules/fill-range": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -6435,8 +6510,7 @@ }, "node_modules/find-cache-dir": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, "license": "MIT", "dependencies": { "commondir": "^1.0.1", @@ -6449,8 +6523,6 @@ }, "node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { @@ -6466,8 +6538,6 @@ }, "node_modules/flat": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, "license": "BSD-3-Clause", "bin": { @@ -6476,8 +6546,7 @@ }, "node_modules/flat-cache": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, "license": "MIT", "dependencies": { "flatted": "^3.2.9", @@ -6490,14 +6559,11 @@ }, "node_modules/flatted": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, "license": "ISC" }, "node_modules/for-each": { "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, "license": "MIT", "dependencies": { @@ -6512,8 +6578,6 @@ }, "node_modules/foreground-child": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, "license": "ISC", "dependencies": { @@ -6526,8 +6590,6 @@ }, "node_modules/fraction.js": { "version": "4.0.12", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.0.12.tgz", - "integrity": "sha512-8Z1K0VTG4hzYY7kA/1sj4/r1/RWLBD3xwReT/RCrUCbzPszjNQCCsy3ktkU/eaEqX3MYa4pY37a52eiBlPMlhA==", "dev": true, "license": "MIT OR GPL-2.0", "engines": { @@ -6536,8 +6598,6 @@ }, "node_modules/fromentries": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", "dev": true, "funding": [ { @@ -6557,35 +6617,17 @@ }, "node_modules/fs-readdir-recursive": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "dev": true, "license": "MIT" }, "node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } + "license": "ISC" }, "node_modules/function-bind": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6593,8 +6635,6 @@ }, "node_modules/function.prototype.name": { "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, "license": "MIT", "dependencies": { @@ -6614,14 +6654,11 @@ }, "node_modules/functional-red-black-tree": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true, "license": "MIT" }, "node_modules/functions-have-names": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, "license": "MIT", "funding": { @@ -6630,8 +6667,6 @@ }, "node_modules/generator-function": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", - "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", "dev": true, "license": "MIT", "engines": { @@ -6640,8 +6675,7 @@ }, "node_modules/gensync": { "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -6649,8 +6683,6 @@ }, "node_modules/get-caller-file": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, "license": "ISC", "engines": { @@ -6659,8 +6691,6 @@ }, "node_modules/get-func-name": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, "license": "MIT", "engines": { @@ -6669,8 +6699,6 @@ }, "node_modules/get-intrinsic": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6694,8 +6722,6 @@ }, "node_modules/get-package-type": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, "license": "MIT", "engines": { @@ -6704,8 +6730,6 @@ }, "node_modules/get-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "dev": true, "license": "MIT", "dependencies": { @@ -6718,8 +6742,6 @@ }, "node_modules/get-stream": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "license": "MIT", "engines": { @@ -6731,8 +6753,6 @@ }, "node_modules/get-symbol-description": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "license": "MIT", "dependencies": { @@ -6749,9 +6769,7 @@ }, "node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -6770,8 +6788,7 @@ }, "node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -6782,8 +6799,7 @@ }, "node_modules/globals": { "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, "license": "MIT", "dependencies": { "type-fest": "^0.20.2" @@ -6797,8 +6813,6 @@ }, "node_modules/globalthis": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6814,8 +6828,6 @@ }, "node_modules/globby": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "license": "MIT", "dependencies": { @@ -6835,8 +6847,6 @@ }, "node_modules/globby/node_modules/slash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "license": "MIT", "engines": { @@ -6845,8 +6855,6 @@ }, "node_modules/gopd": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, "license": "MIT", "engines": { @@ -6858,22 +6866,16 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true, "license": "ISC" }, "node_modules/graphemer": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true, "license": "MIT" }, "node_modules/has": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", - "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", "dev": true, "license": "MIT", "engines": { @@ -6882,8 +6884,6 @@ }, "node_modules/has-bigints": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, "license": "MIT", "engines": { @@ -6895,8 +6895,6 @@ }, "node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "license": "MIT", "engines": { "node": ">=8" @@ -6904,8 +6902,6 @@ }, "node_modules/has-property-descriptors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "license": "MIT", "dependencies": { @@ -6917,8 +6913,6 @@ }, "node_modules/has-proto": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6933,8 +6927,6 @@ }, "node_modules/has-symbols": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, "license": "MIT", "engines": { @@ -6946,8 +6938,6 @@ }, "node_modules/has-tostringtag": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "license": "MIT", "dependencies": { @@ -6962,8 +6952,6 @@ }, "node_modules/hasha": { "version": "5.2.2", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", - "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6979,8 +6967,6 @@ }, "node_modules/hasha/node_modules/type-fest": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -6989,8 +6975,7 @@ }, "node_modules/hasown": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -7001,8 +6986,6 @@ }, "node_modules/he": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, "license": "MIT", "bin": { @@ -7011,15 +6994,11 @@ }, "node_modules/html-escaper": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true, "license": "MIT" }, "node_modules/human-signals": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -7028,8 +7007,6 @@ }, "node_modules/ignore": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", "engines": { @@ -7038,8 +7015,7 @@ }, "node_modules/import-fresh": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, "license": "MIT", "dependencies": { "parent-module": "^1.0.0", @@ -7054,8 +7030,7 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.8.19" @@ -7063,8 +7038,6 @@ }, "node_modules/indent-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, "license": "MIT", "engines": { @@ -7073,9 +7046,7 @@ }, "node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, "license": "ISC", "dependencies": { "once": "^1.3.0", @@ -7084,14 +7055,11 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, "license": "ISC" }, "node_modules/internal-slot": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "license": "MIT", "dependencies": { @@ -7105,8 +7073,6 @@ }, "node_modules/is-array-buffer": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, "license": "MIT", "dependencies": { @@ -7123,8 +7089,6 @@ }, "node_modules/is-async-function": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7143,8 +7107,6 @@ }, "node_modules/is-bigint": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7159,9 +7121,7 @@ }, "node_modules/is-binary-path": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" @@ -7172,8 +7132,6 @@ }, "node_modules/is-boolean-object": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, "license": "MIT", "dependencies": { @@ -7189,15 +7147,11 @@ }, "node_modules/is-buffer": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true, "license": "MIT" }, "node_modules/is-callable": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "license": "MIT", "engines": { @@ -7209,8 +7163,7 @@ }, "node_modules/is-core-module": { "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, "license": "MIT", "dependencies": { "hasown": "^2.0.2" @@ -7224,8 +7177,6 @@ }, "node_modules/is-data-view": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "license": "MIT", "dependencies": { @@ -7242,8 +7193,6 @@ }, "node_modules/is-date-object": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "license": "MIT", "dependencies": { @@ -7259,8 +7208,7 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -7268,8 +7216,6 @@ }, "node_modules/is-finalizationregistry": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, "license": "MIT", "dependencies": { @@ -7284,8 +7230,6 @@ }, "node_modules/is-fullwidth-code-point": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, "license": "MIT", "engines": { @@ -7297,8 +7241,6 @@ }, "node_modules/is-generator-function": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", - "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", "dev": true, "license": "MIT", "dependencies": { @@ -7317,8 +7259,7 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -7329,8 +7270,6 @@ }, "node_modules/is-invalid-path": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz", - "integrity": "sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7342,8 +7281,6 @@ }, "node_modules/is-invalid-path/node_modules/is-extglob": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", "dev": true, "license": "MIT", "engines": { @@ -7352,8 +7289,6 @@ }, "node_modules/is-invalid-path/node_modules/is-glob": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", "dev": true, "license": "MIT", "dependencies": { @@ -7365,8 +7300,6 @@ }, "node_modules/is-map": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, "license": "MIT", "engines": { @@ -7378,8 +7311,6 @@ }, "node_modules/is-negative-zero": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "license": "MIT", "engines": { @@ -7391,9 +7322,7 @@ }, "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=0.12.0" @@ -7401,8 +7330,6 @@ }, "node_modules/is-number-object": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, "license": "MIT", "dependencies": { @@ -7418,8 +7345,6 @@ }, "node_modules/is-plain-obj": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, "license": "MIT", "engines": { @@ -7428,8 +7353,7 @@ }, "node_modules/is-plain-object": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, "license": "MIT", "dependencies": { "isobject": "^3.0.1" @@ -7440,8 +7364,6 @@ }, "node_modules/is-regex": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, "license": "MIT", "dependencies": { @@ -7459,8 +7381,6 @@ }, "node_modules/is-set": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, "license": "MIT", "engines": { @@ -7472,8 +7392,6 @@ }, "node_modules/is-shared-array-buffer": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, "license": "MIT", "dependencies": { @@ -7488,8 +7406,6 @@ }, "node_modules/is-stream": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, "license": "MIT", "engines": { @@ -7501,8 +7417,6 @@ }, "node_modules/is-string": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "license": "MIT", "dependencies": { @@ -7518,8 +7432,6 @@ }, "node_modules/is-symbol": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "license": "MIT", "dependencies": { @@ -7536,8 +7448,6 @@ }, "node_modules/is-typed-array": { "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7552,15 +7462,11 @@ }, "node_modules/is-typedarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true, "license": "MIT" }, "node_modules/is-unicode-supported": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, "license": "MIT", "engines": { @@ -7572,8 +7478,6 @@ }, "node_modules/is-valid-path": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz", - "integrity": "sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A==", "dev": true, "license": "MIT", "dependencies": { @@ -7585,8 +7489,6 @@ }, "node_modules/is-weakmap": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, "license": "MIT", "engines": { @@ -7598,8 +7500,6 @@ }, "node_modules/is-weakref": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", "dev": true, "license": "MIT", "dependencies": { @@ -7614,8 +7514,6 @@ }, "node_modules/is-weakset": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7631,8 +7529,6 @@ }, "node_modules/is-windows": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, "license": "MIT", "engines": { @@ -7641,21 +7537,17 @@ }, "node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, "license": "ISC" }, "node_modules/isobject": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -7663,8 +7555,6 @@ }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -7673,8 +7563,6 @@ }, "node_modules/istanbul-lib-hook": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", - "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -7686,8 +7574,6 @@ }, "node_modules/istanbul-lib-instrument": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -7702,8 +7588,6 @@ }, "node_modules/istanbul-lib-processinfo": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", - "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", "dev": true, "license": "ISC", "dependencies": { @@ -7720,8 +7604,6 @@ }, "node_modules/istanbul-lib-processinfo/node_modules/p-map": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7733,8 +7615,6 @@ }, "node_modules/istanbul-lib-report": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -7748,8 +7628,6 @@ }, "node_modules/istanbul-lib-report/node_modules/make-dir": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "license": "MIT", "dependencies": { @@ -7763,9 +7641,7 @@ } }, "node_modules/istanbul-lib-report/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "version": "7.7.3", "dev": true, "license": "ISC", "bin": { @@ -7777,8 +7653,6 @@ }, "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -7792,8 +7666,6 @@ }, "node_modules/istanbul-lib-source-maps/node_modules/source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -7802,8 +7674,6 @@ }, "node_modules/istanbul-reports": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", - "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -7816,21 +7686,16 @@ }, "node_modules/javascript-natural-sort": { "version": "0.7.1", - "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", - "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==", "dev": true, "license": "MIT" }, "node_modules/js-tokens": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -7841,8 +7706,6 @@ }, "node_modules/jsdoc-type-pratt-parser": { "version": "2.2.5", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.5.tgz", - "integrity": "sha512-2a6eRxSxp1BW040hFvaJxhsCMI9lT8QB8t14t+NY5tC5rckIR0U9cr2tjOeaFirmEOy6MHvmJnY7zTBHq431Lw==", "dev": true, "license": "MIT", "engines": { @@ -7851,8 +7714,7 @@ }, "node_modules/jsesc": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, "license": "MIT", "bin": { "jsesc": "bin/jsesc" @@ -7863,21 +7725,16 @@ }, "node_modules/json-buffer": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, "license": "MIT" }, "node_modules/json-schema": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", "dev": true, "license": "(AFL-2.1 OR BSD-3-Clause)" }, "node_modules/json-schema-compare": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/json-schema-compare/-/json-schema-compare-0.2.2.tgz", - "integrity": "sha512-c4WYmDKyJXhs7WWvAWm3uIYnfyWFoIp+JEoX34rctVvEkMYCPGhXtvmFFXiffBbxfZsvQ0RNnV5H7GvDF5HCqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7886,8 +7743,6 @@ }, "node_modules/json-schema-deref-sync": { "version": "0.14.0", - "resolved": "https://registry.npmjs.org/json-schema-deref-sync/-/json-schema-deref-sync-0.14.0.tgz", - "integrity": "sha512-yGR1xmhdiD6R0MSrwWcFxQzAj5b3i5Gb/mt5tvQKgFMMeNe0KZYNEN/jWr7G+xn39Azqgcvk4ZKMs8dQl8e4wA==", "dev": true, "license": "MIT", "dependencies": { @@ -7906,8 +7761,6 @@ }, "node_modules/json-schema-merge-allof": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/json-schema-merge-allof/-/json-schema-merge-allof-0.8.1.tgz", - "integrity": "sha512-CTUKmIlPJbsWfzRRnOXz+0MjIqvnleIXwFTzz+t9T86HnYX/Rozria6ZVGLktAU9e+NygNljveP+yxqtQp/Q4w==", "dev": true, "license": "MIT", "dependencies": { @@ -7944,9 +7797,9 @@ } }, "node_modules/json-schema-to-typescript/node_modules/prettier": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", - "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "license": "MIT", "bin": { @@ -7961,20 +7814,17 @@ }, "node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, "license": "MIT", "bin": { "json5": "lib/cli.js" @@ -7983,10 +7833,89 @@ "node": ">=6" } }, + "node_modules/jsonc-eslint-parser": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.2.tgz", + "integrity": "sha512-1e4qoRgnn448pRuMvKGsFFymUCquZV0mpGgOyIKNgD3JVDTsVJyRBGH/Fm0tBb8WsWGgmB1mDe6/yJMQM37DUA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "acorn": "^8.5.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + } + }, + "node_modules/jsonc-eslint-parser/node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/jsonc-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/jsonc-eslint-parser/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/jsonc-eslint-parser/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/jsx-ast-utils": { "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8001,8 +7930,7 @@ }, "node_modules/keyv": { "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, "license": "MIT", "dependencies": { "json-buffer": "3.0.1" @@ -8010,8 +7938,7 @@ }, "node_modules/kind-of": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -8019,15 +7946,11 @@ }, "node_modules/language-subtag-registry": { "version": "0.3.23", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", - "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", "dev": true, "license": "CC0-1.0" }, "node_modules/language-tags": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", - "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "dev": true, "license": "MIT", "dependencies": { @@ -8039,8 +7962,7 @@ }, "node_modules/levn": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", @@ -8052,8 +7974,6 @@ }, "node_modules/lilconfig": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", "dev": true, "license": "MIT", "engines": { @@ -8062,8 +7982,6 @@ }, "node_modules/lint-staged": { "version": "12.5.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.5.0.tgz", - "integrity": "sha512-BKLUjWDsKquV/JuIcoQW4MSAI3ggwEImF1+sB4zaKvyVx1wBk3FsG7UK9bpnmBTN1pm7EH2BBcMwINJzCRv12g==", "dev": true, "license": "MIT", "dependencies": { @@ -8094,8 +8012,6 @@ }, "node_modules/lint-staged/node_modules/commander": { "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true, "license": "MIT", "engines": { @@ -8104,8 +8020,6 @@ }, "node_modules/lint-staged/node_modules/supports-color": { "version": "9.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", - "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", "dev": true, "license": "MIT", "engines": { @@ -8117,8 +8031,6 @@ }, "node_modules/listr2": { "version": "4.0.5", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", - "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", "dev": true, "license": "MIT", "dependencies": { @@ -8145,8 +8057,6 @@ }, "node_modules/listr2/node_modules/cli-truncate": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "dev": true, "license": "MIT", "dependencies": { @@ -8162,15 +8072,11 @@ }, "node_modules/listr2/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, "node_modules/listr2/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { @@ -8179,8 +8085,6 @@ }, "node_modules/listr2/node_modules/slice-ansi": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8194,8 +8098,6 @@ }, "node_modules/listr2/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -8209,8 +8111,6 @@ }, "node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { @@ -8224,40 +8124,31 @@ } }, "node_modules/lodash": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", - "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "version": "4.17.21", "license": "MIT" }, "node_modules/lodash.debounce": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true, "license": "MIT" }, "node_modules/lodash.flattendeep": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", "dev": true, "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, "license": "MIT" }, "node_modules/lodash.truncate": { "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true, "license": "MIT" }, "node_modules/log-symbols": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "license": "MIT", "dependencies": { @@ -8273,8 +8164,6 @@ }, "node_modules/log-update": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", "dev": true, "license": "MIT", "dependencies": { @@ -8292,15 +8181,11 @@ }, "node_modules/log-update/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, "node_modules/log-update/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { @@ -8309,8 +8194,6 @@ }, "node_modules/log-update/node_modules/slice-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8327,8 +8210,6 @@ }, "node_modules/log-update/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -8342,8 +8223,6 @@ }, "node_modules/log-update/node_modules/wrap-ansi": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "license": "MIT", "dependencies": { @@ -8357,8 +8236,6 @@ }, "node_modules/loose-envify": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -8370,8 +8247,6 @@ }, "node_modules/loupe": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, "license": "MIT", "dependencies": { @@ -8380,8 +8255,7 @@ }, "node_modules/lru-cache": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, "license": "ISC", "dependencies": { "yallist": "^3.0.2" @@ -8389,8 +8263,7 @@ }, "node_modules/make-dir": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, "license": "MIT", "dependencies": { "pify": "^4.0.1", @@ -8402,8 +8275,7 @@ }, "node_modules/make-dir/node_modules/semver": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver" @@ -8411,14 +8283,11 @@ }, "node_modules/make-error": { "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, "license": "ISC" }, "node_modules/math-intrinsics": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "dev": true, "license": "MIT", "engines": { @@ -8427,8 +8296,6 @@ }, "node_modules/mathjs": { "version": "5.10.3", - "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-5.10.3.tgz", - "integrity": "sha512-ySjg30BC3dYjQm73ILZtwcWzFJde0VU6otkXW/57IjjuYRa3Qaf0Kb8pydEuBZYtqW2OxreAtsricrAmOj3jIw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -8450,15 +8317,11 @@ }, "node_modules/mathjs/node_modules/decimal.js": { "version": "10.2.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.0.tgz", - "integrity": "sha512-vDPw+rDgn3bZe1+F/pyEwb1oMG2XTlRVgAa6B4KccTEpYgF8w6eQllVbQcfIJnZyvzFtFpxnpGtx8dd7DJp/Rw==", "dev": true, "license": "MIT" }, "node_modules/md5": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", - "integrity": "sha512-PlGG4z5mBANDGCKsYQe0CaUYHdZYZt8ZPZLmEt+Urf0W4GlpTX4HescwHU+dc9+Z/G/vZKYZYFrwgm9VxK6QOQ==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -8469,22 +8332,16 @@ }, "node_modules/memory-cache": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/memory-cache/-/memory-cache-0.2.0.tgz", - "integrity": "sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA==", "dev": true, "license": "BSD-2-Clause" }, "node_modules/merge-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true, "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "license": "MIT", "engines": { @@ -8493,8 +8350,6 @@ }, "node_modules/micromatch": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", "dependencies": { @@ -8507,8 +8362,6 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, "license": "MIT", "engines": { @@ -8517,8 +8370,7 @@ }, "node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -8529,8 +8381,6 @@ }, "node_modules/minimist": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, "license": "MIT", "funding": { @@ -8539,15 +8389,11 @@ }, "node_modules/mixwith": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/mixwith/-/mixwith-0.1.1.tgz", - "integrity": "sha512-DQsf/liljH/9e+94jR+xfK8vlKceeKdOM9H9UEXLwGuvEEpO6debNtJ9yt1ZKzPKPrwqGxzMdu0BR1fnQb6i4A==", "dev": true, "license": "Apache-2.0" }, "node_modules/mocha": { "version": "10.3.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.3.0.tgz", - "integrity": "sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg==", "dev": true, "license": "MIT", "dependencies": { @@ -8582,8 +8428,6 @@ }, "node_modules/mocha/node_modules/ansi-colors": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, "license": "MIT", "engines": { @@ -8592,8 +8436,6 @@ }, "node_modules/mocha/node_modules/brace-expansion": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8602,8 +8444,6 @@ }, "node_modules/mocha/node_modules/chokidar": { "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "funding": [ { @@ -8630,8 +8470,6 @@ }, "node_modules/mocha/node_modules/debug": { "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8648,16 +8486,11 @@ }, "node_modules/mocha/node_modules/debug/node_modules/ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true, "license": "MIT" }, "node_modules/mocha/node_modules/glob": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", "dependencies": { @@ -8676,8 +8509,6 @@ }, "node_modules/mocha/node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", "dependencies": { @@ -8689,8 +8520,6 @@ }, "node_modules/mocha/node_modules/minimatch": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dev": true, "license": "ISC", "dependencies": { @@ -8702,8 +8531,6 @@ }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -8729,46 +8556,20 @@ }, "node_modules/ms": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, "node_modules/natural-compare": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, "license": "MIT" }, "node_modules/natural-compare-lite": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true, "license": "MIT" }, "node_modules/node-preload": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", - "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8780,15 +8581,12 @@ }, "node_modules/node-releases": { "version": "2.0.27", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", - "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, "license": "MIT" }, "node_modules/normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -8796,8 +8594,6 @@ }, "node_modules/npm-run-path": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "license": "MIT", "dependencies": { @@ -8835,8 +8631,6 @@ }, "node_modules/nunjucks/node_modules/commander": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", "dev": true, "license": "MIT", "engines": { @@ -8845,8 +8639,6 @@ }, "node_modules/nyc": { "version": "15.1.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", - "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", "dev": true, "license": "ISC", "dependencies": { @@ -8887,8 +8679,6 @@ }, "node_modules/nyc/node_modules/cliui": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, "license": "ISC", "dependencies": { @@ -8899,15 +8689,11 @@ }, "node_modules/nyc/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, "node_modules/nyc/node_modules/find-cache-dir": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, "license": "MIT", "dependencies": { @@ -8924,8 +8710,6 @@ }, "node_modules/nyc/node_modules/find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", "dependencies": { @@ -8938,8 +8722,6 @@ }, "node_modules/nyc/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { @@ -8948,8 +8730,6 @@ }, "node_modules/nyc/node_modules/locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", "dependencies": { @@ -8961,8 +8741,6 @@ }, "node_modules/nyc/node_modules/make-dir": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "license": "MIT", "dependencies": { @@ -8977,8 +8755,6 @@ }, "node_modules/nyc/node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", "dependencies": { @@ -8993,8 +8769,6 @@ }, "node_modules/nyc/node_modules/p-locate": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", "dependencies": { @@ -9006,8 +8780,6 @@ }, "node_modules/nyc/node_modules/p-map": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9019,8 +8791,6 @@ }, "node_modules/nyc/node_modules/pkg-dir": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9032,8 +8802,6 @@ }, "node_modules/nyc/node_modules/resolve-from": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "license": "MIT", "engines": { @@ -9042,8 +8810,6 @@ }, "node_modules/nyc/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -9057,8 +8823,6 @@ }, "node_modules/nyc/node_modules/wrap-ansi": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "license": "MIT", "dependencies": { @@ -9072,15 +8836,11 @@ }, "node_modules/nyc/node_modules/y18n": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true, "license": "ISC" }, "node_modules/nyc/node_modules/yargs": { "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, "license": "MIT", "dependencies": { @@ -9102,8 +8862,6 @@ }, "node_modules/nyc/node_modules/yargs-parser": { "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "license": "ISC", "dependencies": { @@ -9116,8 +8874,6 @@ }, "node_modules/object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, "license": "MIT", "engines": { @@ -9126,8 +8882,6 @@ }, "node_modules/object-inspect": { "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true, "license": "MIT", "engines": { @@ -9139,8 +8893,6 @@ }, "node_modules/object-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "license": "MIT", "engines": { @@ -9149,8 +8901,6 @@ }, "node_modules/object.assign": { "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, "license": "MIT", "dependencies": { @@ -9170,8 +8920,6 @@ }, "node_modules/object.entries": { "version": "1.1.9", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", - "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", "dev": true, "license": "MIT", "dependencies": { @@ -9186,8 +8934,6 @@ }, "node_modules/object.fromentries": { "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9205,8 +8951,6 @@ }, "node_modules/object.hasown": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", - "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", "dev": true, "license": "MIT", "dependencies": { @@ -9223,8 +8967,6 @@ }, "node_modules/object.values": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", - "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, "license": "MIT", "dependencies": { @@ -9242,8 +8984,7 @@ }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, "license": "ISC", "dependencies": { "wrappy": "1" @@ -9251,8 +8992,6 @@ }, "node_modules/onetime": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "license": "MIT", "dependencies": { @@ -9267,8 +9006,7 @@ }, "node_modules/optionator": { "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, "license": "MIT", "dependencies": { "deep-is": "^0.1.3", @@ -9284,8 +9022,6 @@ }, "node_modules/own-keys": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", "dev": true, "license": "MIT", "dependencies": { @@ -9302,8 +9038,6 @@ }, "node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9318,8 +9052,6 @@ }, "node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { @@ -9334,8 +9066,6 @@ }, "node_modules/p-map": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9350,8 +9080,7 @@ }, "node_modules/p-try": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -9359,8 +9088,6 @@ }, "node_modules/package-hash": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", - "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", "dev": true, "license": "ISC", "dependencies": { @@ -9375,8 +9102,7 @@ }, "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, "license": "MIT", "dependencies": { "callsites": "^3.0.0" @@ -9387,8 +9113,6 @@ }, "node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { @@ -9397,8 +9121,7 @@ }, "node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -9406,8 +9129,7 @@ }, "node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -9415,14 +9137,11 @@ }, "node_modules/path-parse": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, "license": "MIT" }, "node_modules/path-type": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, "license": "MIT", "engines": { @@ -9431,8 +9150,6 @@ }, "node_modules/pathval": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true, "license": "MIT", "engines": { @@ -9441,15 +9158,12 @@ }, "node_modules/picocolors": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -9460,8 +9174,6 @@ }, "node_modules/pidtree": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz", - "integrity": "sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==", "dev": true, "license": "MIT", "bin": { @@ -9473,8 +9185,7 @@ }, "node_modules/pify": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -9482,8 +9193,7 @@ }, "node_modules/pirates": { "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, "license": "MIT", "engines": { "node": ">= 6" @@ -9491,8 +9201,7 @@ }, "node_modules/pkg-dir": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, "license": "MIT", "dependencies": { "find-up": "^3.0.0" @@ -9503,8 +9212,7 @@ }, "node_modules/pkg-dir/node_modules/find-up": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, "license": "MIT", "dependencies": { "locate-path": "^3.0.0" @@ -9515,8 +9223,7 @@ }, "node_modules/pkg-dir/node_modules/locate-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, "license": "MIT", "dependencies": { "p-locate": "^3.0.0", @@ -9528,8 +9235,7 @@ }, "node_modules/pkg-dir/node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "license": "MIT", "dependencies": { "p-try": "^2.0.0" @@ -9543,8 +9249,7 @@ }, "node_modules/pkg-dir/node_modules/p-locate": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, "license": "MIT", "dependencies": { "p-limit": "^2.0.0" @@ -9555,8 +9260,7 @@ }, "node_modules/pkg-dir/node_modules/path-exists": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -9572,8 +9276,6 @@ }, "node_modules/possible-typed-array-names": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "dev": true, "license": "MIT", "engines": { @@ -9582,8 +9284,7 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8.0" @@ -9591,8 +9292,6 @@ }, "node_modules/prettier": { "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, "license": "MIT", "bin": { @@ -9606,9 +9305,7 @@ } }, "node_modules/prettier-linter-helpers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz", - "integrity": "sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==", + "version": "1.0.0", "dev": true, "license": "MIT", "dependencies": { @@ -9620,8 +9317,6 @@ }, "node_modules/process-on-spawn": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.1.0.tgz", - "integrity": "sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -9633,8 +9328,7 @@ }, "node_modules/progress": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.4.0" @@ -9642,8 +9336,6 @@ }, "node_modules/prop-types": { "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dev": true, "license": "MIT", "dependencies": { @@ -9654,8 +9346,7 @@ }, "node_modules/punycode": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -9663,8 +9354,6 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -9684,93 +9373,20 @@ }, "node_modules/randombytes": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" } }, - "node_modules/react": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", - "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/react-is": { "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/react-jsonschema-form": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/react-jsonschema-form/-/react-jsonschema-form-1.8.1.tgz", - "integrity": "sha512-aaDloxNAcGXOOOcdKOxxqEEn5oDlPUZgWcs8unXXB9vjBRgCF8rCm/wVSv1u2G5ih0j/BX6Ewd/WjI2g00lPdg==", - "deprecated": "react-jsonschema-form has been moved to @rjsf/core", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@babel/runtime-corejs2": "^7.4.5", - "ajv": "^6.7.0", - "core-js": "^2.5.7", - "lodash": "^4.17.15", - "prop-types": "^15.5.8", - "react-is": "^16.8.4", - "react-lifecycles-compat": "^3.0.4", - "shortid": "^2.2.14" - }, - "engines": { - "node": ">=6", - "npm": ">=2.14.7" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-jsonschema-form/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/react-jsonschema-form/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", "dev": true, "license": "MIT" }, "node_modules/readdirp": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "picomatch": "^2.2.1" @@ -9781,8 +9397,6 @@ }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", "dev": true, "license": "MIT", "dependencies": { @@ -9804,14 +9418,12 @@ }, "node_modules/regenerate": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true, "license": "MIT" }, "node_modules/regenerate-unicode-properties": { "version": "10.2.2", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", - "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", + "dev": true, "license": "MIT", "dependencies": { "regenerate": "^1.4.2" @@ -9822,14 +9434,11 @@ }, "node_modules/regenerator-runtime": { "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true, "license": "MIT" }, "node_modules/regexp.prototype.flags": { "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, "license": "MIT", "dependencies": { @@ -9849,8 +9458,7 @@ }, "node_modules/regexpp": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -9861,8 +9469,7 @@ }, "node_modules/regexpu-core": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", - "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", + "dev": true, "license": "MIT", "dependencies": { "regenerate": "^1.4.2", @@ -9878,8 +9485,6 @@ }, "node_modules/regextras": { "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.8.0.tgz", - "integrity": "sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==", "dev": true, "license": "MIT", "engines": { @@ -9888,14 +9493,12 @@ }, "node_modules/regjsgen": { "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true, "license": "MIT" }, "node_modules/regjsparser": { "version": "0.13.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", - "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "jsesc": "~3.1.0" @@ -9906,8 +9509,6 @@ }, "node_modules/release-zalgo": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", "dev": true, "license": "ISC", "dependencies": { @@ -9919,8 +9520,6 @@ }, "node_modules/require-directory": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, "license": "MIT", "engines": { @@ -9929,8 +9528,7 @@ }, "node_modules/require-from-string": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -9938,15 +9536,11 @@ }, "node_modules/require-main-filename": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true, "license": "ISC" }, "node_modules/requireindex": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", - "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", "dev": true, "license": "MIT", "engines": { @@ -9955,8 +9549,7 @@ }, "node_modules/resolve": { "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, "license": "MIT", "dependencies": { "is-core-module": "^2.16.1", @@ -9975,8 +9568,7 @@ }, "node_modules/resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -9984,8 +9576,6 @@ }, "node_modules/resolve.exports": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", - "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", "dev": true, "license": "MIT", "engines": { @@ -9994,8 +9584,6 @@ }, "node_modules/restore-cursor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "license": "MIT", "dependencies": { @@ -10008,8 +9596,6 @@ }, "node_modules/reusify": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, "license": "MIT", "engines": { @@ -10019,16 +9605,12 @@ }, "node_modules/rfdc": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", "dev": true, "license": "MIT" }, "node_modules/rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, "license": "ISC", "dependencies": { "glob": "^7.1.3" @@ -10042,8 +9624,6 @@ }, "node_modules/run-parallel": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -10066,8 +9646,6 @@ }, "node_modules/rxjs": { "version": "7.8.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", - "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -10076,8 +9654,6 @@ }, "node_modules/safe-array-concat": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -10096,8 +9672,6 @@ }, "node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -10117,8 +9691,6 @@ }, "node_modules/safe-push-apply": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", "dev": true, "license": "MIT", "dependencies": { @@ -10134,8 +9706,6 @@ }, "node_modules/safe-regex-test": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, "license": "MIT", "dependencies": { @@ -10152,22 +9722,17 @@ }, "node_modules/seed-random": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/seed-random/-/seed-random-2.2.0.tgz", - "integrity": "sha512-34EQV6AAHQGhoc0tn/96a9Fsi6v2xdqe/dMUwljGRaFOzR3EgRmECvD0O8vi8X+/uQ50LGHfkNu/Eue5TPKZkQ==", "dev": true, "license": "MIT" }, "node_modules/seedrandom": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==", "dev": true, "license": "MIT" }, "node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -10175,8 +9740,6 @@ }, "node_modules/serialize-javascript": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -10185,15 +9748,11 @@ }, "node_modules/set-blocking": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true, "license": "ISC" }, "node_modules/set-function-length": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "license": "MIT", "dependencies": { @@ -10210,8 +9769,6 @@ }, "node_modules/set-function-name": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10226,8 +9783,6 @@ }, "node_modules/set-proto": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", "dev": true, "license": "MIT", "dependencies": { @@ -10241,8 +9796,7 @@ }, "node_modules/shallow-clone": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, "license": "MIT", "dependencies": { "kind-of": "^6.0.2" @@ -10253,8 +9807,7 @@ }, "node_modules/shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -10265,27 +9818,14 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/shortid": { - "version": "2.2.17", - "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.17.tgz", - "integrity": "sha512-GpbM3gLF1UUXZvQw6MCyulHkWbRseNO4cyBEZresZRorwl1+SLu1ZdqgVtuwqz8mB6RpwPkm541mYSqrKyJSaA==", - "dev": true, - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.8" - } - }, "node_modules/side-channel": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dev": true, "license": "MIT", "dependencies": { @@ -10304,8 +9844,6 @@ }, "node_modules/side-channel-list": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "dev": true, "license": "MIT", "dependencies": { @@ -10321,8 +9859,6 @@ }, "node_modules/side-channel-map": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "dev": true, "license": "MIT", "dependencies": { @@ -10340,8 +9876,6 @@ }, "node_modules/side-channel-weakmap": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dev": true, "license": "MIT", "dependencies": { @@ -10360,15 +9894,12 @@ }, "node_modules/signal-exit": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, "license": "ISC" }, "node_modules/slash": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -10376,8 +9907,6 @@ }, "node_modules/slice-ansi": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10393,8 +9922,6 @@ }, "node_modules/slice-ansi/node_modules/ansi-styles": { "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", "engines": { @@ -10406,8 +9933,7 @@ }, "node_modules/source-map": { "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -10415,8 +9941,7 @@ }, "node_modules/source-map-support": { "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", @@ -10425,8 +9950,7 @@ }, "node_modules/source-map-support/node_modules/source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -10434,8 +9958,6 @@ }, "node_modules/spawn-wrap": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", - "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", "dev": true, "license": "ISC", "dependencies": { @@ -10452,8 +9974,6 @@ }, "node_modules/spawn-wrap/node_modules/make-dir": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "license": "MIT", "dependencies": { @@ -10468,15 +9988,11 @@ }, "node_modules/spdx-exceptions": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true, "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "license": "MIT", "dependencies": { @@ -10486,8 +10002,6 @@ }, "node_modules/spdx-license-ids": { "version": "3.0.22", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", - "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", "dev": true, "license": "CC0-1.0" }, @@ -10500,8 +10014,6 @@ }, "node_modules/stop-iteration-iterator": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", - "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10514,8 +10026,6 @@ }, "node_modules/string-argv": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", - "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", "dev": true, "license": "MIT", "engines": { @@ -10524,8 +10034,6 @@ }, "node_modules/string-width": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "license": "MIT", "dependencies": { @@ -10542,8 +10050,6 @@ }, "node_modules/string-width/node_modules/ansi-regex": { "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", "engines": { @@ -10555,8 +10061,6 @@ }, "node_modules/string-width/node_modules/strip-ansi": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "dev": true, "license": "MIT", "dependencies": { @@ -10571,8 +10075,6 @@ }, "node_modules/string.prototype.matchall": { "version": "4.0.12", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", - "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", "dev": true, "license": "MIT", "dependencies": { @@ -10599,8 +10101,6 @@ }, "node_modules/string.prototype.trim": { "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, "license": "MIT", "dependencies": { @@ -10621,8 +10121,6 @@ }, "node_modules/string.prototype.trimend": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10640,8 +10138,6 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "license": "MIT", "dependencies": { @@ -10658,8 +10154,6 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -10670,8 +10164,6 @@ }, "node_modules/strip-bom": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, "license": "MIT", "engines": { @@ -10680,8 +10172,6 @@ }, "node_modules/strip-final-newline": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, "license": "MIT", "engines": { @@ -10690,8 +10180,7 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -10702,8 +10191,6 @@ }, "node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -10714,8 +10201,7 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -10724,10 +10210,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/synckit": { + "version": "0.11.12", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz", + "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@pkgr/core": "^0.2.9" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" + } + }, "node_modules/table": { "version": "6.9.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", - "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "ajv": "^8.0.1", @@ -10742,14 +10244,12 @@ }, "node_modules/table/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, "license": "MIT" }, "node_modules/table/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -10757,8 +10257,7 @@ }, "node_modules/table/node_modules/slice-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -10774,8 +10273,7 @@ }, "node_modules/table/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -10788,8 +10286,6 @@ }, "node_modules/test-exclude": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, "license": "ISC", "dependencies": { @@ -10803,21 +10299,16 @@ }, "node_modules/text-table": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, "license": "MIT" }, "node_modules/through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true, "license": "MIT" }, "node_modules/tiny-emitter": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", "dev": true, "license": "MIT" }, @@ -10871,9 +10362,7 @@ }, "node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -10884,8 +10373,6 @@ }, "node_modules/traverse": { "version": "0.6.11", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.11.tgz", - "integrity": "sha512-vxXDZg8/+p3gblxB6BhhG5yWVn1kGRlaL8O78UDXc3wRnPizB5g83dcvWV1jpDMIPnjZjOFuxlMmE82XJ4407w==", "dev": true, "license": "MIT", "dependencies": { @@ -10902,8 +10389,7 @@ }, "node_modules/ts-node": { "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", @@ -10945,8 +10431,7 @@ }, "node_modules/ts-node/node_modules/acorn": { "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -10956,9 +10441,8 @@ } }, "node_modules/ts-node/node_modules/diff": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", - "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", + "version": "4.0.2", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" @@ -10966,8 +10450,6 @@ }, "node_modules/tsconfig-paths": { "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "license": "MIT", "dependencies": { @@ -10979,8 +10461,6 @@ }, "node_modules/tsconfig-paths/node_modules/json5": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "license": "MIT", "dependencies": { @@ -10992,8 +10472,6 @@ }, "node_modules/tsconfig-paths/node_modules/strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "license": "MIT", "engines": { @@ -11002,15 +10480,11 @@ }, "node_modules/tslib": { "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, "license": "0BSD" }, "node_modules/tsutils": { "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "license": "MIT", "dependencies": { @@ -11025,15 +10499,12 @@ }, "node_modules/tsutils/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true, "license": "0BSD" }, "node_modules/type-check": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" @@ -11044,8 +10515,6 @@ }, "node_modules/type-detect": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", - "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", "dev": true, "license": "MIT", "engines": { @@ -11054,8 +10523,7 @@ }, "node_modules/type-fest": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" @@ -11066,8 +10534,6 @@ }, "node_modules/typed-array-buffer": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, "license": "MIT", "dependencies": { @@ -11081,8 +10547,6 @@ }, "node_modules/typed-array-byte-length": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, "license": "MIT", "dependencies": { @@ -11101,8 +10565,6 @@ }, "node_modules/typed-array-byte-offset": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11123,8 +10585,6 @@ }, "node_modules/typed-array-length": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, "license": "MIT", "dependencies": { @@ -11144,8 +10604,6 @@ }, "node_modules/typed-function": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-1.1.0.tgz", - "integrity": "sha512-TuQzwiT4DDg19beHam3E66oRXhyqlyfgjHB/5fcvsRXbfmWPJfto9B4a0TBdTrQAPGlGmXh/k7iUI+WsObgORA==", "dev": true, "engines": { "node": ">= 6" @@ -11153,8 +10611,6 @@ }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, "license": "MIT", "dependencies": { @@ -11163,8 +10619,6 @@ }, "node_modules/typedarray.prototype.slice": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/typedarray.prototype.slice/-/typedarray.prototype.slice-1.0.5.tgz", - "integrity": "sha512-q7QNVDGTdl702bVFiI5eY4l/HkgCM6at9KhcFbgUAzezHFbOVy4+0O/lCjsABEQwbZPravVfBIiBVGo89yzHFg==", "dev": true, "license": "MIT", "dependencies": { @@ -11186,8 +10640,7 @@ }, "node_modules/typescript": { "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -11199,8 +10652,6 @@ }, "node_modules/unbox-primitive": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, "license": "MIT", "dependencies": { @@ -11218,15 +10669,11 @@ }, "node_modules/underscore": { "version": "1.13.7", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", - "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", "dev": true, "license": "MIT" }, "node_modules/underscore.string": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz", - "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11239,14 +10686,12 @@ }, "node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", - "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -11254,8 +10699,7 @@ }, "node_modules/unicode-match-property-ecmascript": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, "license": "MIT", "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", @@ -11267,8 +10711,7 @@ }, "node_modules/unicode-match-property-value-ecmascript": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", - "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -11276,17 +10719,15 @@ }, "node_modules/unicode-property-aliases-ecmascript": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", - "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/update-browserslist-db": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", - "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "version": "1.1.4", + "dev": true, "funding": [ { "type": "opencollective", @@ -11315,8 +10756,7 @@ }, "node_modules/uri-js": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" @@ -11324,15 +10764,11 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true, "license": "MIT" }, "node_modules/uuid": { "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, "license": "MIT", "bin": { @@ -11341,46 +10777,34 @@ }, "node_modules/v20": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/v20/-/v20-0.1.0.tgz", - "integrity": "sha512-5mveu8OtYG01yZX4HThyj1kJIJ1YK1jj4tt3MpXo/BAwUlj8EsfEj11Pz7Z5BT1vVOPoCo6EjYzEO3RWrAGfAA==", "dev": true, "license": "MIT" }, "node_modules/v8-compile-cache": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", - "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", + "dev": true, "license": "MIT" }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, "license": "MIT" }, "node_modules/valid-url": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", - "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==", "dev": true }, "node_modules/validate.io-array": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz", - "integrity": "sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg==", "dev": true, "license": "MIT" }, "node_modules/validate.io-function": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/validate.io-function/-/validate.io-function-1.0.2.tgz", - "integrity": "sha512-LlFybRJEriSuBnUhQyG5bwglhh50EpTL2ul23MPIuR1odjO7XaMLFV8vHGwp7AZciFxtYOeiSCT5st+XSPONiQ==", "dev": true }, "node_modules/validate.io-integer": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/validate.io-integer/-/validate.io-integer-1.0.5.tgz", - "integrity": "sha512-22izsYSLojN/P6bppBqhgUDjCkr5RY2jd+N2a3DCAUey8ydvrZ/OkGvFPR7qfOpwR2LC5p4Ngzxz36g5Vgr/hQ==", "dev": true, "dependencies": { "validate.io-number": "^1.0.3" @@ -11388,8 +10812,6 @@ }, "node_modules/validate.io-integer-array": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/validate.io-integer-array/-/validate.io-integer-array-1.0.0.tgz", - "integrity": "sha512-mTrMk/1ytQHtCY0oNO3dztafHYyGU88KL+jRxWuzfOmQb+4qqnWmI+gykvGp8usKZOM0H7keJHEbRaFiYA0VrA==", "dev": true, "dependencies": { "validate.io-array": "^1.0.3", @@ -11398,14 +10820,11 @@ }, "node_modules/validate.io-number": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz", - "integrity": "sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg==", "dev": true }, "node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -11419,8 +10838,6 @@ }, "node_modules/which-boxed-primitive": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", - "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, "license": "MIT", "dependencies": { @@ -11439,8 +10856,6 @@ }, "node_modules/which-builtin-type": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", - "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -11467,8 +10882,6 @@ }, "node_modules/which-collection": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "license": "MIT", "dependencies": { @@ -11486,15 +10899,11 @@ }, "node_modules/which-module": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", "dev": true, "license": "ISC" }, "node_modules/which-typed-array": { - "version": "1.1.20", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", - "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", + "version": "1.1.19", "dev": true, "license": "MIT", "dependencies": { @@ -11515,8 +10924,7 @@ }, "node_modules/word-wrap": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -11524,15 +10932,11 @@ }, "node_modules/workerpool": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", "dev": true, "license": "Apache-2.0" }, "node_modules/wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", "dependencies": { @@ -11549,15 +10953,11 @@ }, "node_modules/wrap-ansi/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { @@ -11566,8 +10966,6 @@ }, "node_modules/wrap-ansi/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -11581,14 +10979,11 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, "license": "ISC" }, "node_modules/write-file-atomic": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, "license": "ISC", "dependencies": { @@ -11600,8 +10995,6 @@ }, "node_modules/y18n": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, "license": "ISC", "engines": { @@ -11610,14 +11003,11 @@ }, "node_modules/yallist": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, "license": "ISC" }, "node_modules/yaml": { "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true, "license": "ISC", "engines": { @@ -11626,8 +11016,6 @@ }, "node_modules/yargs": { "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "license": "MIT", "dependencies": { @@ -11645,8 +11033,6 @@ }, "node_modules/yargs-parser": { "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true, "license": "ISC", "engines": { @@ -11655,8 +11041,6 @@ }, "node_modules/yargs-unparser": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, "license": "MIT", "dependencies": { @@ -11671,8 +11055,6 @@ }, "node_modules/yargs-unparser/node_modules/camelcase": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "license": "MIT", "engines": { @@ -11684,8 +11066,6 @@ }, "node_modules/yargs-unparser/node_modules/decamelize": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, "license": "MIT", "engines": { @@ -11697,15 +11077,11 @@ }, "node_modules/yargs/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, "node_modules/yargs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { @@ -11714,8 +11090,6 @@ }, "node_modules/yargs/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -11729,8 +11103,7 @@ }, "node_modules/yn": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -11738,8 +11111,6 @@ }, "node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", "engines": { diff --git a/package.json b/package.json index ffd94c14..c18885da 100644 --- a/package.json +++ b/package.json @@ -12,35 +12,27 @@ "tsconfig.json" ], "dependencies": { - "@babel/cli": "7.16.0", - "@babel/core": "7.24.1", - "@babel/eslint-parser": "7.16.3", - "@babel/plugin-proposal-class-properties": "7.16.0", - "@babel/preset-env": "7.16.4", - "@babel/preset-react": "7.16.7", - "@babel/preset-typescript": "^7.22.5", - "@babel/register": "^7.16.0", - "@babel/runtime-corejs3": "7.16.8", "cmd-ts": "^0.13.0", "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "ts-node": "^10.9.1", - "typescript": "^4.5.5" + "lodash": "^4.17.21" }, "devDependencies": { - "@exabyte-io/eslint-config": "^2022.11.17-0", - "@mat3ra/ade": "2025.11.19-0", - "@mat3ra/wode": "2026.2.9-0", - "@mat3ra/mode": "2025.12.25-0", - "@mat3ra/utils": "^2025.12.2-0", - "@mat3ra/code": "^2025.8.7-0", - "@mat3ra/tsconfig": "^2024.6.3-0", - "@mat3ra/esse": "^2025.11.19-0", + "@exabyte-io/eslint-config": "2025.5.13-0", + "@mat3ra/ade": "git+https://github.com/Exabyte-io/ade.git#6d494337d83e1b22fe272ff74cc1b6842a7c6561", + "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#3b42a844bebd5de65dc3877f7602521af308a09e", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse.git#49faa1af1a9c136c54af6658068decfba7306642", + "@mat3ra/fixtures": "git+https://github.com/Exabyte-io/fixtures.git#7501b0dcc28848b48194085685d332828509efdb", + "@mat3ra/made": "git+https://github.com/Exabyte-io/made.git#47b3e12a859c45fa72079ed4ddd1675a6a32b4fe", + "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#9d6ff1c11342945badf3c112b9680998c7da8f53", "@mat3ra/standata": "file:./", + "@mat3ra/tsconfig": "^2024.6.3-0", + "@mat3ra/utils": "2025.12.2-0", + "@mat3ra/wode": "git+https://github.com/Exabyte-io/wode.git#a3b31813f0b9c2b8c54ff2f1b2ba0d4a7f2331b3", "@types/chai": "^4.3.5", "@types/js-yaml": "^4.0.5", "@types/mocha": "^10.0.1", "@types/node": "^20.4.2", + "@types/sprintf-js": "^1.1.4", "@typescript-eslint/eslint-plugin": "^5.56.0", "@typescript-eslint/parser": "^5.56.0", "babel-eslint": "^10.1.0", @@ -59,8 +51,12 @@ "eslint-plugin-simple-import-sort": "7.0.0", "lint-staged": "^12.1.2", "mocha": "10.3.0", + "nunjucks": "^3.2.4", "nyc": "^15.1.0", - "prettier": "^2.7.1" + "prettier": "^2.7.1", + "sprintf-js": "^1.1.3", + "ts-node": "^10.9.1", + "typescript": "^4.5.5" }, "scripts": { "clean": "rm -rf build/standata", diff --git a/scripts/fix_kgrid_trailing_whitespace.py b/scripts/fix_kgrid_trailing_whitespace.py new file mode 100644 index 00000000..987a7bf6 --- /dev/null +++ b/scripts/fix_kgrid_trailing_whitespace.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 +import glob +import os + +template_dir = "assets/applications/input_files_templates/espresso" +files = glob.glob(f"{template_dir}/*.j2.in") + +# Pattern 1: Standard pattern - add space before each item except first +old_pattern1 = "{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}" +new_pattern1 = "{%- for d in kgrid.dimensions -%}{% if not loop.first %} {% endif %}{{d}}{%- endfor -%} {%- for s in kgrid.shifts -%}{% if not loop.first %} {% endif %}{{s}}{%- endfor -%}" + +# Pattern 2: pw_scf_hse.j2.in has conditional logic +old_pattern2 = "{% for d in kgrid.dimensions %}{% if d%2 == 0 %}{{d}} {% else %}{{d+1}} {% endif %}{% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}" +new_pattern2 = "{%- for d in kgrid.dimensions -%}{% if not loop.first %} {% endif %}{% if d%2 == 0 %}{{d}}{% else %}{{d+1}}{% endif %}{%- endfor -%} {%- for s in kgrid.shifts -%}{% if not loop.first %} {% endif %}{{s}}{%- endfor -%}" + +updated = 0 +for filepath in sorted(files): + with open(filepath, 'r') as f: + content = f.read() + + original = content + + # Fix pattern 2 first (more specific) + if old_pattern2 in content: + content = content.replace(old_pattern2, new_pattern2) + updated += 1 + print(f"Updated (pattern2): {os.path.basename(filepath)}") + # Fix pattern 1 + elif old_pattern1 in content: + content = content.replace(old_pattern1, new_pattern1) + updated += 1 + print(f"Updated (pattern1): {os.path.basename(filepath)}") + + if content != original: + with open(filepath, 'w') as f: + f.write(content) + +print(f"\nTotal files updated: {updated}") diff --git a/scripts/generate_espresso_fixtures.ts b/scripts/generate_espresso_fixtures.ts new file mode 100644 index 00000000..4fb5d9e8 --- /dev/null +++ b/scripts/generate_espresso_fixtures.ts @@ -0,0 +1,265 @@ +import * as fs from "fs"; +import * as nunjucks from "nunjucks"; +import * as path from "path"; +import { sprintf } from "sprintf-js"; + +// Base context data for testing +const BASE_CONTEXT = { + subworkflowContext: {}, + input: { + RESTART_MODE: "from_scratch", + IBRAV: 0, + NAT: 4, + NTYP: 2, + NTYP_WITH_LABELS: 2, + ATOMIC_SPECIES: [ + { + X: "Fe", + Mass_X: 55.845, + PseudoPot_X: "Fe.pbe-spn-rrkjus_psl.1.0.0.UPF", + }, + { + X: "O", + Mass_X: 15.999, + PseudoPot_X: "O.pbe-n-rrkjus_psl.1.0.0.UPF", + }, + ], + ATOMIC_SPECIES_WITH_LABELS: [ + { + X: "Fe", + Mass_X: 55.845, + PseudoPot_X: "Fe.pbe-spn-rrkjus_psl.1.0.0.UPF", + }, + { + X: "O", + Mass_X: 15.999, + PseudoPot_X: "O.pbe-n-rrkjus_psl.1.0.0.UPF", + }, + ], + ATOMIC_POSITIONS: [ + { + X: "Fe", + x: 0.0, + y: 0.0, + z: 0.0, + "if_pos(1)": 0, + "if_pos(2)": 1, + "if_pos(3)": 1, + }, + { + X: "Fe", + x: 0.5, + y: 0.5, + z: 0.5, + "if_pos(1)": 1, + "if_pos(2)": 1, + "if_pos(3)": 1, + }, + { + X: "O", + x: 0.25, + y: 0.25, + z: 0.25, + "if_pos(1)": 1, + "if_pos(2)": 1, + "if_pos(3)": 1, + }, + { + X: "O", + x: 0.75, + y: 0.75, + z: 0.75, + "if_pos(1)": 1, + "if_pos(2)": 1, + "if_pos(3)": 1, + }, + ], + CELL_PARAMETERS: { + v1: [5.0, 0.0, 0.0], + v2: [0.0, 5.0, 0.0], + v3: [0.0, 0.0, 5.0], + }, + }, + dynamics: { + numberOfSteps: 100, + timeStep: 0.1, + electronMass: 400.0, + temperature: 300.0, + }, + cutoffs: { + wavefunction: 50.0, + density: 200.0, + }, + JOB_WORK_DIR: "/tmp/test_job", + kgrid: { + dimensions: [4, 4, 4], + shifts: [0, 0, 0], + }, + kpath: [ + { coordinates: [0.0, 0.0, 0.0], steps: 20 }, + { coordinates: [0.5, 0.5, 0.5], steps: 20 }, + ], + collinearMagnetization: { + isTotalMagnetization: false, + startingMagnetization: [ + { index: 1, value: 0.5 }, + { index: 2, value: 0.0 }, + ], + }, + nonCollinearMagnetization: { + isStartingMagnetization: false, + isConstrainedMagnetization: false, + isFixedMagnetization: false, + isExistingChargeDensity: false, + isArbitrarySpinDirection: false, + }, + hubbard_u: [{ atomicSpecies: "Fe", atomicOrbital: "3d", hubbardUValue: 4.0 }], + hubbard_legacy: [{ atomicSpeciesIndex: 1, hubbardUValue: 4.0 }], + hubbard_v: [{ atomicSpecies: "Fe", atomicOrbital: "3d", hubbardVValue: 2.0 }], + hubbard_j: [{ atomicSpecies: "Fe", atomicOrbital: "3d", hubbardJValue: 1.0 }], +}; + +// Context for neb.j2.in (needs INTERMEDIATE_IMAGES) +const NEB_CONTEXT = { + ...BASE_CONTEXT, + input: { + ...BASE_CONTEXT.input, + INTERMEDIATE_IMAGES: [ + [ + { + X: "Fe", + x: 0.1, + y: 0.1, + z: 0.1, + "if_pos(1)": 1, + "if_pos(2)": 1, + "if_pos(3)": 1, + }, + { + X: "Fe", + x: 0.3, + y: 0.3, + z: 0.3, + "if_pos(1)": 1, + "if_pos(2)": 1, + "if_pos(3)": 1, + }, + ], + ], + FIRST_IMAGE: BASE_CONTEXT.input.ATOMIC_POSITIONS, + LAST_IMAGE: BASE_CONTEXT.input.ATOMIC_POSITIONS, + }, + neb: { + nImages: 1, + }, +}; + +/** + * Set up nunjucks environment with custom filters + */ +function setupNunjucksEnvironment(): nunjucks.Environment { + const templatePath = path.join( + __dirname, + "../assets/applications/input_files_templates/espresso", + ); + const env = new nunjucks.Environment(new nunjucks.FileSystemLoader(templatePath)); + + // Add custom filter for raw blocks (for JOB_WORK_DIR) + env.addFilter("raw", (str: string) => { + return str; + }); + + // Add custom filter for sprintf-style formatting + // eslint-disable-next-line @typescript-eslint/no-explicit-any + env.addFilter("sprintf", (value: any, format: string) => { + return sprintf(format, value); + }); + + return env; +} + +/** + * Normalize template output for comparison + * - Removes trailing whitespace from each line + * - Normalizes line endings for cross-platform compatibility + */ +function normalizeOutput(output: string): string { + return output + .split("\n") + .map((line) => line.replace(/\s+$/, "")) + .join("\n") + .replace(/\r\n/g, "\n"); +} + +/** + * Get context for a specific template + */ +function getContextForTemplate(templateName: string): any { + if (templateName === "neb.j2.in") { + return NEB_CONTEXT; + } + return BASE_CONTEXT; +} + +/** + * Generate fixtures for all templates + */ +function generateFixtures() { + const env = setupNunjucksEnvironment(); + const templateDir = path.join( + __dirname, + "../assets/applications/input_files_templates/espresso", + ); + const fixtureDir = path.join(__dirname, "../tests/js/fixtures/espresso_templates"); + + // Ensure fixture directory exists + if (!fs.existsSync(fixtureDir)) { + fs.mkdirSync(fixtureDir, { recursive: true }); + } + + // Get all template files + const templateFiles = fs.readdirSync(templateDir).filter((file) => file.endsWith(".j2.in")); + + // Check which templates use ATOMIC_POSITIONS, ATOMIC_SPECIES, or CELL_PARAMETERS + const templatesToTest: string[] = []; + for (const templateFile of templateFiles) { + const templatePath = path.join(templateDir, templateFile); + const content = fs.readFileSync(templatePath, "utf-8"); + if ( + content.includes("ATOMIC_POSITIONS") || + content.includes("ATOMIC_SPECIES") || + content.includes("CELL_PARAMETERS") + ) { + templatesToTest.push(templateFile); + } + } + + console.log(`Found ${templatesToTest.length} templates to generate fixtures for:`); + templatesToTest.forEach((t) => console.log(` - ${t}`)); + + // Generate fixtures + for (const templateFile of templatesToTest) { + try { + const template = env.getTemplate(templateFile); + const context = getContextForTemplate(templateFile); + const output = template.render(context); + const normalizedOutput = normalizeOutput(output); + + const fixturePath = path.join(fixtureDir, `${templateFile}.txt`); + fs.writeFileSync(fixturePath, normalizedOutput, "utf-8"); + console.log(`✓ Generated fixture: ${templateFile}.txt`); + } catch (error) { + console.error(`✗ Error generating fixture for ${templateFile}:`, error); + } + } + + console.log(`\nGenerated ${templatesToTest.length} fixture files in ${fixtureDir}`); + return templatesToTest; +} + +// Run the script +if (require.main === module) { + generateFixtures(); +} + +export { generateFixtures, getContextForTemplate, BASE_CONTEXT, NEB_CONTEXT }; diff --git a/scripts/processors/WorkflowsProcessor.ts b/scripts/processors/WorkflowsProcessor.ts index 48ffb048..5baee94d 100644 --- a/scripts/processors/WorkflowsProcessor.ts +++ b/scripts/processors/WorkflowsProcessor.ts @@ -1,6 +1,6 @@ import serverUtils from "@mat3ra/utils/server"; // @ts-ignore -import { builders, Subworkflow, UnitFactory, Workflow, createWorkflow } from "@mat3ra/wode"; +import { builders, createWorkflow, Subworkflow, UnitFactory, Workflow } from "@mat3ra/wode"; import * as path from "path"; import { BUILD_CONFIG } from "../../build-config"; diff --git a/src/js/application.ts b/src/js/application.ts index 3c245ec7..af95305b 100644 --- a/src/js/application.ts +++ b/src/js/application.ts @@ -1,4 +1,5 @@ -import type { ApplicationSchemaBase, TemplateSchema } from "@mat3ra/esse/dist/js/types"; +/* eslint-disable class-methods-use-this */ +import type { ApplicationSchema, TemplateSchema } from "@mat3ra/esse/dist/js/types"; import { Standata } from "./base"; import APPLICATIONS from "./runtime_data/applications.json"; @@ -9,11 +10,12 @@ import { ApplicationExecutableTree, ApplicationVersionsMapByApplicationType, ApplicationVersionsMapType, - DefaultApplicationConfig, } from "./types/application"; import { ApplicationVersionsMap } from "./utils/applicationVersionMap"; const TEMPLATES_LIST = TEMPLATES_LIST_RAW as TemplateSchema[]; +const APP_VERSIONS = APPLICATION_VERSIONS_MAP as ApplicationVersionsMapByApplicationType; +const EXECUTABLE_FLAVOR = EXECUTABLE_FLAVOR_MAP as ApplicationExecutableTree; export enum TAGS { DEFAULT = "default", @@ -21,37 +23,34 @@ export enum TAGS { DEFAULT_BUILD = "default_build", } -export class ApplicationStandata extends Standata { +export class ApplicationStandata extends Standata { static runtimeData = APPLICATIONS; - // eslint-disable-next-line class-methods-use-this getAppDataForApplication(appName: string): ApplicationVersionsMapType { - const applicationVersionsMap = ( - APPLICATION_VERSIONS_MAP as ApplicationVersionsMapByApplicationType - )[appName]; + const applicationVersionsMap = APP_VERSIONS[appName]; + if (!applicationVersionsMap) { throw new Error(`Application ${appName} not found`); } return applicationVersionsMap; } - // eslint-disable-next-line class-methods-use-this - getAppTreeForApplication(appName: string): ApplicationExecutableTree { + getAppTreeForApplication(appName: string) { // TODO: Convert to use this.findEntitiesByTags() when tree data is in Standata format - const executableData = EXECUTABLE_FLAVOR_MAP as any; + const executableData = EXECUTABLE_FLAVOR; + if (!(appName in executableData)) { throw new Error(`${appName} is not a known application with executable tree.`); } - return executableData[appName] as ApplicationExecutableTree; + + return executableData[appName]; } - // eslint-disable-next-line class-methods-use-this getAllAppTemplates(): TemplateSchema[] { // TODO: Convert to use this.getAll() when template data is in Standata format return TEMPLATES_LIST; } - // eslint-disable-next-line class-methods-use-this getAllAppTree() { // TODO: Convert to use this.getAll() when tree data is in Standata format return EXECUTABLE_FLAVOR_MAP; @@ -69,7 +68,6 @@ export class ApplicationStandata extends Standata { return this.getAll(); } - // eslint-disable-next-line class-methods-use-this getTemplatesByName(appName: string, execName: string, templateName?: string): TemplateSchema[] { // TODO: Convert to use this.findEntitiesByTags() when template data is in Standata format const templates = TEMPLATES_LIST; @@ -93,16 +91,12 @@ export class ApplicationStandata extends Standata { } static getDefaultVersionForApplication(appName: string) { - const applicationVersionsMap = new ApplicationVersionsMap( - (APPLICATION_VERSIONS_MAP as ApplicationVersionsMapByApplicationType)[appName], - ); + const applicationVersionsMap = new ApplicationVersionsMap(APP_VERSIONS[appName]); return applicationVersionsMap.defaultVersion; } static getDefaultBuildForApplicationAndVersion(appName: string, version: string): string { - const applicationVersionsMap = new ApplicationVersionsMap( - (APPLICATION_VERSIONS_MAP as ApplicationVersionsMapByApplicationType)[appName], - ); + const applicationVersionsMap = new ApplicationVersionsMap(APP_VERSIONS[appName]); const versionConfig = applicationVersionsMap.versionConfigs.find( (config) => config.version === version && config.isDefault, ); @@ -118,10 +112,7 @@ export class ApplicationStandata extends Standata { } // TODO: move to parent class Standata, name and generic parameters - getDefaultConfigByNameAndVersion( - appName: string, - version?: string, - ): ApplicationVersionsMapType { + getDefaultConfigByNameAndVersion(appName: string, version?: string) { const tags = [TAGS.DEFAULT_BUILD]; let versionToUse = version; if (!versionToUse) { @@ -129,7 +120,7 @@ export class ApplicationStandata extends Standata { versionToUse = ApplicationStandata.getDefaultVersionForApplication(appName); } const allEntriesWithTags = this.findEntitiesByTags(...tags); - const allEntriesWithTagsForNameAndVersion = allEntriesWithTags.filter((entity: any) => { + const allEntriesWithTagsForNameAndVersion = allEntriesWithTags.filter((entity) => { return entity.name === appName && entity.version === versionToUse; }); if (allEntriesWithTagsForNameAndVersion.length > 1) { @@ -144,9 +135,9 @@ export class ApplicationStandata extends Standata { return allEntriesWithTagsForNameAndVersion[0]; } - getDefaultConfig(): DefaultApplicationConfig { + getDefaultConfig() { const fullConfig = this.findEntitiesByTags(TAGS.DEFAULT)[0]; - const { name, shortName, version, summary, build } = fullConfig as ApplicationSchemaBase; + const { name, shortName, version, summary, build } = fullConfig; return { name, shortName, version, summary, build }; } } diff --git a/src/js/method.ts b/src/js/method.ts index 4649ffb6..f5c9545f 100644 --- a/src/js/method.ts +++ b/src/js/method.ts @@ -1,7 +1,7 @@ import { Standata } from "./base"; +import { ModelMethodFilter } from "./modelMethodFilter"; import METHODS from "./runtime_data/methods.json"; import { MethodConfig, UnitMethod } from "./types/method"; -import { ModelMethodFilter } from "./modelMethodFilter"; import { ModelConfig } from "./types/model"; import { getCategoryValue } from "./utils/category"; diff --git a/src/js/types/application.ts b/src/js/types/application.ts index 6a2e099b..29e21c88 100644 --- a/src/js/types/application.ts +++ b/src/js/types/application.ts @@ -1,37 +1,38 @@ -import { ApplicationSchemaBase, ExecutableSchema } from "@mat3ra/esse/dist/js/types"; +import { ApplicationSchema, ExecutableSchema, FlavorSchema } from "@mat3ra/esse/dist/js/types"; -export type ApplicationVersionInfo = Pick< - ApplicationSchemaBase, - "isDefault" | "build" | "hasAdvancedComputeOptions" -> & { - version: Required["version"]; -}; +type OptionalExecutableSchema = Partial; -export type DefaultApplicationConfig = Pick< - ApplicationSchemaBase, - "name" | "shortName" | "version" | "summary" | "build" +export type ApplicationVersionInfo = Pick< + ApplicationSchema, + "isDefault" | "build" | "hasAdvancedComputeOptions" | "version" >; export type ApplicationVersionsMapType = Pick< - ApplicationSchemaBase, - "shortName" | "summary" | "isLicensed" + ApplicationSchema, + "name" | "shortName" | "summary" | "isLicensed" > & { // TODO: defaultVersion should come from ESSE defaultVersion: string; versions: ApplicationVersionInfo[]; - name: Required["name"]; }; export type ApplicationVersionsMapByApplicationType = { [key: string]: ApplicationVersionsMapType; }; -export interface ExecutableTreeItem - extends Pick { - isDefault?: ApplicationSchemaBase["isDefault"]; - supportedApplicationVersions?: ApplicationSchemaBase["version"][]; - flavors?: Record; - [key: string]: any; -} +type OptionalFlavorSchema = Partial; + +type Flavor = Pick & + Pick; + +export type ExecutableTreeItem = Pick< + ExecutableSchema, + "hasAdvancedComputeOptions" | "isDefault" | "monitors" | "results" +> & + Pick & { + supportedApplicationVersions?: ApplicationSchema["version"][]; + flavors?: Record; + [key: string]: any; + }; -export type ApplicationExecutableTree = Record; +export type ApplicationExecutableTree = Record>; diff --git a/src/js/types/applicationFilter.ts b/src/js/types/applicationFilter.ts index f8102e3b..992d7859 100644 --- a/src/js/types/applicationFilter.ts +++ b/src/js/types/applicationFilter.ts @@ -1,4 +1,4 @@ -import { ApplicationSchemaBase, ExecutableSchema } from "@mat3ra/esse/dist/js/types"; +import { ApplicationSchema, ExecutableSchema } from "@mat3ra/esse/dist/js/types"; import { ApplicationExecutableTree } from "./application"; @@ -16,7 +16,7 @@ export interface FilterObjectRegex { export type FilterObject = FilterObjectPath | FilterObjectRegex; export interface FilterObjectsParams - extends Partial> { + extends Partial> { filterTree: FilterTree; executable?: ExecutableSchema["name"]; flavor?: string; @@ -35,15 +35,15 @@ export interface FilterEntityListParams { export interface ApplicationModelParametersInterface extends Omit { modelList: any[]; - name: Required["name"]; + name: Required["name"]; } export type ModelMethodFilterTree = Record< - Required["name"], + Required["name"], Record< - Required["version"], + Required["version"], Record< - Required["build"], + Required["build"], Record> | string > > @@ -57,5 +57,5 @@ export interface ModelMethodMapByApplication { export interface ApplicationMethodParametersInterface extends Omit { methodList: any[]; - name: Required["name"]; + name: Required["name"]; } diff --git a/src/js/utils/applicationVersionMap.ts b/src/js/utils/applicationVersionMap.ts index 8a05ecd7..bce6e304 100644 --- a/src/js/utils/applicationVersionMap.ts +++ b/src/js/utils/applicationVersionMap.ts @@ -1,12 +1,12 @@ // eslint-disable-next-line import/no-extraneous-dependencies -import { ApplicationSchemaBase } from "@mat3ra/esse/dist/js/types"; +import { ApplicationSchema } from "@mat3ra/esse/dist/js/types"; import { ApplicationVersionInfo, ApplicationVersionsMapType } from "../types/application"; export class ApplicationVersionsMap implements ApplicationVersionsMapType { - shortName?: string | undefined; + shortName: string; - summary?: string | undefined; + summary: string; isLicensed?: boolean | undefined; @@ -30,7 +30,8 @@ export class ApplicationVersionsMap implements ApplicationVersionsMapType { } get nonVersionProperties() { - const { versions, defaultVersion, ...rest } = this.map; + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { versions: _, defaultVersion: __, ...rest } = this.map; return rest; } @@ -38,7 +39,7 @@ export class ApplicationVersionsMap implements ApplicationVersionsMapType { return this.map.versions; } - get versionConfigsFull(): ApplicationSchemaBase[] { + get versionConfigsFull(): ApplicationSchema[] { return this.versionConfigs.map((versionConfig) => { return { ...this.nonVersionProperties, @@ -47,7 +48,7 @@ export class ApplicationVersionsMap implements ApplicationVersionsMapType { }); } - getSlugForVersionConfig(versionConfigFull: ApplicationSchemaBase) { + getSlugForVersionConfig(versionConfigFull: ApplicationSchema) { const buildSuffix = versionConfigFull.build ? `_${versionConfigFull.build.toLowerCase()}` : ""; diff --git a/src/js/workflow.ts b/src/js/workflow.ts index 2ccd1682..33f0d108 100644 --- a/src/js/workflow.ts +++ b/src/js/workflow.ts @@ -21,25 +21,25 @@ type WorkflowStandataRuntimeData = { filesMapByName: Record; }; -abstract class BaseWorkflowStandata extends Standata { +abstract class BaseWorkflowStandata extends Standata { static runtimeData: WorkflowStandataRuntimeData; findByApplication(appName: string): T[] { - return this.findEntitiesByTags(appName) as T[]; + return this.findEntitiesByTags(appName); } findByApplicationAndName(appName: string, displayName: string): T | undefined { return this.findByApplication(appName).find((e) => e?.name === displayName); } - // NOTE: The WF/SWF returned will have only `name` inside the application object. + // NOTE: The WF/SWF returned will have only `name` inside the application object. getRelaxationByApplication(appName: string): T | undefined { - const list = this.findEntitiesByTags(TAGS.RELAXATION, appName) as T[]; + const list = this.findEntitiesByTags(TAGS.RELAXATION, appName); return list[0]; } getDefault(): T { - const list = this.findEntitiesByTags(TAGS.DEFAULT) as T[]; + const list = this.findEntitiesByTags(TAGS.DEFAULT); if (list.length > 1) console.error("Multiple default workflows found"); if (list.length === 0) console.error("No default workflow found"); return list[0]; diff --git a/tests/js/espressoTemplates.test.ts b/tests/js/espressoTemplates.test.ts new file mode 100644 index 00000000..e457faf7 --- /dev/null +++ b/tests/js/espressoTemplates.test.ts @@ -0,0 +1,102 @@ +import { getRenderedTemplateFile, getTemplateContexts } from "@mat3ra/fixtures"; +import { expect } from "chai"; +import * as nunjucks from "nunjucks"; +import * as path from "path"; +import { sprintf } from "sprintf-js"; + +/** + * Set up nunjucks environment with custom filters + */ +function setupNunjucksEnvironment(): nunjucks.Environment { + const templatePath = path.join( + __dirname, + "../../assets/applications/input_files_templates/espresso", + ); + const env = new nunjucks.Environment(new nunjucks.FileSystemLoader(templatePath)); + + // Add custom filter for raw blocks (for JOB_WORK_DIR) + env.addFilter("raw", (str: string) => { + return str; + }); + + // Add custom filter for sprintf-style formatting + // eslint-disable-next-line @typescript-eslint/no-explicit-any + env.addFilter("sprintf", (value: any, format: string) => { + return sprintf(format, value); + }); + + return env; +} + +/** + * Normalize template output for comparison + * - Removes trailing whitespace from each line (templates may produce it) + * - Normalizes line endings for cross-platform compatibility + */ +function normalizeOutput(output: string): string { + return output + .split("\n") + .map((line) => line.replace(/\s+$/, "")) + .join("\n") + .replace(/\r\n/g, "\n"); +} + +const templateNames = [ + "cp_wf", + "cp", + "neb", + "pw_bands_dft_j_magn", + "pw_bands_dft_u_magn_legacy", + "pw_bands_dft_u_magn", + "pw_bands_dft_u_soc_legacy", + "pw_bands_dft_u_soc", + "pw_bands_dft_v_magn", + "pw_bands_magn", + "pw_bands_soc", + "pw_bands", + "pw_esm_relax", + "pw_esm", + "pw_md", + "pw_nscf_dft_j_magn", + "pw_nscf_dft_u_magn_legacy", + "pw_nscf_dft_u_magn", + "pw_nscf_dft_u_soc_legacy", + "pw_nscf_dft_u_soc", + "pw_nscf_dft_v_magn", + "pw_nscf_magn", + "pw_nscf_soc", + "pw_nscf", + "pw_relax", + "pw_scf_bands_hse", + "pw_scf_dft_j_magn", + "pw_scf_dft_j", + "pw_scf_dft_u_legacy", + "pw_scf_dft_u_magn_legacy", + "pw_scf_dft_u_magn", + "pw_scf_dft_u_soc_legacy", + "pw_scf_dft_u_soc", + "pw_scf_dft_u", + "pw_scf_dft_v_magn", + "pw_scf_dft_v", + "pw_scf_hse", + "pw_scf_kpt_conv", + "pw_scf_magn", + "pw_scf_soc", + "pw_scf", + "pw_vc_relax_conv", + "pw_vc_relax", +]; + +describe("Espresso Template Rendering", () => { + const env = setupNunjucksEnvironment(); + + getTemplateContexts().forEach((context) => { + templateNames.forEach((templateName) => { + it(`should correctly render ${templateName} with ${context.name} context and match expected output`, () => { + const renderedTemplateFile = getRenderedTemplateFile(context.name, templateName); + const output = env.getTemplate(renderedTemplateFile.name).render(context.context); + expect(normalizeOutput(output)).to.equal(renderedTemplateFile.content); + }); + }); + }); +}); diff --git a/tests/js/ts-node-register.js b/tests/js/ts-node-register.js new file mode 100644 index 00000000..34a6c6bc --- /dev/null +++ b/tests/js/ts-node-register.js @@ -0,0 +1,3 @@ +// Custom ts-node register that skips type checking +process.env.TS_NODE_TRANSPILE_ONLY = "true"; +require("ts-node/register"); From 7b430faeebc00ff628c38fcb602ab22469d6f87a Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Fri, 20 Feb 2026 17:17:11 +0200 Subject: [PATCH 02/14] chore: SOF-7826 Co-authored-by: Cursor --- .eslintrc.json | 31 +- .prettierrc | 13 +- .../executables/espresso/pp.x.yml | 4 +- .../executables/python/python.yml | 82 +- assets/workflows/subworkflows/categories.yml | 5 +- .../average_electrostatic_potential.yml | 1 - .../espresso/band_gap_hse_dos.yml | 4 +- .../espresso/band_structure_hse.yml | 4 +- .../subworkflows/python/ml/train_head.yml | 6 +- .../subworkflows/vasp/band_structure_dos.yml | 2 +- assets/workflows/subworkflows/vasp/dos.yml | 2 +- .../workflows/espresso/phonon_map.yml | 50 +- build-config.ts | 2 +- .../average_electrostatic_potential.json | 221 ++- ...e_electrostatic_potential_find_minima.json | 81 +- ...rostatic_potential_via_band_structure.json | 423 ++-- .../subworkflows/espresso/band_gap.json | 217 ++- .../espresso/band_gap_hse_dos.json | 183 +- .../subworkflows/espresso/band_structure.json | 255 ++- .../espresso/band_structure_dos.json | 399 ++-- .../espresso/band_structure_hse.json | 184 +- .../espresso/band_structure_magn.json | 310 +-- .../espresso/band_structure_soc.json | 267 ++- .../espresso/dielectric_tensor.json | 287 +-- data/workflows/subworkflows/espresso/dos.json | 269 ++- .../espresso/electronic_density_mesh.json | 167 +- data/workflows/subworkflows/espresso/esm.json | 151 +- .../subworkflows/espresso/esm_relax.json | 151 +- .../espresso/espresso_extract_kpoints.json | 64 +- .../espresso/espresso_xml_get_qpt_irr.json | 92 +- .../espresso/fixed_cell_relaxation.json | 135 +- ...and_structure_band_gap_full_frequency.json | 208 +- ..._band_structure_band_gap_plasmon_pole.json | 208 +- .../espresso/kpoint_convergence.json | 290 ++- data/workflows/subworkflows/espresso/neb.json | 90 +- .../espresso/ph_init_qpoints.json | 62 +- .../espresso/ph_single_irr_qpt.json | 62 +- .../espresso/phonon_dispersions.json | 289 ++- .../subworkflows/espresso/phonon_dos.json | 287 ++- .../espresso/phonon_dos_dispersion.json | 347 ++-- .../subworkflows/espresso/phonon_reduce.json | 226 ++- .../espresso/plot_wavefunction.json | 73 +- .../subworkflows/espresso/post_processor.json | 47 +- .../subworkflows/espresso/pre_processor.json | 47 +- .../subworkflows/espresso/pw_scf.json | 123 +- .../espresso/recalculate_bands.json | 138 +- .../subworkflows/espresso/surface_energy.json | 530 +---- .../subworkflows/espresso/total_energy.json | 121 +- ...and_offset_calc_from_previous_esp_vbm.json | 71 +- .../espresso/variable_cell_relaxation.json | 133 +- .../espresso/wavefunction_amplitude.json | 243 ++- .../espresso/zero_point_energy.json | 173 +- .../subworkflows/nwchem/total_energy.json | 79 +- .../python/ml/classification_tail.json | 412 ++-- .../python/ml/clustering_tail.json | 416 ++-- .../python/ml/regression_tail.json | 412 ++-- .../subworkflows/python/ml/train_head.json | 112 +- .../subworkflows/python/python_script.json | 64 +- .../shell/batch_espresso_pwscf.json | 47 +- .../subworkflows/shell/hello_world.json | 47 +- .../workflows/subworkflows/vasp/band_gap.json | 333 ++-- .../subworkflows/vasp/band_structure.json | 328 ++-- .../subworkflows/vasp/band_structure_dos.json | 328 ++-- data/workflows/subworkflows/vasp/dos.json | 185 +- .../vasp/fixed_cell_relaxation.json | 192 +- .../vasp/initial_final_total_energies.json | 396 ++-- .../subworkflows/vasp/kpoint_convergence.json | 354 ++-- .../subworkflows/vasp/neb_subworkflow.json | 132 +- .../subworkflows/vasp/prepare_images.json | 55 +- .../subworkflows/vasp/recalculate_bands.json | 151 +- .../subworkflows/vasp/surface_energy.json | 592 ++---- .../subworkflows/vasp/total_energy.json | 185 +- .../vasp/variable_cell_relaxation.json | 190 +- .../subworkflows/vasp/zero_point_energy.json | 183 +- .../average_electrostatic_potential.json | 237 ++- .../workflows/espresso/band_gap.json | 234 ++- .../workflows/espresso/band_gap_dos_hse.json | 199 +- .../workflows/espresso/band_structure.json | 271 ++- .../espresso/band_structure_dos.json | 416 ++-- .../espresso/band_structure_hse.json | 415 ++-- .../espresso/band_structure_magn.json | 326 ++-- .../espresso/band_structure_soc.json | 283 ++- .../workflows/espresso/dielectric_tensor.json | 304 +-- data/workflows/workflows/espresso/dos.json | 286 +-- .../espresso/electronic_density_mesh.json | 183 +- data/workflows/workflows/espresso/esm.json | 167 +- .../workflows/espresso/esm_relax.json | 167 +- .../espresso/fixed_cell_relaxation.json | 151 +- ...and_structure_band_gap_full_frequency.json | 225 ++- ..._band_structure_band_gap_plasmon_pole.json | 225 ++- .../espresso/kpoint_convergence.json | 306 ++- data/workflows/workflows/espresso/neb.json | 106 +- .../espresso/phonon_dispersions.json | 305 +-- .../workflows/espresso/phonon_dos.json | 304 +-- .../espresso/phonon_dos_dispersion.json | 364 ++-- .../workflows/espresso/phonon_map.json | 791 ++++---- .../workflows/espresso/recalculate_bands.json | 154 +- .../workflows/espresso/surface_energy.json | 546 +----- .../workflows/espresso/total_energy.json | 139 +- .../espresso/valence_band_offset.json | 1705 ++++++++++------- .../espresso/variable_cell_relaxation.json | 151 +- .../espresso/wavefunction_amplitude.json | 348 ++-- .../workflows/espresso/zero_point_energy.json | 189 +- .../workflows/nwchem/total_energy.json | 95 +- .../python/ml/classification_workflow.json | 555 +++--- .../python/ml/clustering_workflow.json | 555 +++--- .../python/ml/regression_workflow.json | 555 +++--- .../workflows/python/python_script.json | 80 +- .../workflows/shell/batch_espresso_pwscf.json | 63 +- .../workflows/shell/hello_world.json | 63 +- data/workflows/workflows/vasp/band_gap.json | 350 ++-- .../workflows/vasp/band_structure.json | 344 ++-- .../workflows/vasp/band_structure_dos.json | 344 ++-- data/workflows/workflows/vasp/dos.json | 201 +- .../workflows/vasp/fixed_cell_relaxation.json | 208 +- .../workflows/vasp/kpoint_convergence.json | 370 ++-- data/workflows/workflows/vasp/neb.json | 634 +++--- .../workflows/vasp/recalculate_bands.json | 167 +- .../workflows/vasp/surface_energy.json | 608 ++---- .../workflows/vasp/total_energy.json | 201 +- .../vasp/variable_cell_relaxation.json | 208 +- .../workflows/vasp/zero_point_energy.json | 199 +- dist/js/application.d.ts | 1111 ++++++++--- dist/js/application.js | 130 +- dist/js/applicationMethod.d.ts | 3 +- dist/js/applicationMethod.js | 6 +- dist/js/cli.js | 24 +- dist/js/modelMethodFilter.js | 4 +- dist/js/runtime_data/applications.json | 2 +- .../applicationVersionsMapByApplication.json | 2 +- .../executableFlavorMapByApplication.json | 2 +- .../modelMethodMapByApplication.json | 2 +- .../applications/templatesList.json | 2 +- dist/js/runtime_data/materials.json | 2 +- dist/js/runtime_data/methods.json | 2 +- dist/js/runtime_data/models.json | 2 +- .../runtime_data/models/modelMethodMap.json | 2 +- dist/js/runtime_data/properties.json | 2 +- dist/js/runtime_data/subworkflows.json | 2 +- dist/js/runtime_data/workflows.json | 2 +- .../workflowSubforkflowMapByApplication.json | 1 - .../workflowSubworkflowMapByApplication.json | 2 +- dist/js/types/application.d.ts | 23 +- dist/js/ui/methodTree.json | 2 +- dist/js/ui/modelTree.json | 2 +- dist/js/ui/schemas.json | 2 +- dist/js/utils/applicationFilter.d.ts | 2 +- dist/js/utils/applicationFilter.js | 2 +- dist/js/utils/applicationVersionMap.d.ts | 12 +- dist/js/utils/category.js | 5 +- dist/js/workflow.d.ts | 2 +- dist/js/workflow.js | 4 +- package-lock.json | 337 ++-- package.json | 27 +- scripts/models/build_model_tree.ts | 2 +- scripts/processors/ApplicationsProcessor.ts | 25 +- .../processors/BaseModelMethodProcessor.ts | 42 +- .../BaseWorkflowSubworkflowProcessor.ts | 133 +- .../processors/CategorizedEntityProcessor.ts | 67 +- scripts/processors/EntityProcessor.ts | 67 +- scripts/processors/MaterialsProcessor.ts | 5 +- scripts/processors/MethodsProcessor.ts | 11 +- scripts/processors/PropertiesProcessor.ts | 4 +- scripts/processors/SubworkflowsProcessor.ts | 47 +- scripts/processors/WorkflowsProcessor.ts | 47 +- scripts/processors/types.ts | 60 + scripts/processors/utils/createSubworkflow.ts | 280 +++ scripts/processors/utils/createWorkflow.ts | 264 +++ scripts/processors/utils/defaults.ts | 88 + .../espresso/getQpointIrrep.ts | 34 + .../utils/dynamicSubworkflows/index.ts | 8 + .../dynamicSubworkflows/surfaceEnergy.ts | 126 ++ .../AssertionUnitConfigBuilder.ts | 33 + .../AssignmentUnitConfigBuilder.ts | 51 + .../ExecutionUnitConfigBuilder.ts | 72 + .../utils/unitBuilders/IOUnitConfigBuilder.ts | 55 + .../utils/unitBuilders/UnitConfigBuilder.ts | 108 ++ scripts/processors/utils/utils.ts | 98 + scripts/utils.ts | 60 +- scripts/workflows/build_workflows.ts | 8 +- src/js/application.ts | 206 +- src/js/applicationMethod.ts | 10 +- src/js/types/application.ts | 42 +- src/js/utils/applicationVersionMap.ts | 10 +- src/py/mat3ra/standata/data/subworkflows.py | 2 +- src/py/mat3ra/standata/data/workflows.py | 2 +- tsconfig.json | 3 + 187 files changed, 19110 insertions(+), 13005 deletions(-) delete mode 100644 dist/js/runtime_data/workflows/workflowSubforkflowMapByApplication.json create mode 100644 scripts/processors/types.ts create mode 100644 scripts/processors/utils/createSubworkflow.ts create mode 100644 scripts/processors/utils/createWorkflow.ts create mode 100644 scripts/processors/utils/defaults.ts create mode 100644 scripts/processors/utils/dynamicSubworkflows/espresso/getQpointIrrep.ts create mode 100644 scripts/processors/utils/dynamicSubworkflows/index.ts create mode 100644 scripts/processors/utils/dynamicSubworkflows/surfaceEnergy.ts create mode 100644 scripts/processors/utils/unitBuilders/AssertionUnitConfigBuilder.ts create mode 100644 scripts/processors/utils/unitBuilders/AssignmentUnitConfigBuilder.ts create mode 100644 scripts/processors/utils/unitBuilders/ExecutionUnitConfigBuilder.ts create mode 100644 scripts/processors/utils/unitBuilders/IOUnitConfigBuilder.ts create mode 100644 scripts/processors/utils/unitBuilders/UnitConfigBuilder.ts create mode 100644 scripts/processors/utils/utils.ts diff --git a/.eslintrc.json b/.eslintrc.json index 6d7a28ec..4d6a4dda 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,20 +1,17 @@ { - "extends": [ - "@exabyte-io/eslint-config" - ], - "ignorePatterns": [ - "dist/" - ], - "settings": { - "import/resolver": { - "node": { - "extensions": [ - ".js", - ".jsx", - ".ts", - ".tsx" - ] - } - } + "extends": ["@exabyte-io/eslint-config"], + "ignorePatterns": ["dist/"], + "settings": { + "import/resolver": { + "node": { "extensions": [".js", ".jsx", ".ts", ".tsx"] } } + }, + "overrides": [ + { + "files": ["scripts/**/*.ts", "scripts/**/*.js"], + "rules": { + "import/no-extraneous-dependencies": ["error", { "devDependencies": true }] + } + } + ] } diff --git a/.prettierrc b/.prettierrc index dd5309ad..bfa29ce3 100644 --- a/.prettierrc +++ b/.prettierrc @@ -2,5 +2,16 @@ "singleQuote": false, "printWidth": 100, "trailingComma": "all", - "tabWidth": 4 + "tabWidth": 4, + "overrides": [ + { + "files": [ + "*.yml", + "*.yaml" + ], + "options": { + "tabWidth": 2 + } + } + ] } diff --git a/assets/applications/executables/espresso/pp.x.yml b/assets/applications/executables/espresso/pp.x.yml index 250acdda..ad732526 100644 --- a/assets/applications/executables/espresso/pp.x.yml +++ b/assets/applications/executables/espresso/pp.x.yml @@ -24,8 +24,8 @@ flavors: input: - name: pp_wfn.in results: - - wavefunction_amplitude + - name: wavefunction_amplitude monitors: - - standard_output + - name: standard_output applicationName: espresso executableName: pp.x diff --git a/assets/applications/executables/python/python.yml b/assets/applications/executables/python/python.yml index a378630b..641748e6 100644 --- a/assets/applications/executables/python/python.yml +++ b/assets/applications/executables/python/python.yml @@ -3,7 +3,7 @@ monitors: - name: standard_output results: - name: file_content - - name: 'workflow:pyml_predict' + - name: "workflow:pyml_predict" flavors: hello_world: isDefault: true @@ -45,11 +45,11 @@ flavors: filetype: image basename: "wf_r.png" monitors: - - standard_output + - name: standard_output applicationName: python executableName: python - 'generic:post_processing:plot:matplotlib': + "generic:post_processing:plot:matplotlib": input: - name: plot.py templateName: matplotlib_basic.py @@ -60,7 +60,7 @@ flavors: applicationName: python executableName: python - 'generic:processing:find_extrema:scipy': + "generic:processing:find_extrema:scipy": input: - name: find_extrema.py templateName: find_extrema.py @@ -71,7 +71,7 @@ flavors: applicationName: python executableName: python - 'pyml:setup_variables_packages': + "pyml:setup_variables_packages": input: - name: settings.py templateName: pyml_settings.py @@ -82,7 +82,7 @@ flavors: applicationName: python executableName: python - 'pyml:custom': + "pyml:custom": input: - name: pyml_custom.py templateName: pyml_custom.py @@ -93,7 +93,7 @@ flavors: applicationName: python executableName: python - 'pyml:data_input:read_csv:pandas': + "pyml:data_input:read_csv:pandas": input: - name: data_input_read_csv_pandas.py templateName: data_input_read_csv_pandas.py @@ -104,7 +104,7 @@ flavors: applicationName: python executableName: python - 'pyml:data_input:train_test_split:sklearn': + "pyml:data_input:train_test_split:sklearn": input: - name: data_input_train_test_split_sklearn.py templateName: data_input_train_test_split_sklearn.py @@ -115,7 +115,7 @@ flavors: applicationName: python executableName: python - 'pyml:pre_processing:min_max_scaler:sklearn': + "pyml:pre_processing:min_max_scaler:sklearn": input: - name: pre_processing_min_max_sklearn.py templateName: pre_processing_min_max_sklearn.py @@ -126,7 +126,7 @@ flavors: applicationName: python executableName: python - 'pyml:pre_processing:remove_duplicates:pandas': + "pyml:pre_processing:remove_duplicates:pandas": input: - name: pre_processing_remove_duplicates_pandas.py templateName: pre_processing_remove_duplicates_pandas.py @@ -137,7 +137,7 @@ flavors: applicationName: python executableName: python - 'pyml:pre_processing:remove_missing:pandas': + "pyml:pre_processing:remove_missing:pandas": input: - name: pre_processing_remove_missing_pandas.py templateName: pre_processing_remove_missing_pandas.py @@ -148,7 +148,7 @@ flavors: applicationName: python executableName: python - 'pyml:pre_processing:standardization:sklearn': + "pyml:pre_processing:standardization:sklearn": input: - name: pre_processing_standardization_sklearn.py templateName: pre_processing_standardization_sklearn.py @@ -159,7 +159,7 @@ flavors: applicationName: python executableName: python - 'pyml:model:adaboosted_trees_regression:sklearn': + "pyml:model:adaboosted_trees_regression:sklearn": input: - name: model_adaboosted_trees_regression_sklearn.py templateName: model_adaboosted_trees_regression_sklearn.py @@ -168,167 +168,167 @@ flavors: monitors: - name: standard_output results: - - name: 'workflow:pyml_predict' + - name: "workflow:pyml_predict" applicationName: python executableName: python - 'pyml:model:bagged_trees_regression:sklearn': + "pyml:model:bagged_trees_regression:sklearn": input: - name: model_bagged_trees_regression_sklearn.py templateName: model_bagged_trees_regression_sklearn.py - name: requirements.txt templateName: pyml_requirements.txt results: - - name: 'workflow:pyml_predict' + - name: "workflow:pyml_predict" monitors: - name: standard_output applicationName: python executableName: python - 'pyml:model:gradboosted_trees_regression:sklearn': + "pyml:model:gradboosted_trees_regression:sklearn": input: - name: model_gradboosted_trees_regression_sklearn.py templateName: model_gradboosted_trees_regression_sklearn.py - name: requirements.txt templateName: pyml_requirements.txt results: - - name: 'workflow:pyml_predict' + - name: "workflow:pyml_predict" monitors: - name: standard_output applicationName: python executableName: python - 'pyml:model:extreme_gradboosted_trees_regression:sklearn': + "pyml:model:extreme_gradboosted_trees_regression:sklearn": input: - name: model_extreme_gradboosted_trees_regression_sklearn.py templateName: model_extreme_gradboosted_trees_regression_sklearn.py - name: requirements.txt templateName: pyml_requirements.txt results: - - name: 'workflow:pyml_predict' + - name: "workflow:pyml_predict" monitors: - name: standard_output applicationName: python executableName: python - 'pyml:model:k_means_clustering:sklearn': + "pyml:model:k_means_clustering:sklearn": input: - name: model_k_means_clustering_sklearn.py templateName: model_k_means_clustering_sklearn.py - name: requirements.txt templateName: pyml_requirements.txt results: - - name: 'workflow:pyml_predict' + - name: "workflow:pyml_predict" monitors: - name: standard_output applicationName: python executableName: python - 'pyml:model:kernel_ridge_regression:sklearn': + "pyml:model:kernel_ridge_regression:sklearn": input: - name: model_kernel_ridge_regression_sklearn.py templateName: model_kernel_ridge_regression_sklearn.py - name: requirements.txt templateName: pyml_requirements.txt results: - - name: 'workflow:pyml_predict' + - name: "workflow:pyml_predict" monitors: - name: standard_output applicationName: python executableName: python - 'pyml:model:lasso_regression:sklearn': + "pyml:model:lasso_regression:sklearn": input: - name: model_lasso_regression_sklearn.py templateName: model_lasso_regression_sklearn.py - name: requirements.txt templateName: pyml_requirements.txt results: - - name: 'workflow:pyml_predict' + - name: "workflow:pyml_predict" monitors: - name: standard_output applicationName: python executableName: python - 'pyml:model:multilayer_perceptron:sklearn': + "pyml:model:multilayer_perceptron:sklearn": input: - name: model_mlp_sklearn.py templateName: model_mlp_sklearn.py - name: requirements.txt templateName: pyml_requirements.txt results: - - name: 'workflow:pyml_predict' + - name: "workflow:pyml_predict" monitors: - name: standard_output applicationName: python executableName: python - 'pyml:model:random_forest_classification:sklearn': + "pyml:model:random_forest_classification:sklearn": input: - name: model_random_forest_classification_sklearn.py templateName: model_random_forest_classification_sklearn.py - name: requirements.txt templateName: pyml_requirements.txt results: - - name: 'workflow:pyml_predict' + - name: "workflow:pyml_predict" monitors: - name: standard_output applicationName: python executableName: python - 'pyml:model:gradboosted_trees_classification:sklearn': + "pyml:model:gradboosted_trees_classification:sklearn": input: - name: model_gradboosted_trees_classification_sklearn.py templateName: model_gradboosted_trees_classification_sklearn.py - name: requirements.txt templateName: pyml_requirements.txt results: - - name: 'workflow:pyml_predict' + - name: "workflow:pyml_predict" monitors: - name: standard_output applicationName: python executableName: python - 'pyml:model:extreme_gradboosted_trees_classification:sklearn': + "pyml:model:extreme_gradboosted_trees_classification:sklearn": input: - name: model_extreme_gradboosted_trees_classification_sklearn.py templateName: model_extreme_gradboosted_trees_classification_sklearn.py - name: requirements.txt templateName: pyml_requirements.txt results: - - name: 'workflow:pyml_predict' + - name: "workflow:pyml_predict" monitors: - name: standard_output applicationName: python executableName: python - 'pyml:model:random_forest_regression:sklearn': + "pyml:model:random_forest_regression:sklearn": input: - name: model_random_forest_regression_sklearn.py templateName: model_random_forest_regression_sklearn.py - name: requirements.txt templateName: pyml_requirements.txt results: - - name: 'workflow:pyml_predict' + - name: "workflow:pyml_predict" monitors: - name: standard_output applicationName: python executableName: python - 'pyml:model:ridge_regression:sklearn': + "pyml:model:ridge_regression:sklearn": input: - name: model_ridge_regression_sklearn.py templateName: model_ridge_regression_sklearn.py - name: requirements.txt templateName: pyml_requirements.txt results: - - name: 'workflow:pyml_predict' + - name: "workflow:pyml_predict" monitors: - name: standard_output applicationName: python executableName: python - 'pyml:post_processing:parity_plot:matplotlib': + "pyml:post_processing:parity_plot:matplotlib": input: - name: post_processing_parity_plot_matplotlib.py templateName: post_processing_parity_plot_matplotlib.py @@ -341,7 +341,7 @@ flavors: applicationName: python executableName: python - 'pyml:post_processing:pca_2d_clusters:matplotlib': + "pyml:post_processing:pca_2d_clusters:matplotlib": input: - name: post_processing_pca_2d_clusters_matplotlib.py templateName: post_processing_pca_2d_clusters_matplotlib.py @@ -354,7 +354,7 @@ flavors: applicationName: python executableName: python - 'pyml:post_processing:roc_curve:sklearn': + "pyml:post_processing:roc_curve:sklearn": input: - name: post_processing_roc_curve_sklearn.py templateName: post_processing_roc_curve_sklearn.py diff --git a/assets/workflows/subworkflows/categories.yml b/assets/workflows/subworkflows/categories.yml index 36cb76fd..2fb3124a 100644 --- a/assets/workflows/subworkflows/categories.yml +++ b/assets/workflows/subworkflows/categories.yml @@ -17,6 +17,7 @@ categories: - reaction_energy_barrier - reaction_energy_profile - stress_tensor + - surface_energy - total_energy - total_energy_contributions - total_force @@ -211,7 +212,6 @@ entities: - filename: espresso/espresso_xml_get_qpt_irr.json categories: - espresso - - python - filename: espresso/fixed_cell_relaxation.json categories: - atomic_forces @@ -340,6 +340,7 @@ entities: - fermi_energy - pressure - stress_tensor + - surface_energy - total_energy - total_energy_contributions - total_force @@ -357,7 +358,6 @@ entities: - filename: espresso/valence_band_offset_calc_from_previous_esp_vbm.json categories: - espresso - - python - valence_band_offset - filename: espresso/variable_cell_relaxation.json categories: @@ -529,6 +529,7 @@ entities: - fermi_energy - pressure - stress_tensor + - surface_energy - total_energy - total_energy_contributions - total_force diff --git a/assets/workflows/subworkflows/espresso/average_electrostatic_potential.yml b/assets/workflows/subworkflows/espresso/average_electrostatic_potential.yml index d173d811..b84f9353 100644 --- a/assets/workflows/subworkflows/espresso/average_electrostatic_potential.yml +++ b/assets/workflows/subworkflows/espresso/average_electrostatic_potential.yml @@ -26,4 +26,3 @@ units: attributes: results: - name: average_potential_profile - diff --git a/assets/workflows/subworkflows/espresso/band_gap_hse_dos.yml b/assets/workflows/subworkflows/espresso/band_gap_hse_dos.yml index ae0d57ae..c7dba45f 100644 --- a/assets/workflows/subworkflows/espresso/band_gap_hse_dos.yml +++ b/assets/workflows/subworkflows/espresso/band_gap_hse_dos.yml @@ -7,9 +7,7 @@ model: config: type: dft subtype: hybrid - functional: - name: hse06 - slug: hse06 + functional: hse06 method: name: PseudopotentialMethod config: diff --git a/assets/workflows/subworkflows/espresso/band_structure_hse.yml b/assets/workflows/subworkflows/espresso/band_structure_hse.yml index 6713d0e1..3613e5e7 100644 --- a/assets/workflows/subworkflows/espresso/band_structure_hse.yml +++ b/assets/workflows/subworkflows/espresso/band_structure_hse.yml @@ -9,9 +9,7 @@ model: config: type: dft subtype: hybrid - functional: - name: hse06 - slug: hse06 + functional: hse06 method: name: PseudopotentialMethod config: diff --git a/assets/workflows/subworkflows/python/ml/train_head.yml b/assets/workflows/subworkflows/python/ml/train_head.yml index 1faaa12f..10867208 100644 --- a/assets/workflows/subworkflows/python/ml/train_head.yml +++ b/assets/workflows/subworkflows/python/ml/train_head.yml @@ -19,7 +19,8 @@ units: enableRender: true flowchartId: head-fetch-training-data input: - - basename: "{{DATASET_BASENAME}}" + - type: object_storage + basename: "{{DATASET_BASENAME}}" objectData: CONTAINER: "" NAME: "{{DATASET_FILEPATH}}" @@ -42,7 +43,8 @@ units: enableRender: true flowchartId: head-fetch-trained-model input: - - basename: "" + - type: object_storage + basename: "" objectData: CONTAINER: "" NAME: "" diff --git a/assets/workflows/subworkflows/vasp/band_structure_dos.yml b/assets/workflows/subworkflows/vasp/band_structure_dos.yml index 90b7ea5f..3f2d3f38 100644 --- a/assets/workflows/subworkflows/vasp/band_structure_dos.yml +++ b/assets/workflows/subworkflows/vasp/band_structure_dos.yml @@ -13,7 +13,7 @@ units: name: vasp functions: addResults: - - density_of_states + - name: density_of_states head: true type: executionBuilder - config: diff --git a/assets/workflows/subworkflows/vasp/dos.yml b/assets/workflows/subworkflows/vasp/dos.yml index f8101aff..dc8000f6 100644 --- a/assets/workflows/subworkflows/vasp/dos.yml +++ b/assets/workflows/subworkflows/vasp/dos.yml @@ -13,6 +13,6 @@ units: name: vasp functions: addResults: - - density_of_states + - name: density_of_states head: true type: executionBuilder diff --git a/assets/workflows/workflows/espresso/phonon_map.yml b/assets/workflows/workflows/espresso/phonon_map.yml index 516409b6..b80d9885 100644 --- a/assets/workflows/workflows/espresso/phonon_map.yml +++ b/assets/workflows/workflows/espresso/phonon_map.yml @@ -1,28 +1,28 @@ name: Phonon Map units: -- name: phononMap - type: workflow - units: - - name: pw_scf + - name: phononMap + type: workflow + units: + - name: pw_scf + type: subworkflow + - name: ph_init_qpoints + type: subworkflow + - name: espresso_xml_get_qpt_irr + type: subworkflow + - config: + functions: + setDefaultCompute: null + input: + name: Q_POINTS + mapUnit: true + name: phonon_map_workflow + type: workflow + units: + - name: pre_processor + type: subworkflow + - name: ph_single_irr_qpt + type: subworkflow + - name: post_processor + type: subworkflow + - name: phonon_reduce type: subworkflow - - name: ph_init_qpoints - type: subworkflow - - name: espresso_xml_get_qpt_irr - type: subworkflow -- config: - functions: - setDefaultCompute: null - input: - name: Q_POINTS - mapUnit: true - name: phonon_map_workflow - type: workflow - units: - - name: pre_processor - type: subworkflow - - name: ph_single_irr_qpt - type: subworkflow - - name: post_processor - type: subworkflow -- name: phonon_reduce - type: subworkflow diff --git a/build-config.ts b/build-config.ts index dde6b58d..5c524d42 100644 --- a/build-config.ts +++ b/build-config.ts @@ -151,4 +151,4 @@ export const BUILD_CONFIG = { lineWidth: -1, sortKeys: false, }, -}; +} as const; diff --git a/data/workflows/subworkflows/espresso/average_electrostatic_potential.json b/data/workflows/subworkflows/espresso/average_electrostatic_potential.json index f1285f74..2baf5c17 100644 --- a/data/workflows/subworkflows/espresso/average_electrostatic_potential.json +++ b/data/workflows/subworkflows/espresso/average_electrostatic_potential.json @@ -6,13 +6,13 @@ }, "properties": [ "atomic_forces", + "average_potential_profile", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", - "total_force", - "average_potential_profile" + "total_force" ], "model": { "type": "dft", @@ -22,11 +22,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -67,6 +63,9 @@ "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -78,20 +77,55 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_scf", + "results": [ + { + "name": "atomic_forces" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "stress_tensor" + }, + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "total_force" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -101,46 +135,43 @@ ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "atomic_forces", - "fermi_energy", - "pressure", - "stress_tensor", - "total_energy", - "total_energy_contributions", - "total_force" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "pw_scf", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_scf.in", - "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_scf.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde" + "context": [], + "next": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -155,6 +186,9 @@ "flowchartId": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -166,14 +200,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "pp.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "pp_electrostatic_potential", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pp.x", "input": [ @@ -182,28 +224,31 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "results": [], - "name": "pp_electrostatic_potential", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", - "contextProviders": [], - "executableName": "pp.x", - "name": "pp_electrostatic_potential.in", - "rendered": "&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", + "contextProviders": [], + "executableName": "pp.x", + "name": "pp_electrostatic_potential.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "average-electrostatic-potential" + "context": [], + "next": "average-electrostatic-potential", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -222,6 +267,9 @@ "flowchartId": "average-electrostatic-potential", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -233,14 +281,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "average.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "average_potential", + "results": [ + { + "name": "average_potential_profile" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "average.x", "input": [ @@ -249,29 +309,32 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "average_potential_profile" + { + "name": "standard_output" + } ], - "name": "average_potential", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", - "contextProviders": [], - "executableName": "average.x", - "name": "average.in", - "rendered": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", + "contextProviders": [], + "executableName": "average.x", + "name": "average.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/average_electrostatic_potential_find_minima.json b/data/workflows/subworkflows/espresso/average_electrostatic_potential_find_minima.json index b8dcc4e3..5f935354 100644 --- a/data/workflows/subworkflows/espresso/average_electrostatic_potential_find_minima.json +++ b/data/workflows/subworkflows/espresso/average_electrostatic_potential_find_minima.json @@ -28,6 +28,9 @@ "flowchartId": "python-find-extrema", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -38,14 +41,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "generic:processing:find_extrema:scipy", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -59,36 +70,43 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "generic:processing:find_extrema:scipy", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "python", - "content": "# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n", - "contextProviders": [], - "executableName": "python", - "name": "find_extrema.py", - "rendered": "# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\nY = np.array({{array_from_context}})\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n", + "contextProviders": [], + "executableName": "python", + "name": "find_extrema.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "8fce780b-5555-5b73-b3d1-1bb24a4c759d" + "context": [], + "next": "8fce780b-5555-5b73-b3d1-1bb24a4c759d", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Set Average ESP Value", @@ -101,20 +119,19 @@ "scope": "python-find-extrema" } ], + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "8fce780b-5555-5b73-b3d1-1bb24a4c759d", "tags": [], + "flowchartId": "8fce780b-5555-5b73-b3d1-1bb24a4c759d", "head": false, - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/average_electrostatic_potential_via_band_structure.json b/data/workflows/subworkflows/espresso/average_electrostatic_potential_via_band_structure.json index 14bd6f29..e584d1e3 100644 --- a/data/workflows/subworkflows/espresso/average_electrostatic_potential_via_band_structure.json +++ b/data/workflows/subworkflows/espresso/average_electrostatic_potential_via_band_structure.json @@ -7,14 +7,14 @@ }, "properties": [ "atomic_forces", + "average_potential_profile", + "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", - "total_force", - "band_gaps", - "average_potential_profile" + "total_force" ], "model": { "type": "dft", @@ -24,11 +24,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -37,22 +33,18 @@ "operand": "MATERIAL_INDEX", "value": 0, "input": [], + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "2d360607-c739-54ad-97a0-8a83f0971f2c", "tags": [], + "flowchartId": "2d360607-c739-54ad-97a0-8a83f0971f2c", "head": true, "next": "9fc7a088-5533-5f70-bb33-f676ec65f565", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -92,6 +84,9 @@ "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -103,20 +98,55 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_scf", + "results": [ + { + "name": "atomic_forces" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "stress_tensor" + }, + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "total_force" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -126,46 +156,43 @@ ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "atomic_forces", - "fermi_energy", - "pressure", - "stress_tensor", - "total_energy", - "total_energy_contributions", - "total_force" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "pw_scf", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_scf.in", - "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_scf.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "pw-bands-calculate-band-gap" + "context": [], + "next": "pw-bands-calculate-band-gap", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -184,6 +211,9 @@ "flowchartId": "pw-bands-calculate-band-gap", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -195,20 +225,37 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_bands", + "results": [ + { + "name": "band_structure" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -217,40 +264,41 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "band_structure" + { + "name": "standard_output" + } ], - "name": "pw_bands", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", - "contextProviders": [ - { - "name": "KPathFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_bands.in", - "rendered": "&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", + "contextProviders": [ + { + "name": "KPathFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_bands.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "a667d9fd-35d5-5897-be0e-fa0247233649" + "context": [], + "next": "a667d9fd-35d5-5897-be0e-fa0247233649", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Select indirect band gap", @@ -263,22 +311,18 @@ "scope": "pw-bands-calculate-band-gap" } ], + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "a667d9fd-35d5-5897-be0e-fa0247233649", "tags": [], + "flowchartId": "a667d9fd-35d5-5897-be0e-fa0247233649", "head": false, "next": "08819369-b541-5b51-8a40-0ee135039482", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Set Valence Band Maximum", @@ -286,22 +330,18 @@ "operand": "VBM", "value": "BAND_GAP_INDIRECT['eigenvalueValence']", "input": [], + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "08819369-b541-5b51-8a40-0ee135039482", "tags": [], + "flowchartId": "08819369-b541-5b51-8a40-0ee135039482", "head": false, "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -316,6 +356,9 @@ "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -327,14 +370,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "bands", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -343,27 +394,31 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", - "contextProviders": [], - "executableName": "bands.x", - "name": "bands.in", - "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", + "contextProviders": [], + "executableName": "bands.x", + "name": "bands.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde" + "context": [], + "next": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -378,6 +433,9 @@ "flowchartId": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -389,14 +447,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "pp.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "pp_electrostatic_potential", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pp.x", "input": [ @@ -405,28 +471,31 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "results": [], - "name": "pp_electrostatic_potential", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", - "contextProviders": [], - "executableName": "pp.x", - "name": "pp_electrostatic_potential.in", - "rendered": "&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", + "contextProviders": [], + "executableName": "pp.x", + "name": "pp_electrostatic_potential.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "average-electrostatic-potential" + "context": [], + "next": "average-electrostatic-potential", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -445,6 +514,9 @@ "flowchartId": "average-electrostatic-potential", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -456,14 +528,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "average.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "average_potential", + "results": [ + { + "name": "average_potential_profile" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "average.x", "input": [ @@ -472,30 +556,31 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "average_potential_profile" + { + "name": "standard_output" + } ], - "name": "average_potential", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", - "contextProviders": [], - "executableName": "average.x", - "name": "average.in", - "rendered": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", + "contextProviders": [], + "executableName": "average.x", + "name": "average.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "c6c11873-91d7-5422-8302-3dcc1ce971e9" + "context": [], + "next": "c6c11873-91d7-5422-8302-3dcc1ce971e9", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Set Macroscopically Averaged ESP Data", @@ -508,21 +593,19 @@ "scope": "average-electrostatic-potential" } ], + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "c6c11873-91d7-5422-8302-3dcc1ce971e9", "tags": [], + "flowchartId": "c6c11873-91d7-5422-8302-3dcc1ce971e9", "head": false, - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/band_gap.json b/data/workflows/subworkflows/espresso/band_gap.json index 8ec5e843..5617f87a 100644 --- a/data/workflows/subworkflows/espresso/band_gap.json +++ b/data/workflows/subworkflows/espresso/band_gap.json @@ -6,14 +6,13 @@ }, "properties": [ "atomic_forces", + "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", - "total_force", - "fermi_energy", - "band_gaps" + "total_force" ], "model": { "type": "dft", @@ -23,11 +22,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -68,6 +63,9 @@ "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -79,20 +77,55 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_scf", + "results": [ + { + "name": "atomic_forces" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "stress_tensor" + }, + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "total_force" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -102,46 +135,43 @@ ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "atomic_forces", - "fermi_energy", - "pressure", - "stress_tensor", - "total_energy", - "total_energy_contributions", - "total_force" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "pw_scf", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_scf.in", - "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_scf.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0" + "context": [], + "next": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -163,6 +193,9 @@ "flowchartId": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -174,20 +207,40 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_nscf", + "results": [ + { + "name": "fermi_energy" + }, + { + "name": "band_gaps" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -196,40 +249,42 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "fermi_energy", - "band_gaps" + { + "name": "standard_output" + } ], - "name": "pw_nscf", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_nscf.in", - "rendered": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_nscf.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/band_gap_hse_dos.json b/data/workflows/subworkflows/espresso/band_gap_hse_dos.json index 4bf76940..19381919 100644 --- a/data/workflows/subworkflows/espresso/band_gap_hse_dos.json +++ b/data/workflows/subworkflows/espresso/band_gap_hse_dos.json @@ -7,27 +7,23 @@ "properties": [ "atomic_forces", "band_gaps", + "density_of_states", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", - "total_force", - "density_of_states" + "total_force" ], "model": { "type": "dft", "subtype": "hybrid", + "functional": "hse06", "method": { "type": "pseudopotential", "subtype": "us", "data": {} - }, - "functional": { - "slug": "hse06" - }, - "refiners": [], - "modifiers": [] + } }, "units": [ { @@ -71,6 +67,9 @@ "flowchartId": "f494cdb2-304f-5da2-b979-ce3fbba3a6c4", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -82,20 +81,58 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_scf_hse", + "results": [ + { + "name": "atomic_forces" + }, + { + "name": "band_gaps" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "stress_tensor" + }, + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "total_force" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -104,48 +141,44 @@ } ], "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "atomic_forces", - "band_gaps", - "fermi_energy", - "pressure", - "stress_tensor", - "total_energy", - "total_energy_contributions", - "total_force" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "pw_scf_hse", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = {% if kgrid.dimensions[0]%2 == 0 %}{{kgrid.dimensions[0]/2}}{% else %}{{(kgrid.dimensions[0]+1)/2}}{% endif %}, nqx2 = {% if kgrid.dimensions[1]%2 == 0 %}{{kgrid.dimensions[1]/2}}{% else %}{{(kgrid.dimensions[1]+1)/2}}{% endif %}, nqx3 = {% if kgrid.dimensions[2]%2 == 0 %}{{kgrid.dimensions[2]/2}}{% else %}{{(kgrid.dimensions[2]+1)/2}}{% endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{% if d%2 == 0 %}{{d}} {% else %}{{d+1}} {% endif %}{% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_scf_hse.in", - "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = 1, nqx2 = 1, nqx3 = 1\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = {% if kgrid.dimensions[0]%2 == 0 %}{{kgrid.dimensions[0]/2}}{% else %}{{(kgrid.dimensions[0]+1)/2}}{% endif %}, nqx2 = {% if kgrid.dimensions[1]%2 == 0 %}{{kgrid.dimensions[1]/2}}{% else %}{{(kgrid.dimensions[1]+1)/2}}{% endif %}, nqx3 = {% if kgrid.dimensions[2]%2 == 0 %}{{kgrid.dimensions[2]/2}}{% else %}{{(kgrid.dimensions[2]+1)/2}}{% endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{% if d%2 == 0 %}{{d}} {% else %}{{d+1}} {% endif %}{% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_scf_hse.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651" + "context": [], + "next": "3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -164,6 +197,9 @@ "flowchartId": "3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -175,14 +211,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "projwfc.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "projwfc", + "results": [ + { + "name": "density_of_states" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "projwfc.x", "input": [ @@ -191,29 +239,32 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "density_of_states" + { + "name": "standard_output" + } ], - "name": "projwfc", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n", - "contextProviders": [], - "executableName": "projwfc.x", - "name": "projwfc.in", - "rendered": "&PROJWFC\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n degauss = 0.01\n deltaE = 0.05\n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n", + "contextProviders": [], + "executableName": "projwfc.x", + "name": "projwfc.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/band_structure.json b/data/workflows/subworkflows/espresso/band_structure.json index 2f0a7db8..fe8151c9 100644 --- a/data/workflows/subworkflows/espresso/band_structure.json +++ b/data/workflows/subworkflows/espresso/band_structure.json @@ -6,13 +6,13 @@ }, "properties": [ "atomic_forces", + "band_structure", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", - "total_force", - "band_structure" + "total_force" ], "model": { "type": "dft", @@ -22,11 +22,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -67,6 +63,9 @@ "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -78,20 +77,55 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_scf", + "results": [ + { + "name": "atomic_forces" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "stress_tensor" + }, + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "total_force" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -101,46 +135,43 @@ ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "atomic_forces", - "fermi_energy", - "pressure", - "stress_tensor", - "total_energy", - "total_energy_contributions", - "total_force" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "pw_scf", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_scf.in", - "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_scf.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "d618df45-5af3-5da5-8882-d74a27e00b04" + "context": [], + "next": "d618df45-5af3-5da5-8882-d74a27e00b04", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -159,6 +190,9 @@ "flowchartId": "d618df45-5af3-5da5-8882-d74a27e00b04", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -170,20 +204,37 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_bands", + "results": [ + { + "name": "band_structure" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -192,40 +243,41 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "band_structure" + { + "name": "standard_output" + } ], - "name": "pw_bands", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", - "contextProviders": [ - { - "name": "KPathFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_bands.in", - "rendered": "&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", + "contextProviders": [ + { + "name": "KPathFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_bands.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2" + "context": [], + "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -240,6 +292,9 @@ "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -251,14 +306,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "bands", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -267,26 +330,32 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", - "contextProviders": [], - "executableName": "bands.x", - "name": "bands.in", - "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", + "contextProviders": [], + "executableName": "bands.x", + "name": "bands.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/band_structure_dos.json b/data/workflows/subworkflows/espresso/band_structure_dos.json index dfb7aea0..0fd3ab7f 100644 --- a/data/workflows/subworkflows/espresso/band_structure_dos.json +++ b/data/workflows/subworkflows/espresso/band_structure_dos.json @@ -6,16 +6,15 @@ }, "properties": [ "atomic_forces", + "band_gaps", + "band_structure", + "density_of_states", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", - "total_force", - "band_structure", - "fermi_energy", - "band_gaps", - "density_of_states" + "total_force" ], "model": { "type": "dft", @@ -25,11 +24,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -70,6 +65,9 @@ "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -81,20 +79,55 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_scf", + "results": [ + { + "name": "atomic_forces" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "stress_tensor" + }, + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "total_force" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -104,46 +137,43 @@ ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "atomic_forces", - "fermi_energy", - "pressure", - "stress_tensor", - "total_energy", - "total_energy_contributions", - "total_force" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "pw_scf", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_scf.in", - "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_scf.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "d618df45-5af3-5da5-8882-d74a27e00b04" + "context": [], + "next": "d618df45-5af3-5da5-8882-d74a27e00b04", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -162,6 +192,9 @@ "flowchartId": "d618df45-5af3-5da5-8882-d74a27e00b04", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -173,20 +206,37 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_bands", + "results": [ + { + "name": "band_structure" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -195,40 +245,41 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "band_structure" + { + "name": "standard_output" + } ], - "name": "pw_bands", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", - "contextProviders": [ - { - "name": "KPathFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_bands.in", - "rendered": "&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", + "contextProviders": [ + { + "name": "KPathFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_bands.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2" + "context": [], + "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -243,6 +294,9 @@ "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -254,14 +308,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "bands", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -270,27 +332,31 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", - "contextProviders": [], - "executableName": "bands.x", - "name": "bands.in", - "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", + "contextProviders": [], + "executableName": "bands.x", + "name": "bands.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0" + "context": [], + "next": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -312,6 +378,9 @@ "flowchartId": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -323,20 +392,40 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_nscf", + "results": [ + { + "name": "fermi_energy" + }, + { + "name": "band_gaps" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -345,41 +434,41 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "fermi_energy", - "band_gaps" + { + "name": "standard_output" + } ], - "name": "pw_nscf", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_nscf.in", - "rendered": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_nscf.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651" + "context": [], + "next": "3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -398,6 +487,9 @@ "flowchartId": "3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -409,14 +501,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "projwfc.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "projwfc", + "results": [ + { + "name": "density_of_states" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "projwfc.x", "input": [ @@ -425,29 +529,32 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "density_of_states" + { + "name": "standard_output" + } ], - "name": "projwfc", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n", - "contextProviders": [], - "executableName": "projwfc.x", - "name": "projwfc.in", - "rendered": "&PROJWFC\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n degauss = 0.01\n deltaE = 0.05\n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n", + "contextProviders": [], + "executableName": "projwfc.x", + "name": "projwfc.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/band_structure_hse.json b/data/workflows/subworkflows/espresso/band_structure_hse.json index 149de8ce..fde7e013 100644 --- a/data/workflows/subworkflows/espresso/band_structure_hse.json +++ b/data/workflows/subworkflows/espresso/band_structure_hse.json @@ -5,27 +5,23 @@ "name": "espresso" }, "properties": [ + "atomic_forces", + "fermi_energy", + "pressure", + "stress_tensor", "total_energy", "total_energy_contributions", - "pressure", - "fermi_energy", - "atomic_forces", - "total_force", - "stress_tensor" + "total_force" ], "model": { "type": "dft", "subtype": "hybrid", + "functional": "hse06", "method": { "type": "pseudopotential", "subtype": "us", "data": {} - }, - "functional": { - "slug": "hse06" - }, - "refiners": [], - "modifiers": [] + } }, "units": [ { @@ -66,6 +62,9 @@ "flowchartId": "08bd7e4a-2454-53b7-8cc9-9a95975f7e6f", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -77,20 +76,55 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_scf_bands_hse", + "results": [ + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "pressure" + }, + { + "name": "fermi_energy" + }, + { + "name": "atomic_forces" + }, + { + "name": "total_force" + }, + { + "name": "stress_tensor" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -99,50 +133,47 @@ } ], "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "total_energy", - "total_energy_contributions", - "pressure", - "fermi_energy", - "atomic_forces", - "total_force", - "stress_tensor" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "pw_scf_bands_hse", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n {% for d in qgrid.dimensions -%}\n nqx{{loop.index}} = {{d}}\n {% endfor %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal\n{{ '{{' }} {{ explicitKPath.length }} {% raw %} + KPOINTS|length {% endraw %} {{ '}}' }}\n{% raw %}\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n{% endraw %}\n{% for point in explicitKPath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}0.0000001\n{% endfor %}\n", - "contextProviders": [ - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - }, - { - "name": "QGridFormDataManager" - }, - { - "name": "ExplicitKPathFormDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_scf_bands_hse.in", - "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n nqx1 = 1\n nqx2 = 1\n nqx3 = 1\n \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal\n{{ 101 + KPOINTS|length }}\n\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n\n 0.000000000 0.000000000 0.000000000 0.0000001\n 0.050000000 0.000000000 0.050000000 0.0000001\n 0.100000000 0.000000000 0.100000000 0.0000001\n 0.150000000 0.000000000 0.150000000 0.0000001\n 0.200000000 0.000000000 0.200000000 0.0000001\n 0.250000000 0.000000000 0.250000000 0.0000001\n 0.300000000 0.000000000 0.300000000 0.0000001\n 0.350000000 0.000000000 0.350000000 0.0000001\n 0.400000000 0.000000000 0.400000000 0.0000001\n 0.450000000 0.000000000 0.450000000 0.0000001\n 0.500000000 0.000000000 0.500000000 0.0000001\n 0.500000000 0.025000000 0.525000000 0.0000001\n 0.500000000 0.050000000 0.550000000 0.0000001\n 0.500000000 0.075000000 0.575000000 0.0000001\n 0.500000000 0.100000000 0.600000000 0.0000001\n 0.500000000 0.125000000 0.625000000 0.0000001\n 0.500000000 0.150000000 0.650000000 0.0000001\n 0.500000000 0.175000000 0.675000000 0.0000001\n 0.500000000 0.200000000 0.700000000 0.0000001\n 0.500000000 0.225000000 0.725000000 0.0000001\n 0.500000000 0.250000000 0.750000000 0.0000001\n 0.487500000 0.262500000 0.750000000 0.0000001\n 0.475000000 0.275000000 0.750000000 0.0000001\n 0.462500000 0.287500000 0.750000000 0.0000001\n 0.450000000 0.300000000 0.750000000 0.0000001\n 0.437500000 0.312500000 0.750000000 0.0000001\n 0.425000000 0.325000000 0.750000000 0.0000001\n 0.412500000 0.337500000 0.750000000 0.0000001\n 0.400000000 0.350000000 0.750000000 0.0000001\n 0.387500000 0.362500000 0.750000000 0.0000001\n 0.375000000 0.375000000 0.750000000 0.0000001\n 0.337500000 0.337500000 0.675000000 0.0000001\n 0.300000000 0.300000000 0.600000000 0.0000001\n 0.262500000 0.262500000 0.525000000 0.0000001\n 0.225000000 0.225000000 0.450000000 0.0000001\n 0.187500000 0.187500000 0.375000000 0.0000001\n 0.150000000 0.150000000 0.300000000 0.0000001\n 0.112500000 0.112500000 0.225000000 0.0000001\n 0.075000000 0.075000000 0.150000000 0.0000001\n 0.037500000 0.037500000 0.075000000 0.0000001\n 0.000000000 0.000000000 0.000000000 0.0000001\n 0.050000000 0.050000000 0.050000000 0.0000001\n 0.100000000 0.100000000 0.100000000 0.0000001\n 0.150000000 0.150000000 0.150000000 0.0000001\n 0.200000000 0.200000000 0.200000000 0.0000001\n 0.250000000 0.250000000 0.250000000 0.0000001\n 0.300000000 0.300000000 0.300000000 0.0000001\n 0.350000000 0.350000000 0.350000000 0.0000001\n 0.400000000 0.400000000 0.400000000 0.0000001\n 0.450000000 0.450000000 0.450000000 0.0000001\n 0.500000000 0.500000000 0.500000000 0.0000001\n 0.512500000 0.475000000 0.512500000 0.0000001\n 0.525000000 0.450000000 0.525000000 0.0000001\n 0.537500000 0.425000000 0.537500000 0.0000001\n 0.550000000 0.400000000 0.550000000 0.0000001\n 0.562500000 0.375000000 0.562500000 0.0000001\n 0.575000000 0.350000000 0.575000000 0.0000001\n 0.587500000 0.325000000 0.587500000 0.0000001\n 0.600000000 0.300000000 0.600000000 0.0000001\n 0.612500000 0.275000000 0.612500000 0.0000001\n 0.625000000 0.250000000 0.625000000 0.0000001\n 0.612500000 0.250000000 0.637500000 0.0000001\n 0.600000000 0.250000000 0.650000000 0.0000001\n 0.587500000 0.250000000 0.662500000 0.0000001\n 0.575000000 0.250000000 0.675000000 0.0000001\n 0.562500000 0.250000000 0.687500000 0.0000001\n 0.550000000 0.250000000 0.700000000 0.0000001\n 0.537500000 0.250000000 0.712500000 0.0000001\n 0.525000000 0.250000000 0.725000000 0.0000001\n 0.512500000 0.250000000 0.737500000 0.0000001\n 0.500000000 0.250000000 0.750000000 0.0000001\n 0.500000000 0.275000000 0.725000000 0.0000001\n 0.500000000 0.300000000 0.700000000 0.0000001\n 0.500000000 0.325000000 0.675000000 0.0000001\n 0.500000000 0.350000000 0.650000000 0.0000001\n 0.500000000 0.375000000 0.625000000 0.0000001\n 0.500000000 0.400000000 0.600000000 0.0000001\n 0.500000000 0.425000000 0.575000000 0.0000001\n 0.500000000 0.450000000 0.550000000 0.0000001\n 0.500000000 0.475000000 0.525000000 0.0000001\n 0.500000000 0.500000000 0.500000000 0.0000001\n 0.512500000 0.475000000 0.512500000 0.0000001\n 0.525000000 0.450000000 0.525000000 0.0000001\n 0.537500000 0.425000000 0.537500000 0.0000001\n 0.550000000 0.400000000 0.550000000 0.0000001\n 0.562500000 0.375000000 0.562500000 0.0000001\n 0.575000000 0.350000000 0.575000000 0.0000001\n 0.587500000 0.325000000 0.587500000 0.0000001\n 0.600000000 0.300000000 0.600000000 0.0000001\n 0.612500000 0.275000000 0.612500000 0.0000001\n 0.625000000 0.250000000 0.625000000 0.0000001\n 0.612500000 0.225000000 0.612500000 0.0000001\n 0.600000000 0.200000000 0.600000000 0.0000001\n 0.587500000 0.175000000 0.587500000 0.0000001\n 0.575000000 0.150000000 0.575000000 0.0000001\n 0.562500000 0.125000000 0.562500000 0.0000001\n 0.550000000 0.100000000 0.550000000 0.0000001\n 0.537500000 0.075000000 0.537500000 0.0000001\n 0.525000000 0.050000000 0.525000000 0.0000001\n 0.512500000 0.025000000 0.512500000 0.0000001\n 0.500000000 0.000000000 0.500000000 0.0000001\n\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n {% for d in qgrid.dimensions -%}\n nqx{{loop.index}} = {{d}}\n {% endfor %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal\n{{ '{{' }} {{ explicitKPath.length }} {% raw %} + KPOINTS|length {% endraw %} {{ '}}' }}\n{% raw %}\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n{% endraw %}\n{% for point in explicitKPath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}0.0000001\n{% endfor %}\n", + "contextProviders": [ + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + }, + { + "name": "QGridFormDataManager" + }, + { + "name": "ExplicitKPathFormDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_scf_bands_hse.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2" + "context": [], + "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -157,6 +188,9 @@ "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -168,14 +202,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "bands", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -184,26 +226,32 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", - "contextProviders": [], - "executableName": "bands.x", - "name": "bands.in", - "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", + "contextProviders": [], + "executableName": "bands.x", + "name": "bands.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/band_structure_magn.json b/data/workflows/subworkflows/espresso/band_structure_magn.json index ea2e51b3..be2d6688 100644 --- a/data/workflows/subworkflows/espresso/band_structure_magn.json +++ b/data/workflows/subworkflows/espresso/band_structure_magn.json @@ -6,13 +6,13 @@ }, "properties": [ "atomic_forces", + "band_structure", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", - "total_force", - "band_structure" + "total_force" ], "model": { "type": "dft", @@ -22,11 +22,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -67,6 +63,9 @@ "flowchartId": "c229d2a0-3c19-5f13-b3e0-ceb86cb9fbc1", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -78,20 +77,55 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_scf_magn", + "results": [ + { + "name": "atomic_forces" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "stress_tensor" + }, + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "total_force" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -100,50 +134,47 @@ } ], "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "atomic_forces", - "fermi_energy", - "pressure", - "stress_tensor", - "total_energy", - "total_energy_contributions", - "total_force" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "pw_scf_magn", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - }, - { - "name": "CollinearMagnetizationDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_scf_magn.in", - "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n nspin = 2\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + }, + { + "name": "CollinearMagnetizationDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_scf_magn.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "ea06c333-0cc7-51d4-bd98-cc53fa0844d1" + "context": [], + "next": "ea06c333-0cc7-51d4-bd98-cc53fa0844d1", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -162,6 +193,9 @@ "flowchartId": "ea06c333-0cc7-51d4-bd98-cc53fa0844d1", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -173,20 +207,37 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_bands_magn", + "results": [ + { + "name": "band_structure" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -195,43 +246,44 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "band_structure" + { + "name": "standard_output" + } ], - "name": "pw_bands_magn", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", - "contextProviders": [ - { - "name": "KPathFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - }, - { - "name": "CollinearMagnetizationDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_bands_magn.in", - "rendered": "&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n nspin = 2\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", + "contextProviders": [ + { + "name": "KPathFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + }, + { + "name": "CollinearMagnetizationDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_bands_magn.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "a8e4de4b-1f55-50e8-a712-ce0b37c04752" + "context": [], + "next": "a8e4de4b-1f55-50e8-a712-ce0b37c04752", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -246,6 +298,9 @@ "flowchartId": "a8e4de4b-1f55-50e8-a712-ce0b37c04752", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -257,14 +312,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "bands_spin_up", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -273,27 +336,31 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "bands_spin_up", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_up.dat'{% endraw %}\n spin_component = 1\n no_overlap = .true.\n/\n", - "contextProviders": [], - "executableName": "bands.x", - "name": "bands_spin_up.in", - "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands_up.dat'\n spin_component = 1\n no_overlap = .true.\n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_up.dat'{% endraw %}\n spin_component = 1\n no_overlap = .true.\n/\n", + "contextProviders": [], + "executableName": "bands.x", + "name": "bands_spin_up.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "fd937050-a3f3-5d4d-bb50-d150a93ea5e0" + "context": [], + "next": "fd937050-a3f3-5d4d-bb50-d150a93ea5e0", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -308,6 +375,9 @@ "flowchartId": "fd937050-a3f3-5d4d-bb50-d150a93ea5e0", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -319,14 +389,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "bands_spin_dn", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -335,26 +413,32 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "bands_spin_dn", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_dn.dat'{% endraw %}\n spin_component = 2\n no_overlap = .true.\n/\n", - "contextProviders": [], - "executableName": "bands.x", - "name": "bands_spin_dn.in", - "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands_dn.dat'\n spin_component = 2\n no_overlap = .true.\n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_dn.dat'{% endraw %}\n spin_component = 2\n no_overlap = .true.\n/\n", + "contextProviders": [], + "executableName": "bands.x", + "name": "bands_spin_dn.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/band_structure_soc.json b/data/workflows/subworkflows/espresso/band_structure_soc.json index d22c44c1..105bd41c 100644 --- a/data/workflows/subworkflows/espresso/band_structure_soc.json +++ b/data/workflows/subworkflows/espresso/band_structure_soc.json @@ -6,13 +6,13 @@ }, "properties": [ "atomic_forces", + "band_structure", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", - "total_force", - "band_structure" + "total_force" ], "model": { "type": "dft", @@ -24,11 +24,7 @@ "searchText": "nc-fr" } }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -69,6 +65,9 @@ "flowchartId": "74ec024a-f247-5f15-9c21-cc169bcb62c7", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -80,20 +79,55 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_scf_soc", + "results": [ + { + "name": "atomic_forces" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "stress_tensor" + }, + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "total_force" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -102,50 +136,47 @@ } ], "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "atomic_forces", - "fermi_energy", - "pressure", - "stress_tensor", - "total_energy", - "total_energy_contributions", - "total_force" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "pw_scf_soc", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - }, - { - "name": "NonCollinearMagnetizationDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_scf_soc.in", - "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + }, + { + "name": "NonCollinearMagnetizationDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_scf_soc.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "cee6ae30-cf34-5138-bdc5-5c57c2a6de5b" + "context": [], + "next": "cee6ae30-cf34-5138-bdc5-5c57c2a6de5b", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -164,6 +195,9 @@ "flowchartId": "cee6ae30-cf34-5138-bdc5-5c57c2a6de5b", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -175,20 +209,37 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_bands_soc", + "results": [ + { + "name": "band_structure" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -197,43 +248,44 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "band_structure" + { + "name": "standard_output" + } ], - "name": "pw_bands_soc", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", - "contextProviders": [ - { - "name": "KPathFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - }, - { - "name": "NonCollinearMagnetizationDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_bands_soc.in", - "rendered": "&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", + "contextProviders": [ + { + "name": "KPathFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + }, + { + "name": "NonCollinearMagnetizationDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_bands_soc.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2" + "context": [], + "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -248,6 +300,9 @@ "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -259,14 +314,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "bands", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -275,26 +338,32 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", - "contextProviders": [], - "executableName": "bands.x", - "name": "bands.in", - "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", + "contextProviders": [], + "executableName": "bands.x", + "name": "bands.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/dielectric_tensor.json b/data/workflows/subworkflows/espresso/dielectric_tensor.json index 152a6f99..88f1f6b8 100644 --- a/data/workflows/subworkflows/espresso/dielectric_tensor.json +++ b/data/workflows/subworkflows/espresso/dielectric_tensor.json @@ -6,15 +6,14 @@ }, "properties": [ "atomic_forces", + "band_gaps", + "dielectric_tensor", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", - "total_force", - "fermi_energy", - "band_gaps", - "dielectric_tensor" + "total_force" ], "model": { "type": "dft", @@ -24,11 +23,7 @@ "subtype": "nc", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -69,6 +64,9 @@ "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -80,20 +78,55 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_scf", + "results": [ + { + "name": "atomic_forces" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "stress_tensor" + }, + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "total_force" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -103,46 +136,43 @@ ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "atomic_forces", - "fermi_energy", - "pressure", - "stress_tensor", - "total_energy", - "total_energy_contributions", - "total_force" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "pw_scf", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_scf.in", - "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_scf.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "3b230ec3-0791-52f7-a4db-625390b8718f" + "context": [], + "next": "3b230ec3-0791-52f7-a4db-625390b8718f", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Set No-Symmetry Flag", @@ -150,22 +180,18 @@ "operand": "NO_SYMMETRY_NO_INVERSION", "value": true, "input": [], + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "3b230ec3-0791-52f7-a4db-625390b8718f", "tags": [], + "flowchartId": "3b230ec3-0791-52f7-a4db-625390b8718f", "head": false, "next": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -187,6 +213,9 @@ "flowchartId": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -198,20 +227,40 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_nscf", + "results": [ + { + "name": "fermi_energy" + }, + { + "name": "band_gaps" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -220,41 +269,41 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "fermi_energy", - "band_gaps" + { + "name": "standard_output" + } ], - "name": "pw_nscf", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_nscf.in", - "rendered": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_nscf.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb" + "context": [], + "next": "8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -273,6 +322,9 @@ "flowchartId": "8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -284,14 +336,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "epsilon.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "dielectric_tensor", + "results": [ + { + "name": "dielectric_tensor" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "epsilon.x", "input": [ @@ -300,29 +364,32 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "dielectric_tensor" + { + "name": "standard_output" + } ], - "name": "dielectric_tensor", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n", - "contextProviders": [], - "executableName": "epsilon.x", - "name": "epsilon.in", - "rendered": "&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n", + "contextProviders": [], + "executableName": "epsilon.x", + "name": "epsilon.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/dos.json b/data/workflows/subworkflows/espresso/dos.json index 69e54f39..bcba4b24 100644 --- a/data/workflows/subworkflows/espresso/dos.json +++ b/data/workflows/subworkflows/espresso/dos.json @@ -6,15 +6,14 @@ }, "properties": [ "atomic_forces", + "band_gaps", + "density_of_states", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", - "total_force", - "fermi_energy", - "band_gaps", - "density_of_states" + "total_force" ], "model": { "type": "dft", @@ -24,11 +23,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -69,6 +64,9 @@ "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -80,20 +78,55 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_scf", + "results": [ + { + "name": "atomic_forces" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "stress_tensor" + }, + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "total_force" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -103,46 +136,43 @@ ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "atomic_forces", - "fermi_energy", - "pressure", - "stress_tensor", - "total_energy", - "total_energy_contributions", - "total_force" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "pw_scf", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_scf.in", - "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_scf.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0" + "context": [], + "next": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -164,6 +194,9 @@ "flowchartId": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -175,20 +208,40 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_nscf", + "results": [ + { + "name": "fermi_energy" + }, + { + "name": "band_gaps" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -197,41 +250,41 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "fermi_energy", - "band_gaps" + { + "name": "standard_output" + } ], - "name": "pw_nscf", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_nscf.in", - "rendered": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_nscf.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651" + "context": [], + "next": "3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -250,6 +303,9 @@ "flowchartId": "3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -261,14 +317,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "projwfc.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "projwfc", + "results": [ + { + "name": "density_of_states" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "projwfc.x", "input": [ @@ -277,29 +345,32 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "density_of_states" + { + "name": "standard_output" + } ], - "name": "projwfc", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n", - "contextProviders": [], - "executableName": "projwfc.x", - "name": "projwfc.in", - "rendered": "&PROJWFC\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n degauss = 0.01\n deltaE = 0.05\n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n", + "contextProviders": [], + "executableName": "projwfc.x", + "name": "projwfc.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/electronic_density_mesh.json b/data/workflows/subworkflows/espresso/electronic_density_mesh.json index 75c3832e..65fff8eb 100644 --- a/data/workflows/subworkflows/espresso/electronic_density_mesh.json +++ b/data/workflows/subworkflows/espresso/electronic_density_mesh.json @@ -21,11 +21,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -66,6 +62,9 @@ "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -77,20 +76,55 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_scf", + "results": [ + { + "name": "atomic_forces" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "stress_tensor" + }, + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "total_force" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -100,46 +134,43 @@ ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "atomic_forces", - "fermi_energy", - "pressure", - "stress_tensor", - "total_energy", - "total_energy_contributions", - "total_force" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "pw_scf", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_scf.in", - "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_scf.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "e1a6e1e9-7994-5cd0-98d7-ae8909a10061" + "context": [], + "next": "e1a6e1e9-7994-5cd0-98d7-ae8909a10061", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -154,6 +185,9 @@ "flowchartId": "e1a6e1e9-7994-5cd0-98d7-ae8909a10061", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -165,14 +199,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "pp.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "pp_density", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pp.x", "input": [ @@ -181,27 +223,32 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "results": [], - "name": "pp_density", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n", - "contextProviders": [], - "executableName": "pp.x", - "name": "pp_density.in", - "rendered": "&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n", + "contextProviders": [], + "executableName": "pp.x", + "name": "pp_density.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/esm.json b/data/workflows/subworkflows/espresso/esm.json index ef2185e5..e795c7a7 100644 --- a/data/workflows/subworkflows/espresso/esm.json +++ b/data/workflows/subworkflows/espresso/esm.json @@ -5,15 +5,15 @@ "name": "espresso" }, "properties": [ - "total_energy", - "total_energy_contributions", - "pressure", - "fermi_energy", "atomic_forces", - "total_force", - "stress_tensor", + "charge_density_profile", + "fermi_energy", "potential_profile", - "charge_density_profile" + "pressure", + "stress_tensor", + "total_energy", + "total_energy_contributions", + "total_force" ], "model": { "type": "dft", @@ -23,11 +23,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -74,6 +70,9 @@ "flowchartId": "2f487bc6-c237-53e4-bad5-be60369662cb", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -85,20 +84,61 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_esm", + "results": [ + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "pressure" + }, + { + "name": "fermi_energy" + }, + { + "name": "atomic_forces" + }, + { + "name": "total_force" + }, + { + "name": "stress_tensor" + }, + { + "name": "potential_profile" + }, + { + "name": "charge_density_profile" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -107,51 +147,48 @@ } ], "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "total_energy", - "total_energy_contributions", - "pressure", - "fermi_energy", - "atomic_forces", - "total_force", - "stress_tensor", - "potential_profile", - "charge_density_profile" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "pw_esm", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - }, - { - "name": "BoundaryConditionsFormDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_esm.in", - "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = 'pbc'\n fcp_mu = 0\n esm_w = 0\n esm_efield = 0\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + }, + { + "name": "BoundaryConditionsFormDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_esm.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/esm_relax.json b/data/workflows/subworkflows/espresso/esm_relax.json index 51d682ee..fffb2979 100644 --- a/data/workflows/subworkflows/espresso/esm_relax.json +++ b/data/workflows/subworkflows/espresso/esm_relax.json @@ -5,15 +5,15 @@ "name": "espresso" }, "properties": [ - "total_energy", - "total_energy_contributions", - "pressure", - "fermi_energy", "atomic_forces", - "total_force", - "stress_tensor", + "charge_density_profile", + "fermi_energy", "potential_profile", - "charge_density_profile" + "pressure", + "stress_tensor", + "total_energy", + "total_energy_contributions", + "total_force" ], "model": { "type": "dft", @@ -23,11 +23,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -74,6 +70,9 @@ "flowchartId": "a2bec506-1fdd-5125-a787-85f31cde20c1", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -85,20 +84,61 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_esm_relax", + "results": [ + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "pressure" + }, + { + "name": "fermi_energy" + }, + { + "name": "atomic_forces" + }, + { + "name": "total_force" + }, + { + "name": "stress_tensor" + }, + { + "name": "potential_profile" + }, + { + "name": "charge_density_profile" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -107,51 +147,48 @@ } ], "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "total_energy", - "total_energy_contributions", - "pressure", - "fermi_energy", - "atomic_forces", - "total_force", - "stress_tensor", - "potential_profile", - "charge_density_profile" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "pw_esm_relax", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - }, - { - "name": "BoundaryConditionsFormDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_esm_relax.in", - "rendered": "&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = 'pbc'\n fcp_mu = 0\n esm_w = 0\n esm_efield = 0\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + }, + { + "name": "BoundaryConditionsFormDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_esm_relax.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/espresso_extract_kpoints.json b/data/workflows/subworkflows/espresso/espresso_extract_kpoints.json index 3b653c4c..4aa5b2e8 100644 --- a/data/workflows/subworkflows/espresso/espresso_extract_kpoints.json +++ b/data/workflows/subworkflows/espresso/espresso_extract_kpoints.json @@ -28,6 +28,9 @@ "flowchartId": "a716b133-2d04-50b5-b497-100265e3fa24", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -38,14 +41,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "espresso_extract_kpoints", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -58,35 +69,44 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "espresso_extract_kpoints", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "python", - "content": "import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n", - "contextProviders": [], - "executableName": "python", - "name": "espresso_extract_kpoints.py", - "rendered": "import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n", + "contextProviders": [], + "executableName": "python", + "name": "espresso_extract_kpoints.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/espresso_xml_get_qpt_irr.json b/data/workflows/subworkflows/espresso/espresso_xml_get_qpt_irr.json index 6a74d613..46d489c4 100644 --- a/data/workflows/subworkflows/espresso/espresso_xml_get_qpt_irr.json +++ b/data/workflows/subworkflows/espresso/espresso_xml_get_qpt_irr.json @@ -14,93 +14,7 @@ "data": {} } }, - "units": [ - { - "type": "execution", - "name": "python", - "head": true, - "results": [], - "monitors": [ - { - "name": "standard_output" - } - ], - "flowchartId": "9b8a495e-1ac1-56a7-b2e0-af1b405a1219", - "preProcessors": [], - "postProcessors": [], - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - }, - "executable": { - "isDefault": true, - "monitors": [ - "standard_output" - ], - "name": "python", - "schemaVersion": "2022.8.16" - }, - "flavor": { - "applicationName": "python", - "executableName": "python", - "input": [ - { - "name": "espresso_xml_get_qpt_irr.py" - } - ], - "monitors": [ - "standard_output" - ], - "name": "espresso_xml_get_qpt_irr", - "schemaVersion": "2022.8.16", - "isDefault": false - }, - "next": "d0fd8654-2106-546b-8792-7bb46272befc", - "status": "idle", - "statusTrack": [], - "tags": [], - "input": [ - { - "applicationName": "python", - "content": "# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n{# JOB_WORK_DIR will be initialized at runtime => avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n", - "contextProviders": [], - "executableName": "python", - "name": "espresso_xml_get_qpt_irr.py", - "rendered": "# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n\n\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n", - "schemaVersion": "2022.8.16" - } - ] - }, - { - "name": "assignment", - "type": "assignment", - "operand": "Q_POINTS", - "value": "json.loads(STDOUT)", - "input": [ - { - "scope": "9b8a495e-1ac1-56a7-b2e0-af1b405a1219", - "name": "STDOUT" - } - ], - "status": "idle", - "statusTrack": [], - "flowchartId": "d0fd8654-2106-546b-8792-7bb46272befc", - "tags": [], - "head": false, - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - } - } - ] + "units": [], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/fixed_cell_relaxation.json b/data/workflows/subworkflows/espresso/fixed_cell_relaxation.json index 69c9ceab..b7b58cbc 100644 --- a/data/workflows/subworkflows/espresso/fixed_cell_relaxation.json +++ b/data/workflows/subworkflows/espresso/fixed_cell_relaxation.json @@ -5,13 +5,13 @@ "name": "espresso" }, "properties": [ - "total_energy", + "atomic_forces", "fermi_energy", + "final_structure", "pressure", - "atomic_forces", - "total_force", "stress_tensor", - "final_structure" + "total_energy", + "total_force" ], "model": { "type": "dft", @@ -21,11 +21,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -69,6 +65,9 @@ "flowchartId": "c42871f6-ab79-5987-b228-c3bd80f16ffd", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -80,20 +79,55 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_relax", + "results": [ + { + "name": "total_energy" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "atomic_forces" + }, + { + "name": "total_force" + }, + { + "name": "stress_tensor" + }, + { + "name": "final_structure" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -102,47 +136,48 @@ } ], "monitors": [ - "standard_output", - "convergence_electronic", - "convergence_ionic" - ], - "results": [ - "total_energy", - "fermi_energy", - "pressure", - "atomic_forces", - "total_force", - "stress_tensor", - "final_structure" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + }, + { + "name": "convergence_ionic" + } ], - "name": "pw_relax", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_relax.in", - "rendered": "&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_relax.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/gw_band_structure_band_gap_full_frequency.json b/data/workflows/subworkflows/espresso/gw_band_structure_band_gap_full_frequency.json index 073bb826..2dbde822 100644 --- a/data/workflows/subworkflows/espresso/gw_band_structure_band_gap_full_frequency.json +++ b/data/workflows/subworkflows/espresso/gw_band_structure_band_gap_full_frequency.json @@ -6,15 +6,14 @@ }, "properties": [ "atomic_forces", + "band_gaps", + "band_structure", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", - "total_force", - "band_structure", - "fermi_energy", - "band_gaps" + "total_force" ], "model": { "type": "dft", @@ -26,11 +25,7 @@ "searchText": ".*dojo-oncv.*" } }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -71,6 +66,9 @@ "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -82,20 +80,55 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_scf", + "results": [ + { + "name": "atomic_forces" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "stress_tensor" + }, + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "total_force" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -105,46 +138,43 @@ ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "atomic_forces", - "fermi_energy", - "pressure", - "stress_tensor", - "total_energy", - "total_energy_contributions", - "total_force" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "pw_scf", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_scf.in", - "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_scf.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "d82a9858-3f20-5fcd-baeb-0f1d65e9e22e" + "context": [], + "next": "d82a9858-3f20-5fcd-baeb-0f1d65e9e22e", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -169,6 +199,9 @@ "flowchartId": "d82a9858-3f20-5fcd-baeb-0f1d65e9e22e", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -180,14 +213,32 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "gw.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "gw_bands_full_frequency", + "results": [ + { + "name": "band_structure" + }, + { + "name": "fermi_energy" + }, + { + "name": "band_gaps" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "gw.x", "input": [ @@ -196,41 +247,42 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "band_structure", - "fermi_energy", - "band_gaps" + { + "name": "standard_output" + } ], - "name": "gw_bands_full_frequency", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QGridFormDataManager" - }, - { - "name": "ExplicitKPath2PIBAFormDataManager" - } - ], - "executableName": "gw.x", - "name": "gw_bands_full_frequency.in", - "rendered": "&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n\n ! the grid used for the linear response\n kpt_grid = 2, 2, 2\n qpt_grid = 1, 1, 1\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n101\n 0.000000000 0.000000000 0.000000000\n 0.028867513 -0.040824829 0.050000000\n 0.057735027 -0.081649658 0.100000000\n 0.086602540 -0.122474487 0.150000000\n 0.115470054 -0.163299316 0.200000000\n 0.144337567 -0.204124145 0.250000000\n 0.173205081 -0.244948974 0.300000000\n 0.202072594 -0.285773803 0.350000000\n 0.230940108 -0.326598632 0.400000000\n 0.259807621 -0.367423461 0.450000000\n 0.288675135 -0.408248290 0.500000000\n 0.274241378 -0.387835876 0.525000000\n 0.259807621 -0.367423461 0.550000000\n 0.245373864 -0.347011047 0.575000000\n 0.230940108 -0.326598632 0.600000000\n 0.216506351 -0.306186218 0.625000000\n 0.202072594 -0.285773803 0.650000000\n 0.187638837 -0.265361389 0.675000000\n 0.173205081 -0.244948974 0.700000000\n 0.158771324 -0.224536560 0.725000000\n 0.144337567 -0.204124145 0.750000000\n 0.129903811 -0.183711731 0.750000000\n 0.115470054 -0.163299316 0.750000000\n 0.101036297 -0.142886902 0.750000000\n 0.086602540 -0.122474487 0.750000000\n 0.072168784 -0.102062073 0.750000000\n 0.057735027 -0.081649658 0.750000000\n 0.043301270 -0.061237244 0.750000000\n 0.028867513 -0.040824829 0.750000000\n 0.014433757 -0.020412415 0.750000000\n -0.000000000 -0.000000000 0.750000000\n -0.000000000 -0.000000000 0.675000000\n -0.000000000 -0.000000000 0.600000000\n -0.000000000 -0.000000000 0.525000000\n -0.000000000 -0.000000000 0.450000000\n -0.000000000 -0.000000000 0.375000000\n -0.000000000 -0.000000000 0.300000000\n -0.000000000 -0.000000000 0.225000000\n -0.000000000 -0.000000000 0.150000000\n -0.000000000 -0.000000000 0.075000000\n 0.000000000 0.000000000 0.000000000\n 0.028867513 0.020412415 0.050000000\n 0.057735027 0.040824829 0.100000000\n 0.086602540 0.061237244 0.150000000\n 0.115470054 0.081649658 0.200000000\n 0.144337567 0.102062073 0.250000000\n 0.173205081 0.122474487 0.300000000\n 0.202072594 0.142886902 0.350000000\n 0.230940108 0.163299316 0.400000000\n 0.259807621 0.183711731 0.450000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.339193283 -0.204124145 0.637500000\n 0.317542648 -0.204124145 0.650000000\n 0.295892013 -0.204124145 0.662500000\n 0.274241378 -0.204124145 0.675000000\n 0.252590743 -0.204124145 0.687500000\n 0.230940108 -0.204124145 0.700000000\n 0.209289473 -0.204124145 0.712500000\n 0.187638837 -0.204124145 0.725000000\n 0.165988202 -0.204124145 0.737500000\n 0.144337567 -0.204124145 0.750000000\n 0.158771324 -0.163299316 0.725000000\n 0.173205081 -0.122474487 0.700000000\n 0.187638837 -0.081649658 0.675000000\n 0.202072594 -0.040824829 0.650000000\n 0.216506351 -0.000000000 0.625000000\n 0.230940108 0.040824829 0.600000000\n 0.245373864 0.081649658 0.575000000\n 0.259807621 0.122474487 0.550000000\n 0.274241378 0.163299316 0.525000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.353627040 -0.224536560 0.612500000\n 0.346410162 -0.244948974 0.600000000\n 0.339193283 -0.265361389 0.587500000\n 0.331976405 -0.285773803 0.575000000\n 0.324759526 -0.306186218 0.562500000\n 0.317542648 -0.326598632 0.550000000\n 0.310325770 -0.347011047 0.537500000\n 0.303108891 -0.367423461 0.525000000\n 0.295892013 -0.387835876 0.512500000\n 0.288675135 -0.408248290 0.500000000\n\n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QGridFormDataManager" + }, + { + "name": "ExplicitKPath2PIBAFormDataManager" + } + ], + "executableName": "gw.x", + "name": "gw_bands_full_frequency.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/gw_band_structure_band_gap_plasmon_pole.json b/data/workflows/subworkflows/espresso/gw_band_structure_band_gap_plasmon_pole.json index 814cf5e3..791c3075 100644 --- a/data/workflows/subworkflows/espresso/gw_band_structure_band_gap_plasmon_pole.json +++ b/data/workflows/subworkflows/espresso/gw_band_structure_band_gap_plasmon_pole.json @@ -6,15 +6,14 @@ }, "properties": [ "atomic_forces", + "band_gaps", + "band_structure", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", - "total_force", - "band_structure", - "fermi_energy", - "band_gaps" + "total_force" ], "model": { "type": "dft", @@ -26,11 +25,7 @@ "searchText": ".*dojo-oncv.*" } }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -71,6 +66,9 @@ "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -82,20 +80,55 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_scf", + "results": [ + { + "name": "atomic_forces" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "stress_tensor" + }, + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "total_force" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -105,46 +138,43 @@ ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "atomic_forces", - "fermi_energy", - "pressure", - "stress_tensor", - "total_energy", - "total_energy_contributions", - "total_force" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "pw_scf", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_scf.in", - "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_scf.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "f9910952-eca9-5a5f-ae03-a0060ae2fc78" + "context": [], + "next": "f9910952-eca9-5a5f-ae03-a0060ae2fc78", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -169,6 +199,9 @@ "flowchartId": "f9910952-eca9-5a5f-ae03-a0060ae2fc78", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -180,14 +213,32 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "gw.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "gw_bands_plasmon_pole", + "results": [ + { + "name": "band_structure" + }, + { + "name": "fermi_energy" + }, + { + "name": "band_gaps" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "gw.x", "input": [ @@ -196,41 +247,42 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "band_structure", - "fermi_energy", - "band_gaps" + { + "name": "standard_output" + } ], - "name": "gw_bands_plasmon_pole", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QGridFormDataManager" - }, - { - "name": "ExplicitKPath2PIBAFormDataManager" - } - ], - "executableName": "gw.x", - "name": "gw_bands_plasmon_pole.in", - "rendered": "&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n\n ! the grid used for the linear response\n kpt_grid = 2, 2, 2\n qpt_grid = 1, 1, 1\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n101\n 0.000000000 0.000000000 0.000000000\n 0.028867513 -0.040824829 0.050000000\n 0.057735027 -0.081649658 0.100000000\n 0.086602540 -0.122474487 0.150000000\n 0.115470054 -0.163299316 0.200000000\n 0.144337567 -0.204124145 0.250000000\n 0.173205081 -0.244948974 0.300000000\n 0.202072594 -0.285773803 0.350000000\n 0.230940108 -0.326598632 0.400000000\n 0.259807621 -0.367423461 0.450000000\n 0.288675135 -0.408248290 0.500000000\n 0.274241378 -0.387835876 0.525000000\n 0.259807621 -0.367423461 0.550000000\n 0.245373864 -0.347011047 0.575000000\n 0.230940108 -0.326598632 0.600000000\n 0.216506351 -0.306186218 0.625000000\n 0.202072594 -0.285773803 0.650000000\n 0.187638837 -0.265361389 0.675000000\n 0.173205081 -0.244948974 0.700000000\n 0.158771324 -0.224536560 0.725000000\n 0.144337567 -0.204124145 0.750000000\n 0.129903811 -0.183711731 0.750000000\n 0.115470054 -0.163299316 0.750000000\n 0.101036297 -0.142886902 0.750000000\n 0.086602540 -0.122474487 0.750000000\n 0.072168784 -0.102062073 0.750000000\n 0.057735027 -0.081649658 0.750000000\n 0.043301270 -0.061237244 0.750000000\n 0.028867513 -0.040824829 0.750000000\n 0.014433757 -0.020412415 0.750000000\n -0.000000000 -0.000000000 0.750000000\n -0.000000000 -0.000000000 0.675000000\n -0.000000000 -0.000000000 0.600000000\n -0.000000000 -0.000000000 0.525000000\n -0.000000000 -0.000000000 0.450000000\n -0.000000000 -0.000000000 0.375000000\n -0.000000000 -0.000000000 0.300000000\n -0.000000000 -0.000000000 0.225000000\n -0.000000000 -0.000000000 0.150000000\n -0.000000000 -0.000000000 0.075000000\n 0.000000000 0.000000000 0.000000000\n 0.028867513 0.020412415 0.050000000\n 0.057735027 0.040824829 0.100000000\n 0.086602540 0.061237244 0.150000000\n 0.115470054 0.081649658 0.200000000\n 0.144337567 0.102062073 0.250000000\n 0.173205081 0.122474487 0.300000000\n 0.202072594 0.142886902 0.350000000\n 0.230940108 0.163299316 0.400000000\n 0.259807621 0.183711731 0.450000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.339193283 -0.204124145 0.637500000\n 0.317542648 -0.204124145 0.650000000\n 0.295892013 -0.204124145 0.662500000\n 0.274241378 -0.204124145 0.675000000\n 0.252590743 -0.204124145 0.687500000\n 0.230940108 -0.204124145 0.700000000\n 0.209289473 -0.204124145 0.712500000\n 0.187638837 -0.204124145 0.725000000\n 0.165988202 -0.204124145 0.737500000\n 0.144337567 -0.204124145 0.750000000\n 0.158771324 -0.163299316 0.725000000\n 0.173205081 -0.122474487 0.700000000\n 0.187638837 -0.081649658 0.675000000\n 0.202072594 -0.040824829 0.650000000\n 0.216506351 -0.000000000 0.625000000\n 0.230940108 0.040824829 0.600000000\n 0.245373864 0.081649658 0.575000000\n 0.259807621 0.122474487 0.550000000\n 0.274241378 0.163299316 0.525000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.353627040 -0.224536560 0.612500000\n 0.346410162 -0.244948974 0.600000000\n 0.339193283 -0.265361389 0.587500000\n 0.331976405 -0.285773803 0.575000000\n 0.324759526 -0.306186218 0.562500000\n 0.317542648 -0.326598632 0.550000000\n 0.310325770 -0.347011047 0.537500000\n 0.303108891 -0.367423461 0.525000000\n 0.295892013 -0.387835876 0.512500000\n 0.288675135 -0.408248290 0.500000000\n\n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QGridFormDataManager" + }, + { + "name": "ExplicitKPath2PIBAFormDataManager" + } + ], + "executableName": "gw.x", + "name": "gw_bands_plasmon_pole.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/kpoint_convergence.json b/data/workflows/subworkflows/espresso/kpoint_convergence.json index 58ba09fc..e0b33a12 100644 --- a/data/workflows/subworkflows/espresso/kpoint_convergence.json +++ b/data/workflows/subworkflows/espresso/kpoint_convergence.json @@ -5,12 +5,12 @@ "name": "espresso" }, "properties": [ - "total_energy", + "atomic_forces", "fermi_energy", "pressure", - "atomic_forces", - "total_force", - "stress_tensor" + "stress_tensor", + "total_energy", + "total_force" ], "model": { "type": "dft", @@ -20,11 +20,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -33,22 +29,18 @@ "operand": "TOL", "value": 0.00001, "input": [], - "flowchartId": "init-tolerance", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "init-tolerance", "head": true, "next": "init-increment", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Init increment", @@ -56,22 +48,18 @@ "operand": "INC", "value": 1, "input": [], - "flowchartId": "init-increment", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "init-increment", "head": false, "next": "init-result", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Init result", @@ -79,22 +67,18 @@ "operand": "PREV_RESULT", "value": 0, "input": [], - "flowchartId": "init-result", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "init-result", "head": false, "next": "init-parameter", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Init parameter", @@ -102,22 +86,18 @@ "operand": "PARAMETER", "value": 1, "input": [], - "flowchartId": "init-parameter", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "init-parameter", "head": false, "next": "pwscf-kpoint-convergence", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -154,6 +134,9 @@ "flowchartId": "pwscf-kpoint-convergence", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -165,20 +148,52 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_scf_kpt_conv", + "results": [ + { + "name": "total_energy" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "atomic_forces" + }, + { + "name": "total_force" + }, + { + "name": "stress_tensor" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -187,43 +202,41 @@ } ], "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "total_energy", - "fermi_energy", - "pressure", - "atomic_forces", - "total_force", - "stress_tensor" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "pw_scf_kpt_conv", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0{% endraw %}\n", - "contextProviders": [ - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_scf_kpt_conv.in", - "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0{% endraw %}\n", + "contextProviders": [ + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_scf_kpt_conv.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "store-result" + "context": [], + "next": "store-result", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "store result", @@ -236,50 +249,39 @@ "scope": "pwscf-kpoint-convergence" } ], - "flowchartId": "store-result", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "store-result", "head": false, "next": "check-convergence", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "check convergence", "type": "condition", "input": [], + "statement": "abs((PREV_RESULT-RESULT)/RESULT) < TOL", + "maxOccurrences": 50, "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "then": "convergence-is-reached", - "else": "update-result", - "statement": "abs((PREV_RESULT-RESULT)/RESULT) < TOL", - "maxOccurrences": 50, - "flowchartId": "check-convergence", "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "check-convergence", + "then": "convergence-is-reached", + "else": "update-result", "head": false, "next": "update-result", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "update result", @@ -292,22 +294,18 @@ "scope": "global" } ], - "flowchartId": "update-result", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "update-result", "head": false, "next": "increment-parameter", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "increment parameter", @@ -324,22 +322,18 @@ "scope": "global" } ], - "flowchartId": "increment-parameter", - "next": "pwscf-kpoint-convergence", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "increment-parameter", + "next": "pwscf-kpoint-convergence", "head": false, - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "exit", @@ -352,21 +346,19 @@ "scope": "global" } ], - "flowchartId": "convergence-is-reached", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "convergence-is-reached", "head": false, - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/neb.json b/data/workflows/subworkflows/espresso/neb.json index d8b5416e..b065a727 100644 --- a/data/workflows/subworkflows/espresso/neb.json +++ b/data/workflows/subworkflows/espresso/neb.json @@ -17,11 +17,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -44,6 +40,9 @@ "flowchartId": "9f273ca0-d240-5b1f-89a9-64dd579304ac", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -55,14 +54,29 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "neb.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "neb", + "results": [ + { + "name": "reaction_energy_barrier" + }, + { + "name": "reaction_energy_profile" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "neb.x", "input": [ @@ -71,43 +85,45 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "reaction_energy_barrier", - "reaction_energy_profile" + { + "name": "standard_output" + } ], - "name": "neb", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = {{ 2 + (input.INTERMEDIATE_IMAGES.length or neb.nImages) }},\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\n{{ input.FIRST_IMAGE }}\n{%- for IMAGE in input.INTERMEDIATE_IMAGES %}\nINTERMEDIATE_IMAGE\nATOMIC_POSITIONS crystal\n{{ IMAGE }}\n{%- endfor %}\nLAST_IMAGE\nATOMIC_POSITIONS crystal\n{{ input.LAST_IMAGE }}\nEND_POSITIONS\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nEND_ENGINE_INPUT\nEND\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "NEBFormDataManager" - }, - { - "name": "QENEBInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "neb.x", - "name": "neb.in", - "rendered": "BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = 3,\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\nSi 28.0855 \nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nLAST_IMAGE\nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nEND_POSITIONS\nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \nEND_ENGINE_INPUT\nEND\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = {{ 2 + (input.INTERMEDIATE_IMAGES.length or neb.nImages) }},\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_first = false %}\n{%- for position in input.FIRST_IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_first = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.FIRST_IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_first %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n{%- for IMAGE in input.INTERMEDIATE_IMAGES %}\nINTERMEDIATE_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_intermediate = false %}\n{%- for position in IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_intermediate = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_intermediate %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n{%- endfor %}\nLAST_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_last = false %}\n{%- for position in input.LAST_IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_last = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.LAST_IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_last %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nEND_POSITIONS\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nEND_ENGINE_INPUT\nEND\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "NEBFormDataManager" + }, + { + "name": "QENEBInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "neb.x", + "name": "neb.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/ph_init_qpoints.json b/data/workflows/subworkflows/espresso/ph_init_qpoints.json index 9c2da1bf..a340876e 100644 --- a/data/workflows/subworkflows/espresso/ph_init_qpoints.json +++ b/data/workflows/subworkflows/espresso/ph_init_qpoints.json @@ -13,11 +13,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -33,6 +29,9 @@ "flowchartId": "b8ea6a33-38f3-5434-b17e-b5eae8fff9fc", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -44,14 +43,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "ph_init_qpoints", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "ph.x", "input": [ @@ -60,31 +67,36 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "results": [], - "name": "ph_init_qpoints", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", - "contextProviders": [ - { - "name": "QGridFormDataManager" - } - ], - "executableName": "ph.x", - "name": "ph_init_qpoints.in", - "rendered": "&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", + "contextProviders": [ + { + "name": "QGridFormDataManager" + } + ], + "executableName": "ph.x", + "name": "ph_init_qpoints.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/ph_single_irr_qpt.json b/data/workflows/subworkflows/espresso/ph_single_irr_qpt.json index 8f95ae4b..90fd5a06 100644 --- a/data/workflows/subworkflows/espresso/ph_single_irr_qpt.json +++ b/data/workflows/subworkflows/espresso/ph_single_irr_qpt.json @@ -13,11 +13,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -33,6 +29,9 @@ "flowchartId": "8db9af08-d935-57a0-a824-e7db6d936de8", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -44,14 +43,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "ph_single_irr_qpt", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "ph.x", "input": [ @@ -60,31 +67,36 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "results": [], - "name": "ph_single_irr_qpt", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", - "contextProviders": [ - { - "name": "QGridFormDataManager" - } - ], - "executableName": "ph.x", - "name": "ph_single_irr_qpt.in", - "rendered": "&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n \n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n \n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = '{{ JOB_SCRATCH_DIR }}/outdir'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", + "contextProviders": [ + { + "name": "QGridFormDataManager" + } + ], + "executableName": "ph.x", + "name": "ph_single_irr_qpt.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/phonon_dispersions.json b/data/workflows/subworkflows/espresso/phonon_dispersions.json index b7f352c9..de58851b 100644 --- a/data/workflows/subworkflows/espresso/phonon_dispersions.json +++ b/data/workflows/subworkflows/espresso/phonon_dispersions.json @@ -7,13 +7,13 @@ "properties": [ "atomic_forces", "fermi_energy", + "phonon_dispersions", + "phonon_dos", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", - "total_force", - "phonon_dos", - "phonon_dispersions" + "total_force" ], "model": { "type": "dft", @@ -23,11 +23,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -68,6 +64,9 @@ "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -79,20 +78,55 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_scf", + "results": [ + { + "name": "atomic_forces" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "stress_tensor" + }, + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "total_force" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -102,46 +136,43 @@ ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "atomic_forces", - "fermi_energy", - "pressure", - "stress_tensor", - "total_energy", - "total_energy_contributions", - "total_force" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "pw_scf", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_scf.in", - "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_scf.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "13bcafce-56ef-5b47-b079-317495eb6933" + "context": [], + "next": "13bcafce-56ef-5b47-b079-317495eb6933", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -160,6 +191,9 @@ "flowchartId": "13bcafce-56ef-5b47-b079-317495eb6933", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -171,14 +205,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "ph_grid", + "results": [ + { + "name": "phonon_dos" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "ph.x", "input": [ @@ -187,34 +233,35 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "phonon_dos" + { + "name": "standard_output" + } ], - "name": "ph_grid", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", - "contextProviders": [ - { - "name": "QGridFormDataManager" - } - ], - "executableName": "ph.x", - "name": "ph_grid.in", - "rendered": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n ldisp = .true.\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", + "contextProviders": [ + { + "name": "QGridFormDataManager" + } + ], + "executableName": "ph.x", + "name": "ph_grid.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "3b4507a7-9244-540b-abe0-66bceab700f5" + "context": [], + "next": "3b4507a7-9244-540b-abe0-66bceab700f5", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -229,6 +276,9 @@ "flowchartId": "3b4507a7-9244-540b-abe0-66bceab700f5", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -240,14 +290,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "q2r.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "q2r", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "q2r.x", "input": [ @@ -256,28 +314,31 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "results": [], - "name": "q2r", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", - "contextProviders": [], - "executableName": "q2r.x", - "name": "q2r.in", - "rendered": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", + "contextProviders": [], + "executableName": "q2r.x", + "name": "q2r.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "a7fded20-889b-54fc-bbb0-456e82689ab1" + "context": [], + "next": "a7fded20-889b-54fc-bbb0-456e82689ab1", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -296,6 +357,9 @@ "flowchartId": "a7fded20-889b-54fc-bbb0-456e82689ab1", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -307,14 +371,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "matdyn.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "matdyn_path", + "results": [ + { + "name": "phonon_dispersions" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "matdyn.x", "input": [ @@ -323,33 +399,36 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "phonon_dispersions" + { + "name": "standard_output" + } ], - "name": "matdyn_path", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", - "contextProviders": [ - { - "name": "IPathFormDataManager" - } - ], - "executableName": "matdyn.x", - "name": "matdyn_path.in", - "rendered": "&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", + "contextProviders": [ + { + "name": "IPathFormDataManager" + } + ], + "executableName": "matdyn.x", + "name": "matdyn_path.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/phonon_dos.json b/data/workflows/subworkflows/espresso/phonon_dos.json index 03227c19..9c0d7cd7 100644 --- a/data/workflows/subworkflows/espresso/phonon_dos.json +++ b/data/workflows/subworkflows/espresso/phonon_dos.json @@ -7,12 +7,12 @@ "properties": [ "atomic_forces", "fermi_energy", + "phonon_dos", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", - "total_force", - "phonon_dos" + "total_force" ], "model": { "type": "dft", @@ -22,11 +22,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -67,6 +63,9 @@ "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -78,20 +77,55 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_scf", + "results": [ + { + "name": "atomic_forces" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "stress_tensor" + }, + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "total_force" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -101,46 +135,43 @@ ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "atomic_forces", - "fermi_energy", - "pressure", - "stress_tensor", - "total_energy", - "total_energy_contributions", - "total_force" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "pw_scf", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_scf.in", - "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_scf.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "13bcafce-56ef-5b47-b079-317495eb6933" + "context": [], + "next": "13bcafce-56ef-5b47-b079-317495eb6933", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -159,6 +190,9 @@ "flowchartId": "13bcafce-56ef-5b47-b079-317495eb6933", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -170,14 +204,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "ph_grid", + "results": [ + { + "name": "phonon_dos" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "ph.x", "input": [ @@ -186,34 +232,35 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "phonon_dos" + { + "name": "standard_output" + } ], - "name": "ph_grid", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", - "contextProviders": [ - { - "name": "QGridFormDataManager" - } - ], - "executableName": "ph.x", - "name": "ph_grid.in", - "rendered": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n ldisp = .true.\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", + "contextProviders": [ + { + "name": "QGridFormDataManager" + } + ], + "executableName": "ph.x", + "name": "ph_grid.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "3b4507a7-9244-540b-abe0-66bceab700f5" + "context": [], + "next": "3b4507a7-9244-540b-abe0-66bceab700f5", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -228,6 +275,9 @@ "flowchartId": "3b4507a7-9244-540b-abe0-66bceab700f5", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -239,14 +289,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "q2r.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "q2r", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "q2r.x", "input": [ @@ -255,28 +313,31 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "results": [], - "name": "q2r", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", - "contextProviders": [], - "executableName": "q2r.x", - "name": "q2r.in", - "rendered": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", + "contextProviders": [], + "executableName": "q2r.x", + "name": "q2r.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "8fe6a24b-c994-55a2-a448-88657292e8c2" + "context": [], + "next": "8fe6a24b-c994-55a2-a448-88657292e8c2", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -295,6 +356,9 @@ "flowchartId": "8fe6a24b-c994-55a2-a448-88657292e8c2", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -306,14 +370,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "matdyn.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "matdyn_grid", + "results": [ + { + "name": "phonon_dos" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "matdyn.x", "input": [ @@ -322,33 +398,36 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "phonon_dos" + { + "name": "standard_output" + } ], - "name": "matdyn_grid", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n", - "contextProviders": [ - { - "name": "IGridFormDataManager" - } - ], - "executableName": "matdyn.x", - "name": "matdyn_grid.in", - "rendered": "&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n", + "contextProviders": [ + { + "name": "IGridFormDataManager" + } + ], + "executableName": "matdyn.x", + "name": "matdyn_grid.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/phonon_dos_dispersion.json b/data/workflows/subworkflows/espresso/phonon_dos_dispersion.json index e7662892..95f59923 100644 --- a/data/workflows/subworkflows/espresso/phonon_dos_dispersion.json +++ b/data/workflows/subworkflows/espresso/phonon_dos_dispersion.json @@ -7,13 +7,13 @@ "properties": [ "atomic_forces", "fermi_energy", + "phonon_dispersions", + "phonon_dos", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", - "total_force", - "phonon_dos", - "phonon_dispersions" + "total_force" ], "model": { "type": "dft", @@ -23,11 +23,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -68,6 +64,9 @@ "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -79,20 +78,55 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_scf", + "results": [ + { + "name": "atomic_forces" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "stress_tensor" + }, + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "total_force" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -102,46 +136,43 @@ ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "atomic_forces", - "fermi_energy", - "pressure", - "stress_tensor", - "total_energy", - "total_energy_contributions", - "total_force" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "pw_scf", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_scf.in", - "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_scf.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "13bcafce-56ef-5b47-b079-317495eb6933" + "context": [], + "next": "13bcafce-56ef-5b47-b079-317495eb6933", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -160,6 +191,9 @@ "flowchartId": "13bcafce-56ef-5b47-b079-317495eb6933", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -171,14 +205,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "ph_grid", + "results": [ + { + "name": "phonon_dos" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "ph.x", "input": [ @@ -187,34 +233,35 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "phonon_dos" + { + "name": "standard_output" + } ], - "name": "ph_grid", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", - "contextProviders": [ - { - "name": "QGridFormDataManager" - } - ], - "executableName": "ph.x", - "name": "ph_grid.in", - "rendered": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n ldisp = .true.\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", + "contextProviders": [ + { + "name": "QGridFormDataManager" + } + ], + "executableName": "ph.x", + "name": "ph_grid.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "3b4507a7-9244-540b-abe0-66bceab700f5" + "context": [], + "next": "3b4507a7-9244-540b-abe0-66bceab700f5", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -229,6 +276,9 @@ "flowchartId": "3b4507a7-9244-540b-abe0-66bceab700f5", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -240,14 +290,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "q2r.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "q2r", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "q2r.x", "input": [ @@ -256,28 +314,31 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "results": [], - "name": "q2r", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", - "contextProviders": [], - "executableName": "q2r.x", - "name": "q2r.in", - "rendered": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", + "contextProviders": [], + "executableName": "q2r.x", + "name": "q2r.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "8fe6a24b-c994-55a2-a448-88657292e8c2" + "context": [], + "next": "8fe6a24b-c994-55a2-a448-88657292e8c2", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -296,6 +357,9 @@ "flowchartId": "8fe6a24b-c994-55a2-a448-88657292e8c2", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -307,14 +371,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "matdyn.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "matdyn_grid", + "results": [ + { + "name": "phonon_dos" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "matdyn.x", "input": [ @@ -323,34 +399,35 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "phonon_dos" + { + "name": "standard_output" + } ], - "name": "matdyn_grid", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n", - "contextProviders": [ - { - "name": "IGridFormDataManager" - } - ], - "executableName": "matdyn.x", - "name": "matdyn_grid.in", - "rendered": "&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n", + "contextProviders": [ + { + "name": "IGridFormDataManager" + } + ], + "executableName": "matdyn.x", + "name": "matdyn_grid.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "a7fded20-889b-54fc-bbb0-456e82689ab1" + "context": [], + "next": "a7fded20-889b-54fc-bbb0-456e82689ab1", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -369,6 +446,9 @@ "flowchartId": "a7fded20-889b-54fc-bbb0-456e82689ab1", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -380,14 +460,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "matdyn.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "matdyn_path", + "results": [ + { + "name": "phonon_dispersions" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "matdyn.x", "input": [ @@ -396,33 +488,36 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "phonon_dispersions" + { + "name": "standard_output" + } ], - "name": "matdyn_path", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", - "contextProviders": [ - { - "name": "IPathFormDataManager" - } - ], - "executableName": "matdyn.x", - "name": "matdyn_path.in", - "rendered": "&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", + "contextProviders": [ + { + "name": "IPathFormDataManager" + } + ], + "executableName": "matdyn.x", + "name": "matdyn_path.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/phonon_reduce.json b/data/workflows/subworkflows/espresso/phonon_reduce.json index e477a29c..77279c40 100644 --- a/data/workflows/subworkflows/espresso/phonon_reduce.json +++ b/data/workflows/subworkflows/espresso/phonon_reduce.json @@ -5,8 +5,8 @@ "name": "espresso" }, "properties": [ - "phonon_dos", - "phonon_dispersions" + "phonon_dispersions", + "phonon_dos" ], "model": { "type": "dft", @@ -16,11 +16,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -36,6 +32,9 @@ "flowchartId": "cb206177-a4af-599a-81ba-6c88d24253b6", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -47,14 +46,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "ph_grid_restart", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "ph.x", "input": [ @@ -63,32 +70,35 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "results": [], - "name": "ph_grid_restart", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", - "contextProviders": [ - { - "name": "QGridFormDataManager" - } - ], - "executableName": "ph.x", - "name": "ph_grid_restart.in", - "rendered": "&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", + "contextProviders": [ + { + "name": "QGridFormDataManager" + } + ], + "executableName": "ph.x", + "name": "ph_grid_restart.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "3b4507a7-9244-540b-abe0-66bceab700f5" + "context": [], + "next": "3b4507a7-9244-540b-abe0-66bceab700f5", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -103,6 +113,9 @@ "flowchartId": "3b4507a7-9244-540b-abe0-66bceab700f5", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -114,14 +127,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "q2r.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "q2r", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "q2r.x", "input": [ @@ -130,28 +151,31 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "results": [], - "name": "q2r", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", - "contextProviders": [], - "executableName": "q2r.x", - "name": "q2r.in", - "rendered": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", + "contextProviders": [], + "executableName": "q2r.x", + "name": "q2r.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "8fe6a24b-c994-55a2-a448-88657292e8c2" + "context": [], + "next": "8fe6a24b-c994-55a2-a448-88657292e8c2", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -170,6 +194,9 @@ "flowchartId": "8fe6a24b-c994-55a2-a448-88657292e8c2", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -181,14 +208,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "matdyn.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "matdyn_grid", + "results": [ + { + "name": "phonon_dos" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "matdyn.x", "input": [ @@ -197,34 +236,35 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "phonon_dos" + { + "name": "standard_output" + } ], - "name": "matdyn_grid", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n", - "contextProviders": [ - { - "name": "IGridFormDataManager" - } - ], - "executableName": "matdyn.x", - "name": "matdyn_grid.in", - "rendered": "&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n", + "contextProviders": [ + { + "name": "IGridFormDataManager" + } + ], + "executableName": "matdyn.x", + "name": "matdyn_grid.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "a7fded20-889b-54fc-bbb0-456e82689ab1" + "context": [], + "next": "a7fded20-889b-54fc-bbb0-456e82689ab1", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -243,6 +283,9 @@ "flowchartId": "a7fded20-889b-54fc-bbb0-456e82689ab1", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -254,14 +297,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "matdyn.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "matdyn_path", + "results": [ + { + "name": "phonon_dispersions" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "matdyn.x", "input": [ @@ -270,33 +325,36 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "phonon_dispersions" + { + "name": "standard_output" + } ], - "name": "matdyn_path", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", - "contextProviders": [ - { - "name": "IPathFormDataManager" - } - ], - "executableName": "matdyn.x", - "name": "matdyn_path.in", - "rendered": "&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", + "contextProviders": [ + { + "name": "IPathFormDataManager" + } + ], + "executableName": "matdyn.x", + "name": "matdyn_path.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/plot_wavefunction.json b/data/workflows/subworkflows/espresso/plot_wavefunction.json index ce7a506e..f2112c7b 100644 --- a/data/workflows/subworkflows/espresso/plot_wavefunction.json +++ b/data/workflows/subworkflows/espresso/plot_wavefunction.json @@ -23,9 +23,7 @@ "head": true, "results": [ { - "name": "file_content", - "basename": "wf_r.png", - "filetype": "image" + "name": "file_content" } ], "monitors": [ @@ -36,6 +34,9 @@ "flowchartId": "57fca898-8e8b-5ef2-81a5-9d2b612bc18d", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -46,14 +47,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "plot_wavefunction", + "results": [ + { + "name": "file_content" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -67,40 +80,44 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ { - "name": "file_content" + "name": "standard_output" } ], - "name": "plot_wavefunction", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "python", - "content": "# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n", - "contextProviders": [], - "executableName": "python", - "name": "script.py", - "rendered": "# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n", + "contextProviders": [], + "executableName": "python", + "name": "script.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/post_processor.json b/data/workflows/subworkflows/espresso/post_processor.json index b8adfb9f..15df1e04 100644 --- a/data/workflows/subworkflows/espresso/post_processor.json +++ b/data/workflows/subworkflows/espresso/post_processor.json @@ -28,6 +28,9 @@ "flowchartId": "99304304-e873-5c89-ae83-91e61a7f629c", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "shell", "shortName": "sh", @@ -38,14 +41,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "espresso_collect_dynmat", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "shell", "executableName": "sh", "input": [ @@ -54,26 +65,32 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "espresso_collect_dynmat", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "shell", - "content": "{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n", - "contextProviders": [], - "executableName": "sh", - "name": "espresso_collect_dynmat.sh", - "rendered": "\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "shell", + "content": "{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n", + "contextProviders": [], + "executableName": "sh", + "name": "espresso_collect_dynmat.sh", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/pre_processor.json b/data/workflows/subworkflows/espresso/pre_processor.json index cd31c698..6dc11dea 100644 --- a/data/workflows/subworkflows/espresso/pre_processor.json +++ b/data/workflows/subworkflows/espresso/pre_processor.json @@ -28,6 +28,9 @@ "flowchartId": "99304304-e873-5c89-ae83-91e61a7f629c", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "shell", "shortName": "sh", @@ -38,14 +41,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "espresso_link_outdir_save", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "shell", "executableName": "sh", "input": [ @@ -54,26 +65,32 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "espresso_link_outdir_save", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "shell", - "content": "{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n", - "contextProviders": [], - "executableName": "sh", - "name": "espresso_link_outdir_save.sh", - "rendered": "\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "shell", + "content": "{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n", + "contextProviders": [], + "executableName": "sh", + "name": "espresso_link_outdir_save.sh", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/pw_scf.json b/data/workflows/subworkflows/espresso/pw_scf.json index aff577a8..bc653ad6 100644 --- a/data/workflows/subworkflows/espresso/pw_scf.json +++ b/data/workflows/subworkflows/espresso/pw_scf.json @@ -21,11 +21,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -66,6 +62,9 @@ "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -77,20 +76,55 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_scf", + "results": [ + { + "name": "atomic_forces" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "stress_tensor" + }, + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "total_force" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -100,45 +134,44 @@ ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "atomic_forces", - "fermi_energy", - "pressure", - "stress_tensor", - "total_energy", - "total_energy_contributions", - "total_force" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "pw_scf", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_scf.in", - "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_scf.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/recalculate_bands.json b/data/workflows/subworkflows/espresso/recalculate_bands.json index 40f7f6af..554d11f2 100644 --- a/data/workflows/subworkflows/espresso/recalculate_bands.json +++ b/data/workflows/subworkflows/espresso/recalculate_bands.json @@ -15,11 +15,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -39,6 +35,9 @@ "flowchartId": "d618df45-5af3-5da5-8882-d74a27e00b04", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -50,20 +49,37 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_bands", + "results": [ + { + "name": "band_structure" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -72,40 +88,41 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "band_structure" + { + "name": "standard_output" + } ], - "name": "pw_bands", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", - "contextProviders": [ - { - "name": "KPathFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_bands.in", - "rendered": "&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", + "contextProviders": [ + { + "name": "KPathFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_bands.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2" + "context": [], + "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -120,6 +137,9 @@ "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -131,14 +151,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "bands", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -147,26 +175,32 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", - "contextProviders": [], - "executableName": "bands.x", - "name": "bands.in", - "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", + "contextProviders": [], + "executableName": "bands.x", + "name": "bands.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/surface_energy.json b/data/workflows/subworkflows/espresso/surface_energy.json index acdc865c..879c66e2 100644 --- a/data/workflows/subworkflows/espresso/surface_energy.json +++ b/data/workflows/subworkflows/espresso/surface_energy.json @@ -9,6 +9,7 @@ "fermi_energy", "pressure", "stress_tensor", + "surface_energy", "total_energy", "total_energy_contributions", "total_force" @@ -21,360 +22,13 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ - { - "name": "io-slab", - "type": "io", - "subtype": "input", - "head": true, - "results": [], - "monitors": [], - "flowchartId": "e463ef46-a36e-5168-87dd-e21eb980dfb8", - "preProcessors": [], - "postProcessors": [], - "source": "api", - "input": [ - { - "endpoint": "materials", - "endpoint_options": { - "params": { - "query": "{'_id': MATERIAL_ID}", - "projection": "{}" - } - }, - "name": "DATA" - } - ], - "next": "ee7abb4e-7848-5aeb-960d-0d441909e2d1", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - }, - "status": "idle", - "statusTrack": [], - "tags": [] - }, - { - "name": "slab", - "type": "assignment", - "operand": "SLAB", - "value": "DATA[0]", - "input": [ - { - "name": "DATA", - "scope": "e463ef46-a36e-5168-87dd-e21eb980dfb8" - } - ], - "head": false, - "results": [], - "monitors": [], - "flowchartId": "ee7abb4e-7848-5aeb-960d-0d441909e2d1", - "preProcessors": [], - "postProcessors": [], - "next": "44263820-0c80-5bd1-b854-9da8d198eac1", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - }, - "status": "idle", - "statusTrack": [], - "tags": [] - }, - { - "name": "io-bulk", - "type": "io", - "subtype": "input", - "head": false, - "results": [], - "monitors": [], - "flowchartId": "44263820-0c80-5bd1-b854-9da8d198eac1", - "preProcessors": [], - "postProcessors": [], - "source": "api", - "input": [ - { - "endpoint": "materials", - "endpoint_options": { - "params": { - "query": "{'_id': SLAB.metadata.bulkId}", - "projection": "{}" - } - }, - "name": "DATA" - } - ], - "next": "b70656f1-a394-57f4-b4de-00096969df4b", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - }, - "status": "idle", - "statusTrack": [], - "tags": [] - }, - { - "name": "bulk", - "type": "assignment", - "operand": "BULK", - "value": "DATA[0] if DATA else None", - "input": [ - { - "name": "DATA", - "scope": "44263820-0c80-5bd1-b854-9da8d198eac1" - } - ], - "head": false, - "results": [], - "monitors": [], - "flowchartId": "b70656f1-a394-57f4-b4de-00096969df4b", - "preProcessors": [], - "postProcessors": [], - "next": "6ca4006a-e3ae-56ea-91a1-06b9790b5f7e", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - }, - "status": "idle", - "statusTrack": [], - "tags": [] - }, - { - "name": "assert-bulk", - "type": "assertion", - "statement": "BULK != None", - "errorMessage": "Bulk material does not exist!", - "head": false, - "results": [], - "monitors": [], - "flowchartId": "6ca4006a-e3ae-56ea-91a1-06b9790b5f7e", - "preProcessors": [], - "postProcessors": [], - "next": "490635e0-c593-5809-9eb2-c794b96cfed1", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - }, - "status": "idle", - "statusTrack": [], - "tags": [] - }, - { - "name": "io-e-bulk", - "type": "io", - "subtype": "input", - "head": false, - "results": [], - "monitors": [], - "flowchartId": "490635e0-c593-5809-9eb2-c794b96cfed1", - "preProcessors": [], - "postProcessors": [], - "source": "api", - "input": [ - { - "endpoint": "refined-properties", - "endpoint_options": { - "params": { - "query": "{ 'exabyteId': BULK.exabyteId, 'data.name': 'total_energy', 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} }", - "projection": "{'sort': {'precision.value': -1}, 'limit': 1}" - } - }, - "name": "DATA" - } - ], - "next": "bbe13b97-4243-5a85-8f61-a279d0b797aa", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - }, - "status": "idle", - "statusTrack": [], - "tags": [] - }, - { - "name": "e-bulk", - "type": "assignment", - "operand": "E_BULK", - "value": "DATA[0].data.value if DATA else None", - "input": [ - { - "name": "DATA", - "scope": "490635e0-c593-5809-9eb2-c794b96cfed1" - } - ], - "head": false, - "results": [], - "monitors": [], - "flowchartId": "bbe13b97-4243-5a85-8f61-a279d0b797aa", - "preProcessors": [], - "postProcessors": [], - "next": "a06c9f43-7670-5fd0-ac42-7028a472235a", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - }, - "status": "idle", - "statusTrack": [], - "tags": [] - }, - { - "name": "assert-e-bulk", - "type": "assertion", - "statement": "E_BULK != None", - "errorMessage": "E_BULK does not exist!", - "head": false, - "results": [], - "monitors": [], - "flowchartId": "a06c9f43-7670-5fd0-ac42-7028a472235a", - "preProcessors": [], - "postProcessors": [], - "next": "cdf210be-26ed-585a-b4ac-d55795ba2975", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - }, - "status": "idle", - "statusTrack": [], - "tags": [] - }, - { - "name": "surface", - "type": "assignment", - "operand": "A", - "value": "np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))", - "input": [], - "head": false, - "results": [], - "monitors": [], - "flowchartId": "cdf210be-26ed-585a-b4ac-d55795ba2975", - "preProcessors": [], - "postProcessors": [], - "next": "ffa8e43d-096a-555b-b8d0-6d283365ef47", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - }, - "status": "idle", - "statusTrack": [], - "tags": [] - }, - { - "name": "n-bulk", - "type": "assignment", - "operand": "N_BULK", - "value": "len(BULK.basis.elements)", - "input": [], - "head": false, - "results": [], - "monitors": [], - "flowchartId": "ffa8e43d-096a-555b-b8d0-6d283365ef47", - "preProcessors": [], - "postProcessors": [], - "next": "a0336ec5-a6da-5e4c-bb48-82b70cf5245f", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - }, - "status": "idle", - "statusTrack": [], - "tags": [] - }, - { - "name": "n-slab", - "type": "assignment", - "operand": "N_SLAB", - "value": "len(SLAB.basis.elements)", - "input": [], - "head": false, - "results": [], - "monitors": [], - "flowchartId": "a0336ec5-a6da-5e4c-bb48-82b70cf5245f", - "preProcessors": [], - "postProcessors": [], - "next": "9fc7a088-5533-5f70-bb33-f676ec65f565", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - }, - "status": "idle", - "statusTrack": [], - "tags": [] - }, { "type": "execution", "name": "pw_scf", - "head": false, + "head": true, "results": [ { "name": "atomic_forces" @@ -409,6 +63,9 @@ "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -420,20 +77,55 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_scf", + "results": [ + { + "name": "atomic_forces" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "stress_tensor" + }, + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "total_force" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -443,108 +135,44 @@ ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "atomic_forces", - "fermi_energy", - "pressure", - "stress_tensor", - "total_energy", - "total_energy_contributions", - "total_force" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "pw_scf", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], - "input": [ - { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_scf.in", - "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" - } - ], - "next": "fcd88119-817c-5ac1-a430-ba892ac743eb" - }, - { - "name": "e-slab", - "type": "assignment", - "operand": "E_SLAB", - "value": "total_energy", "input": [ { - "name": "total_energy", - "scope": "9fc7a088-5533-5f70-bb33-f676ec65f565" - } - ], - "head": false, - "results": [], - "monitors": [], - "flowchartId": "fcd88119-817c-5ac1-a430-ba892ac743eb", - "preProcessors": [], - "postProcessors": [], - "next": "542ea9ad-8a07-5a76-b233-f72fb27c4fc6", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - }, - "status": "idle", - "statusTrack": [], - "tags": [] - }, - { - "name": "surface-energy", - "type": "assignment", - "operand": "SURFACE_ENERGY", - "value": "1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))", - "input": [], - "head": false, - "results": [ - { - "name": "surface_energy" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_scf.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "monitors": [], - "flowchartId": "542ea9ad-8a07-5a76-b233-f72fb27c4fc6", - "preProcessors": [], - "postProcessors": [], - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - }, - "status": "idle", - "statusTrack": [], - "tags": [] + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/total_energy.json b/data/workflows/subworkflows/espresso/total_energy.json index 7685f345..c78b20d8 100644 --- a/data/workflows/subworkflows/espresso/total_energy.json +++ b/data/workflows/subworkflows/espresso/total_energy.json @@ -21,11 +21,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -66,6 +62,9 @@ "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -77,20 +76,55 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_scf", + "results": [ + { + "name": "atomic_forces" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "stress_tensor" + }, + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "total_force" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -100,47 +134,46 @@ ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "atomic_forces", - "fermi_energy", - "pressure", - "stress_tensor", - "total_energy", - "total_energy_contributions", - "total_force" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "pw_scf", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_scf.in", - "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_scf.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } ], + "schemaVersion": "2022.8.16", + "isDraft": false, "tags": [ "default" ] diff --git a/data/workflows/subworkflows/espresso/valence_band_offset_calc_from_previous_esp_vbm.json b/data/workflows/subworkflows/espresso/valence_band_offset_calc_from_previous_esp_vbm.json index 19027b3e..fda2a34a 100644 --- a/data/workflows/subworkflows/espresso/valence_band_offset_calc_from_previous_esp_vbm.json +++ b/data/workflows/subworkflows/espresso/valence_band_offset_calc_from_previous_esp_vbm.json @@ -23,21 +23,18 @@ "operand": "VBM_DIFF", "value": "VBM_LEFT - VBM_RIGHT", "input": [], + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "bd4eaa98-b001-5694-87ef-ec77540502ab", "tags": [], + "flowchartId": "bd4eaa98-b001-5694-87ef-ec77540502ab", "head": true, "next": "2626f7bb-d392-5fd4-ab71-329b508de347", - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Difference of macroscopically averaged ESP in bulk", @@ -45,21 +42,18 @@ "operand": "AVG_ESP_DIFF", "value": "AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]", "input": [], + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "2626f7bb-d392-5fd4-ab71-329b508de347", "tags": [], + "flowchartId": "2626f7bb-d392-5fd4-ab71-329b508de347", "head": false, "next": "b7307787-53e2-599b-ad12-d627b04074b4", - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Lineup of macroscopically averaged ESP in interface", @@ -67,21 +61,18 @@ "operand": "ESP_LINEUP", "value": "np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])", "input": [], + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "b7307787-53e2-599b-ad12-d627b04074b4", "tags": [], + "flowchartId": "b7307787-53e2-599b-ad12-d627b04074b4", "head": false, "next": "197f4b4d-cb7b-57be-a885-d44cb1f61905", - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Valence Band Offset", @@ -94,20 +85,18 @@ "name": "valence_band_offset" } ], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "197f4b4d-cb7b-57be-a885-d44cb1f61905", "tags": [], + "flowchartId": "197f4b4d-cb7b-57be-a885-d44cb1f61905", "head": false, - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/variable_cell_relaxation.json b/data/workflows/subworkflows/espresso/variable_cell_relaxation.json index 5d72060f..3e2d02d4 100644 --- a/data/workflows/subworkflows/espresso/variable_cell_relaxation.json +++ b/data/workflows/subworkflows/espresso/variable_cell_relaxation.json @@ -6,13 +6,13 @@ "name": "espresso" }, "properties": [ - "total_energy", + "atomic_forces", "fermi_energy", + "final_structure", "pressure", - "atomic_forces", - "total_force", "stress_tensor", - "final_structure" + "total_energy", + "total_force" ], "model": { "type": "dft", @@ -22,11 +22,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -70,6 +66,9 @@ "flowchartId": "e1bd0870-6245-5fc2-a50d-48cabc356ac8", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -81,20 +80,55 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_vc-relax", + "results": [ + { + "name": "total_energy" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "atomic_forces" + }, + { + "name": "total_force" + }, + { + "name": "stress_tensor" + }, + { + "name": "final_structure" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -103,49 +137,50 @@ } ], "monitors": [ - "standard_output", - "convergence_electronic", - "convergence_ionic" - ], - "results": [ - "total_energy", - "fermi_energy", - "pressure", - "atomic_forces", - "total_force", - "stress_tensor", - "final_structure" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + }, + { + "name": "convergence_ionic" + } ], - "name": "pw_vc-relax", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_vc_relax.in", - "rendered": "&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_vc_relax.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } ], + "schemaVersion": "2022.8.16", + "isDraft": false, "tags": [ "variable-cell_relaxation" ] diff --git a/data/workflows/subworkflows/espresso/wavefunction_amplitude.json b/data/workflows/subworkflows/espresso/wavefunction_amplitude.json index ab41b662..d3957b45 100644 --- a/data/workflows/subworkflows/espresso/wavefunction_amplitude.json +++ b/data/workflows/subworkflows/espresso/wavefunction_amplitude.json @@ -23,11 +23,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -71,6 +67,9 @@ "flowchartId": "pw-scf", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -82,20 +81,55 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_scf", + "results": [ + { + "name": "atomic_forces" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "stress_tensor" + }, + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "total_force" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -105,46 +139,43 @@ ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "atomic_forces", - "fermi_energy", - "pressure", - "stress_tensor", - "total_energy", - "total_energy_contributions", - "total_force" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "pw_scf", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_scf.in", - "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_scf.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "extract-band-energies" + "context": [], + "next": "extract-band-energies", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Extract Band Energies", @@ -157,22 +188,18 @@ "scope": "pw-scf" } ], - "flowchartId": "extract-band-energies", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "extract-band-energies", "head": false, "next": "indices-below-fermi", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Find Indices Below Fermi", @@ -185,22 +212,18 @@ "scope": "pw-scf" } ], - "flowchartId": "indices-below-fermi", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "indices-below-fermi", "head": false, "next": "8771dc7f-878e-5f13-a840-a3a416854f1e", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Store Band Below EF", @@ -208,22 +231,18 @@ "operand": "KBAND_VALUE_BELOW_EF", "value": "indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1", "input": [], + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "8771dc7f-878e-5f13-a840-a3a416854f1e", "tags": [], + "flowchartId": "8771dc7f-878e-5f13-a840-a3a416854f1e", "head": false, "next": "57a07d7d-3f68-5f31-97ad-ebe8c5593cd2", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Select Band", @@ -231,22 +250,18 @@ "operand": "KBAND_VALUE", "value": "KBAND_VALUE_BELOW_EF", "input": [], + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "57a07d7d-3f68-5f31-97ad-ebe8c5593cd2", "tags": [], + "flowchartId": "57a07d7d-3f68-5f31-97ad-ebe8c5593cd2", "head": false, "next": "pp-wfn", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -265,6 +280,9 @@ "flowchartId": "pp-wfn", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -276,14 +294,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "pp.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "pp_wfn", + "results": [ + { + "name": "wavefunction_amplitude" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pp.x", "input": [ @@ -292,31 +322,34 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "wavefunction_amplitude" + { + "name": "standard_output" + } ], - "name": "pp_wfn", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n", - "contextProviders": [], - "executableName": "pp.x", - "name": "pp_wfn.in", - "rendered": "&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {{ KBAND_VALUE | default(1) }}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = NaN\n nx = 200\n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n", + "contextProviders": [], + "executableName": "pp.x", + "name": "pp_wfn.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } ], + "schemaVersion": "2022.8.16", + "isDraft": false, "tags": [ "wfn", "wfn_plot" diff --git a/data/workflows/subworkflows/espresso/zero_point_energy.json b/data/workflows/subworkflows/espresso/zero_point_energy.json index 2e9fe99a..9a026c21 100644 --- a/data/workflows/subworkflows/espresso/zero_point_energy.json +++ b/data/workflows/subworkflows/espresso/zero_point_energy.json @@ -22,11 +22,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -67,6 +63,9 @@ "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -78,20 +77,55 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_scf", + "results": [ + { + "name": "atomic_forces" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "stress_tensor" + }, + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "total_force" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -101,46 +135,43 @@ ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "atomic_forces", - "fermi_energy", - "pressure", - "stress_tensor", - "total_energy", - "total_energy_contributions", - "total_force" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "pw_scf", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_scf.in", - "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_scf.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "107595d1-490f-53a2-8432-7f8a12f14d96" + "context": [], + "next": "107595d1-490f-53a2-8432-7f8a12f14d96", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -159,6 +190,9 @@ "flowchartId": "107595d1-490f-53a2-8432-7f8a12f14d96", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -170,14 +204,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "ph_gamma", + "results": [ + { + "name": "zero_point_energy" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "ph.x", "input": [ @@ -186,29 +232,32 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "zero_point_energy" + { + "name": "standard_output" + } ], - "name": "ph_gamma", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n", - "contextProviders": [], - "executableName": "ph.x", - "name": "ph_gamma.in", - "rendered": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n/\n0 0 0\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n", + "contextProviders": [], + "executableName": "ph.x", + "name": "ph_gamma.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/nwchem/total_energy.json b/data/workflows/subworkflows/nwchem/total_energy.json index b27702d9..80b21cd9 100644 --- a/data/workflows/subworkflows/nwchem/total_energy.json +++ b/data/workflows/subworkflows/nwchem/total_energy.json @@ -16,11 +16,7 @@ "subtype": "pople", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -43,6 +39,9 @@ "flowchartId": "6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "nwchem", "shortName": "nwchem", @@ -53,18 +52,34 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "error_handler" + } + ], "hasAdvancedComputeOptions": false, "isDefault": true, "monitors": [ - "standard_output" - ], - "postProcessors": [ - "error_handler" + { + "name": "standard_output" + } ], "name": "nwchem", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "nwchem_total_energy", + "results": [ + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "nwchem", "executableName": "nwchem", "input": [ @@ -74,33 +89,35 @@ ], "isDefault": true, "monitors": [ - "standard_output" - ], - "results": [ - "total_energy", - "total_energy_contributions" + { + "name": "standard_output" + } ], - "name": "nwchem_total_energy", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "nwchem", - "content": " start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n", - "contextProviders": [ - { - "name": "NWChemInputDataManager" - } - ], - "executableName": "nwchem", - "name": "nwchem_total_energy.inp", - "rendered": " start nwchem\n title \"Test\"\n charge 0\n geometry units au noautosym\n Si 0.000000000 0.000000000 0.000000000 \nSi 1.116306745 0.789348070 1.933500000 \n end\n basis\n * library 6-31G\n end\n dft\n xc B3LYP\n mult 1\n end\n task dft energy\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "nwchem", + "content": " start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n", + "contextProviders": [ + { + "name": "NWChemInputDataManager" + } + ], + "executableName": "nwchem", + "name": "nwchem_total_energy.inp", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/python/ml/classification_tail.json b/data/workflows/subworkflows/python/ml/classification_tail.json index 73461ab9..ec620a53 100644 --- a/data/workflows/subworkflows/python/ml/classification_tail.json +++ b/data/workflows/subworkflows/python/ml/classification_tail.json @@ -5,8 +5,8 @@ "name": "python" }, "properties": [ - "workflow:pyml_predict", - "file_content" + "file_content", + "workflow:pyml_predict" ], "model": { "type": "unknown", @@ -31,6 +31,9 @@ "flowchartId": "c3608488-0259-5ff4-8b90-11c6e60d6c85", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -41,14 +44,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:setup_variables_packages", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -62,41 +73,48 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "pyml:setup_variables_packages", "schemaVersion": "2022.8.16", "isDefault": false }, - "enableRender": true, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", - "contextProviders": [ - { - "name": "MLSettingsDataManager" - } - ], - "executableName": "python", - "name": "settings.py", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", + "contextProviders": [ + { + "name": "MLSettingsDataManager" + } + ], + "executableName": "python", + "name": "settings.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3" + "context": [], + "enableRender": true, + "next": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -111,6 +129,9 @@ "flowchartId": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -121,14 +142,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:data_input:read_csv:pandas", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -142,36 +171,43 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "pyml:data_input:read_csv:pandas", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", - "contextProviders": [], - "executableName": "python", - "name": "data_input_read_csv_pandas.py", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", + "contextProviders": [], + "executableName": "python", + "name": "data_input_read_csv_pandas.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "7fff5212-6c6d-586b-9997-4d4485e09383" + "context": [], + "next": "7fff5212-6c6d-586b-9997-4d4485e09383", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -186,6 +222,9 @@ "flowchartId": "7fff5212-6c6d-586b-9997-4d4485e09383", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -196,14 +235,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:data_input:train_test_split:sklearn", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -217,40 +264,47 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "pyml:data_input:train_test_split:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", - "contextProviders": [ - { - "name": "MLTrainTestSplitDataManager" - } - ], - "executableName": "python", - "name": "data_input_train_test_split_sklearn.py", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", + "contextProviders": [ + { + "name": "MLTrainTestSplitDataManager" + } + ], + "executableName": "python", + "name": "data_input_train_test_split_sklearn.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "799de7dc-9394-571b-8e0d-3ff876a3df02" + "context": [], + "next": "799de7dc-9394-571b-8e0d-3ff876a3df02", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -265,6 +319,9 @@ "flowchartId": "799de7dc-9394-571b-8e0d-3ff876a3df02", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -275,14 +332,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:pre_processing:standardization:sklearn", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -296,36 +361,43 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "pyml:pre_processing:standardization:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", - "contextProviders": [], - "executableName": "python", - "name": "pre_processing_standardization_sklearn.py", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", + "contextProviders": [], + "executableName": "python", + "name": "pre_processing_standardization_sklearn.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "8dfc61c3-067d-5ea8-bd26-7296628d707a" + "context": [], + "next": "8dfc61c3-067d-5ea8-bd26-7296628d707a", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -344,6 +416,12 @@ "flowchartId": "8dfc61c3-067d-5ea8-bd26-7296628d707a", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [ + "remove-all-results", + "creates-predictions-csv-during-predict-phase" + ], "application": { "name": "python", "shortName": "py", @@ -354,14 +432,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:model:random_forest_classification:sklearn", + "results": [ + { + "name": "workflow:pyml_predict" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -375,42 +465,43 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "workflow:pyml_predict" + { + "name": "standard_output" + } ], - "name": "pyml:model:random_forest_classification:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, - "tags": [ - "remove-all-results", - "creates-predictions-csv-during-predict-phase" - ], - "status": "idle", - "statusTrack": [], "input": [ { - "applicationName": "python", - "content": "# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", - "contextProviders": [], - "executableName": "python", - "name": "model_random_forest_classification_sklearn.py", - "rendered": "# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", + "contextProviders": [], + "executableName": "python", + "name": "model_random_forest_classification_sklearn.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "35436b4a-cd9c-5089-ab42-665c4f9ba049" + "context": [], + "next": "35436b4a-cd9c-5089-ab42-665c4f9ba049", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -418,8 +509,6 @@ "head": false, "results": [ { - "basename": "my_roc_plot.png", - "filetype": "image", "name": "file_content" } ], @@ -435,6 +524,11 @@ "name": "remove_virtual_environment" } ], + "status": "idle", + "statusTrack": [], + "tags": [ + "remove-all-results" + ], "application": { "name": "python", "shortName": "py", @@ -445,14 +539,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:post_processing:roc_curve:sklearn", + "results": [ + { + "name": "file_content" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -466,40 +572,44 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "file_content" + { + "name": "standard_output" + } ], - "name": "pyml:post_processing:roc_curve:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, - "tags": [ - "remove-all-results" - ], - "status": "idle", - "statusTrack": [], "input": [ { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", - "contextProviders": [], - "executableName": "python", - "name": "post_processing_roc_curve_sklearn.py", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", + "contextProviders": [], + "executableName": "python", + "name": "post_processing_roc_curve_sklearn.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/python/ml/clustering_tail.json b/data/workflows/subworkflows/python/ml/clustering_tail.json index 58e9a809..c3829320 100644 --- a/data/workflows/subworkflows/python/ml/clustering_tail.json +++ b/data/workflows/subworkflows/python/ml/clustering_tail.json @@ -5,8 +5,8 @@ "name": "python" }, "properties": [ - "workflow:pyml_predict", - "file_content" + "file_content", + "workflow:pyml_predict" ], "model": { "type": "unknown", @@ -31,6 +31,9 @@ "flowchartId": "c3608488-0259-5ff4-8b90-11c6e60d6c85", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -41,14 +44,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:setup_variables_packages", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -62,41 +73,48 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "pyml:setup_variables_packages", "schemaVersion": "2022.8.16", "isDefault": false }, - "enableRender": true, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", - "contextProviders": [ - { - "name": "MLSettingsDataManager" - } - ], - "executableName": "python", - "name": "settings.py", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", + "contextProviders": [ + { + "name": "MLSettingsDataManager" + } + ], + "executableName": "python", + "name": "settings.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3" + "context": [], + "enableRender": true, + "next": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -111,6 +129,9 @@ "flowchartId": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -121,14 +142,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:data_input:read_csv:pandas", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -142,36 +171,43 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "pyml:data_input:read_csv:pandas", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", - "contextProviders": [], - "executableName": "python", - "name": "data_input_read_csv_pandas.py", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", + "contextProviders": [], + "executableName": "python", + "name": "data_input_read_csv_pandas.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "7fff5212-6c6d-586b-9997-4d4485e09383" + "context": [], + "next": "7fff5212-6c6d-586b-9997-4d4485e09383", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -186,6 +222,9 @@ "flowchartId": "7fff5212-6c6d-586b-9997-4d4485e09383", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -196,14 +235,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:data_input:train_test_split:sklearn", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -217,40 +264,47 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "pyml:data_input:train_test_split:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", - "contextProviders": [ - { - "name": "MLTrainTestSplitDataManager" - } - ], - "executableName": "python", - "name": "data_input_train_test_split_sklearn.py", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", + "contextProviders": [ + { + "name": "MLTrainTestSplitDataManager" + } + ], + "executableName": "python", + "name": "data_input_train_test_split_sklearn.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "799de7dc-9394-571b-8e0d-3ff876a3df02" + "context": [], + "next": "799de7dc-9394-571b-8e0d-3ff876a3df02", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -265,6 +319,9 @@ "flowchartId": "799de7dc-9394-571b-8e0d-3ff876a3df02", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -275,14 +332,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:pre_processing:standardization:sklearn", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -296,36 +361,43 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "pyml:pre_processing:standardization:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", - "contextProviders": [], - "executableName": "python", - "name": "pre_processing_standardization_sklearn.py", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", + "contextProviders": [], + "executableName": "python", + "name": "pre_processing_standardization_sklearn.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "8dfc61c3-067d-5ea8-bd26-7296628d707a" + "context": [], + "next": "8dfc61c3-067d-5ea8-bd26-7296628d707a", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -344,6 +416,12 @@ "flowchartId": "8dfc61c3-067d-5ea8-bd26-7296628d707a", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [ + "remove-all-results", + "creates-predictions-csv-during-predict-phase" + ], "application": { "name": "python", "shortName": "py", @@ -354,14 +432,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:model:k_means_clustering:sklearn", + "results": [ + { + "name": "workflow:pyml_predict" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -375,42 +465,43 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "workflow:pyml_predict" + { + "name": "standard_output" + } ], - "name": "pyml:model:k_means_clustering:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, - "tags": [ - "remove-all-results", - "creates-predictions-csv-during-predict-phase" - ], - "status": "idle", - "statusTrack": [], "input": [ { - "applicationName": "python", - "content": "# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", - "contextProviders": [], - "executableName": "python", - "name": "model_k_means_clustering_sklearn.py", - "rendered": "# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", + "contextProviders": [], + "executableName": "python", + "name": "model_k_means_clustering_sklearn.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "9c95c27b-c8bd-5e8b-8829-d354611decef" + "context": [], + "next": "9c95c27b-c8bd-5e8b-8829-d354611decef", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -418,18 +509,12 @@ "head": false, "results": [ { - "basename": "train_test_split.png", - "filetype": "image", "name": "file_content" }, { - "basename": "train_clusters.png", - "filetype": "image", "name": "file_content" }, { - "basename": "test_clusters.png", - "filetype": "image", "name": "file_content" } ], @@ -445,6 +530,11 @@ "name": "remove_virtual_environment" } ], + "status": "idle", + "statusTrack": [], + "tags": [ + "remove-all-results" + ], "application": { "name": "python", "shortName": "py", @@ -455,14 +545,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:post_processing:pca_2d_clusters:matplotlib", + "results": [ + { + "name": "file_content" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -476,40 +578,44 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "file_content" + { + "name": "standard_output" + } ], - "name": "pyml:post_processing:pca_2d_clusters:matplotlib", "schemaVersion": "2022.8.16", "isDefault": false }, - "tags": [ - "remove-all-results" - ], - "status": "idle", - "statusTrack": [], "input": [ { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", - "contextProviders": [], - "executableName": "python", - "name": "post_processing_pca_2d_clusters_matplotlib.py", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", + "contextProviders": [], + "executableName": "python", + "name": "post_processing_pca_2d_clusters_matplotlib.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/python/ml/regression_tail.json b/data/workflows/subworkflows/python/ml/regression_tail.json index ea4bf43f..42ff8661 100644 --- a/data/workflows/subworkflows/python/ml/regression_tail.json +++ b/data/workflows/subworkflows/python/ml/regression_tail.json @@ -5,8 +5,8 @@ "name": "python" }, "properties": [ - "workflow:pyml_predict", - "file_content" + "file_content", + "workflow:pyml_predict" ], "model": { "type": "unknown", @@ -31,6 +31,9 @@ "flowchartId": "c3608488-0259-5ff4-8b90-11c6e60d6c85", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -41,14 +44,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:setup_variables_packages", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -62,41 +73,48 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "pyml:setup_variables_packages", "schemaVersion": "2022.8.16", "isDefault": false }, - "enableRender": true, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", - "contextProviders": [ - { - "name": "MLSettingsDataManager" - } - ], - "executableName": "python", - "name": "settings.py", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", + "contextProviders": [ + { + "name": "MLSettingsDataManager" + } + ], + "executableName": "python", + "name": "settings.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3" + "context": [], + "enableRender": true, + "next": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -111,6 +129,9 @@ "flowchartId": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -121,14 +142,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:data_input:read_csv:pandas", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -142,36 +171,43 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "pyml:data_input:read_csv:pandas", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", - "contextProviders": [], - "executableName": "python", - "name": "data_input_read_csv_pandas.py", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", + "contextProviders": [], + "executableName": "python", + "name": "data_input_read_csv_pandas.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "7fff5212-6c6d-586b-9997-4d4485e09383" + "context": [], + "next": "7fff5212-6c6d-586b-9997-4d4485e09383", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -186,6 +222,9 @@ "flowchartId": "7fff5212-6c6d-586b-9997-4d4485e09383", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -196,14 +235,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:data_input:train_test_split:sklearn", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -217,40 +264,47 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "pyml:data_input:train_test_split:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", - "contextProviders": [ - { - "name": "MLTrainTestSplitDataManager" - } - ], - "executableName": "python", - "name": "data_input_train_test_split_sklearn.py", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", + "contextProviders": [ + { + "name": "MLTrainTestSplitDataManager" + } + ], + "executableName": "python", + "name": "data_input_train_test_split_sklearn.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "799de7dc-9394-571b-8e0d-3ff876a3df02" + "context": [], + "next": "799de7dc-9394-571b-8e0d-3ff876a3df02", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -265,6 +319,9 @@ "flowchartId": "799de7dc-9394-571b-8e0d-3ff876a3df02", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -275,14 +332,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:pre_processing:standardization:sklearn", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -296,36 +361,43 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "pyml:pre_processing:standardization:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", - "contextProviders": [], - "executableName": "python", - "name": "pre_processing_standardization_sklearn.py", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", + "contextProviders": [], + "executableName": "python", + "name": "pre_processing_standardization_sklearn.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "8dfc61c3-067d-5ea8-bd26-7296628d707a" + "context": [], + "next": "8dfc61c3-067d-5ea8-bd26-7296628d707a", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -344,6 +416,12 @@ "flowchartId": "8dfc61c3-067d-5ea8-bd26-7296628d707a", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [ + "remove-all-results", + "creates-predictions-csv-during-predict-phase" + ], "application": { "name": "python", "shortName": "py", @@ -354,14 +432,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:model:multilayer_perceptron:sklearn", + "results": [ + { + "name": "workflow:pyml_predict" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -375,42 +465,43 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "workflow:pyml_predict" + { + "name": "standard_output" + } ], - "name": "pyml:model:multilayer_perceptron:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, - "tags": [ - "remove-all-results", - "creates-predictions-csv-during-predict-phase" - ], - "status": "idle", - "statusTrack": [], "input": [ { - "applicationName": "python", - "content": "# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", - "contextProviders": [], - "executableName": "python", - "name": "model_mlp_sklearn.py", - "rendered": "# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", + "contextProviders": [], + "executableName": "python", + "name": "model_mlp_sklearn.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "1ca76a49-a3c7-5fa2-b693-538b599ecd7c" + "context": [], + "next": "1ca76a49-a3c7-5fa2-b693-538b599ecd7c", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -418,8 +509,6 @@ "head": false, "results": [ { - "basename": "my_parity_plot.png", - "filetype": "image", "name": "file_content" } ], @@ -435,6 +524,11 @@ "name": "remove_virtual_environment" } ], + "status": "idle", + "statusTrack": [], + "tags": [ + "remove-all-results" + ], "application": { "name": "python", "shortName": "py", @@ -445,14 +539,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:post_processing:parity_plot:matplotlib", + "results": [ + { + "name": "file_content" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -466,40 +572,44 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "file_content" + { + "name": "standard_output" + } ], - "name": "pyml:post_processing:parity_plot:matplotlib", "schemaVersion": "2022.8.16", "isDefault": false }, - "tags": [ - "remove-all-results" - ], - "status": "idle", - "statusTrack": [], "input": [ { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", - "contextProviders": [], - "executableName": "python", - "name": "post_processing_parity_plot_matplotlib.py", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", + "contextProviders": [], + "executableName": "python", + "name": "post_processing_parity_plot_matplotlib.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/python/ml/train_head.json b/data/workflows/subworkflows/python/ml/train_head.json index f4c10572..78b3fcd2 100644 --- a/data/workflows/subworkflows/python/ml/train_head.json +++ b/data/workflows/subworkflows/python/ml/train_head.json @@ -21,32 +21,37 @@ "operand": "IS_WORKFLOW_RUNNING_TO_PREDICT", "value": "False", "input": [], - "flowchartId": "head-set-predict-status", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], "tags": [ "pyml:workflow-type-setter" ], - "status": "idle", - "statusTrack": [], + "flowchartId": "head-set-predict-status", "head": true, "next": "head-fetch-training-data", - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Fetch Dataset", "type": "io", "subtype": "input", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "enableRender": true, "flowchartId": "head-fetch-training-data", "input": [ { + "type": "object_storage", "basename": "{{DATASET_BASENAME}}", "objectData": { "CONTAINER": "", @@ -57,20 +62,10 @@ } ], "source": "object_storage", - "status": "idle", - "statusTrack": [], - "tags": [], "head": false, "next": "head-branch-on-predict-status", - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Train or Predict?", @@ -81,37 +76,41 @@ "scope": "global" } ], + "statement": "IS_WORKFLOW_RUNNING_TO_PREDICT", + "maxOccurrences": 100, "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "then": "head-fetch-trained-model", - "else": "end-of-ml-train-head", - "statement": "IS_WORKFLOW_RUNNING_TO_PREDICT", - "maxOccurrences": 100, - "flowchartId": "head-branch-on-predict-status", "status": "idle", "statusTrack": [], "tags": [], + "else": "end-of-ml-train-head", + "flowchartId": "head-branch-on-predict-status", + "then": "head-fetch-trained-model", "head": false, "next": "head-fetch-trained-model", - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Fetch Trained Model as file", "type": "io", "subtype": "input", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [ + "set-io-unit-filenames" + ], "enableRender": true, "flowchartId": "head-fetch-trained-model", "input": [ { + "type": "object_storage", "basename": "", "objectData": { "CONTAINER": "", @@ -122,22 +121,10 @@ } ], "source": "object_storage", - "tags": [ - "set-io-unit-filenames" - ], - "status": "idle", - "statusTrack": [], "head": false, "next": "end-of-ml-train-head", - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "End Setup", @@ -145,20 +132,19 @@ "operand": "IS_SETUP_COMPLETE", "value": "True", "input": [], - "flowchartId": "end-of-ml-train-head", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "end-of-ml-train-head", "head": false, - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/python/python_script.json b/data/workflows/subworkflows/python/python_script.json index c87465e0..31f818bc 100644 --- a/data/workflows/subworkflows/python/python_script.json +++ b/data/workflows/subworkflows/python/python_script.json @@ -28,6 +28,9 @@ "flowchartId": "9b8a495e-1ac1-56a7-b2e0-af1b405a1219", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -38,14 +41,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "hello_world", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -59,34 +70,43 @@ ], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "hello_world", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "python", - "content": "# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n", - "contextProviders": [], - "executableName": "python", - "name": "script.py", - "rendered": "# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n", + "contextProviders": [], + "executableName": "python", + "name": "script.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/shell/batch_espresso_pwscf.json b/data/workflows/subworkflows/shell/batch_espresso_pwscf.json index 2bc2b217..4d18d8c4 100644 --- a/data/workflows/subworkflows/shell/batch_espresso_pwscf.json +++ b/data/workflows/subworkflows/shell/batch_espresso_pwscf.json @@ -28,6 +28,9 @@ "flowchartId": "99304304-e873-5c89-ae83-91e61a7f629c", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "shell", "shortName": "sh", @@ -38,14 +41,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "job_espresso_pw_scf", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "shell", "executableName": "sh", "input": [ @@ -54,26 +65,32 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "job_espresso_pw_scf", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "shell", - "content": "#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n", - "contextProviders": [], - "executableName": "sh", - "name": "job_espresso_pw_scf.sh", - "rendered": "#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "shell", + "content": "#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n", + "contextProviders": [], + "executableName": "sh", + "name": "job_espresso_pw_scf.sh", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/shell/hello_world.json b/data/workflows/subworkflows/shell/hello_world.json index 26137fa7..641263df 100644 --- a/data/workflows/subworkflows/shell/hello_world.json +++ b/data/workflows/subworkflows/shell/hello_world.json @@ -28,6 +28,9 @@ "flowchartId": "99304304-e873-5c89-ae83-91e61a7f629c", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "shell", "shortName": "sh", @@ -38,14 +41,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "hello_world", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "shell", "executableName": "sh", "input": [ @@ -55,25 +66,31 @@ ], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "hello_world", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "shell", - "content": "#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n", - "contextProviders": [], - "executableName": "sh", - "name": "hello_world.sh", - "rendered": "#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "shell", + "content": "#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n", + "contextProviders": [], + "executableName": "sh", + "name": "hello_world.sh", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/vasp/band_gap.json b/data/workflows/subworkflows/vasp/band_gap.json index 4ec4fb2b..c559e32b 100644 --- a/data/workflows/subworkflows/vasp/band_gap.json +++ b/data/workflows/subworkflows/vasp/band_gap.json @@ -5,15 +5,14 @@ "name": "vasp" }, "properties": [ - "total_energy", - "total_energy_contributions", - "pressure", - "fermi_energy", "atomic_forces", - "total_force", - "stress_tensor", "band_gaps", - "fermi_energy" + "fermi_energy", + "pressure", + "stress_tensor", + "total_energy", + "total_energy_contributions", + "total_force" ], "model": { "type": "dft", @@ -23,11 +22,7 @@ "subtype": "paw", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -68,6 +63,9 @@ "flowchartId": "9cb87769-bf20-56bf-a8b3-5a164e3bf541", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "isLicensed": true, "name": "vasp", @@ -79,21 +77,60 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "error_handler" + }, + { + "name": "prepare_restart" + }, + { + "name": "remove_non_zero_weight_kpoints" + } + ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "error_handler", - "prepare_restart", - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "vasp", + "results": [ + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "pressure" + }, + { + "name": "fermi_energy" + }, + { + "name": "atomic_forces" + }, + { + "name": "total_force" + }, + { + "name": "stress_tensor" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -109,69 +146,72 @@ ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "total_energy", - "total_energy_contributions", - "pressure", - "fermi_energy", - "atomic_forces", - "total_force", - "stress_tensor" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "vasp", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "vasp", - "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "INCAR", - "rendered": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "INCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "KPOINTS", - "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "KPOINTS", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "{{ input.POSCAR }}\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "POSCAR", - "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "{{ input.POSCAR }}\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "POSCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "f0d65517-9592-5bc8-948e-a0851a766cbb" + "context": [], + "next": "f0d65517-9592-5bc8-948e-a0851a766cbb", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -196,6 +236,9 @@ "flowchartId": "f0d65517-9592-5bc8-948e-a0851a766cbb", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "isLicensed": true, "name": "vasp", @@ -207,21 +250,45 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "error_handler" + }, + { + "name": "prepare_restart" + }, + { + "name": "remove_non_zero_weight_kpoints" + } + ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "error_handler", - "prepare_restart", - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "vasp_nscf", + "results": [ + { + "name": "band_gaps" + }, + { + "name": "fermi_energy" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -239,64 +306,74 @@ } ], "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "band_gaps", - "fermi_energy" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "vasp_nscf", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "vasp", - "content": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "INCAR", - "rendered": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "INCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "KPOINTS", - "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "KPOINTS", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "{{ input.POSCAR }}\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "POSCAR", - "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "{{ input.POSCAR }}\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "POSCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/vasp/band_structure.json b/data/workflows/subworkflows/vasp/band_structure.json index 06df6174..d1daed0f 100644 --- a/data/workflows/subworkflows/vasp/band_structure.json +++ b/data/workflows/subworkflows/vasp/band_structure.json @@ -5,14 +5,14 @@ "name": "vasp" }, "properties": [ - "total_energy", - "total_energy_contributions", - "pressure", - "fermi_energy", "atomic_forces", - "total_force", + "band_structure", + "fermi_energy", + "pressure", "stress_tensor", - "band_structure" + "total_energy", + "total_energy_contributions", + "total_force" ], "model": { "type": "dft", @@ -22,11 +22,7 @@ "subtype": "paw", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -67,6 +63,9 @@ "flowchartId": "9cb87769-bf20-56bf-a8b3-5a164e3bf541", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "isLicensed": true, "name": "vasp", @@ -78,21 +77,60 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "error_handler" + }, + { + "name": "prepare_restart" + }, + { + "name": "remove_non_zero_weight_kpoints" + } + ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "error_handler", - "prepare_restart", - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "vasp", + "results": [ + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "pressure" + }, + { + "name": "fermi_energy" + }, + { + "name": "atomic_forces" + }, + { + "name": "total_force" + }, + { + "name": "stress_tensor" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -108,69 +146,72 @@ ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "total_energy", - "total_energy_contributions", - "pressure", - "fermi_energy", - "atomic_forces", - "total_force", - "stress_tensor" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "vasp", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "vasp", - "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "INCAR", - "rendered": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "INCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "KPOINTS", - "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "KPOINTS", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "{{ input.POSCAR }}\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "POSCAR", - "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "{{ input.POSCAR }}\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "POSCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "1e1de3be-f6e4-513e-afe2-c84e567a8108" + "context": [], + "next": "1e1de3be-f6e4-513e-afe2-c84e567a8108", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -192,6 +233,9 @@ "flowchartId": "1e1de3be-f6e4-513e-afe2-c84e567a8108", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "isLicensed": true, "name": "vasp", @@ -203,21 +247,42 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "error_handler" + }, + { + "name": "prepare_restart" + }, + { + "name": "remove_non_zero_weight_kpoints" + } + ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "error_handler", - "prepare_restart", - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "vasp_bands", + "results": [ + { + "name": "band_structure" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -235,63 +300,74 @@ } ], "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "band_structure" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "vasp_bands", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "vasp", - "content": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "INCAR", - "rendered": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "INCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", - "contextProviders": [ - { - "name": "KPathFormDataManager" - }, - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "KPOINTS", - "rendered": "kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", + "contextProviders": [ + { + "name": "KPathFormDataManager" + }, + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "KPOINTS", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "{{ input.POSCAR }}\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "POSCAR", - "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "{{ input.POSCAR }}\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "POSCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/vasp/band_structure_dos.json b/data/workflows/subworkflows/vasp/band_structure_dos.json index 3e709581..d2684c98 100644 --- a/data/workflows/subworkflows/vasp/band_structure_dos.json +++ b/data/workflows/subworkflows/vasp/band_structure_dos.json @@ -5,15 +5,15 @@ "name": "vasp" }, "properties": [ + "atomic_forces", + "band_structure", "density_of_states", - "total_energy", - "total_energy_contributions", - "pressure", "fermi_energy", - "atomic_forces", - "total_force", + "pressure", "stress_tensor", - "band_structure" + "total_energy", + "total_energy_contributions", + "total_force" ], "model": { "type": "dft", @@ -23,11 +23,7 @@ "subtype": "paw", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -71,6 +67,9 @@ "flowchartId": "9cb87769-bf20-56bf-a8b3-5a164e3bf541", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "isLicensed": true, "name": "vasp", @@ -82,21 +81,60 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "error_handler" + }, + { + "name": "prepare_restart" + }, + { + "name": "remove_non_zero_weight_kpoints" + } + ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "error_handler", - "prepare_restart", - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "vasp", + "results": [ + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "pressure" + }, + { + "name": "fermi_energy" + }, + { + "name": "atomic_forces" + }, + { + "name": "total_force" + }, + { + "name": "stress_tensor" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -112,69 +150,72 @@ ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "total_energy", - "total_energy_contributions", - "pressure", - "fermi_energy", - "atomic_forces", - "total_force", - "stress_tensor" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "vasp", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "vasp", - "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "INCAR", - "rendered": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "INCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "KPOINTS", - "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "KPOINTS", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "{{ input.POSCAR }}\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "POSCAR", - "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "{{ input.POSCAR }}\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "POSCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "1e1de3be-f6e4-513e-afe2-c84e567a8108" + "context": [], + "next": "1e1de3be-f6e4-513e-afe2-c84e567a8108", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -196,6 +237,9 @@ "flowchartId": "1e1de3be-f6e4-513e-afe2-c84e567a8108", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "isLicensed": true, "name": "vasp", @@ -207,21 +251,42 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "error_handler" + }, + { + "name": "prepare_restart" + }, + { + "name": "remove_non_zero_weight_kpoints" + } + ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "error_handler", - "prepare_restart", - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "vasp_bands", + "results": [ + { + "name": "band_structure" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -239,63 +304,74 @@ } ], "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "band_structure" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "vasp_bands", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "vasp", - "content": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "INCAR", - "rendered": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "INCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", - "contextProviders": [ - { - "name": "KPathFormDataManager" - }, - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "KPOINTS", - "rendered": "kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", + "contextProviders": [ + { + "name": "KPathFormDataManager" + }, + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "KPOINTS", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "{{ input.POSCAR }}\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "POSCAR", - "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "{{ input.POSCAR }}\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "POSCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/vasp/dos.json b/data/workflows/subworkflows/vasp/dos.json index 2bb97840..adbef9c5 100644 --- a/data/workflows/subworkflows/vasp/dos.json +++ b/data/workflows/subworkflows/vasp/dos.json @@ -5,14 +5,14 @@ "name": "vasp" }, "properties": [ + "atomic_forces", "density_of_states", + "fermi_energy", + "pressure", + "stress_tensor", "total_energy", "total_energy_contributions", - "pressure", - "fermi_energy", - "atomic_forces", - "total_force", - "stress_tensor" + "total_force" ], "model": { "type": "dft", @@ -22,11 +22,7 @@ "subtype": "paw", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -70,6 +66,9 @@ "flowchartId": "9cb87769-bf20-56bf-a8b3-5a164e3bf541", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "isLicensed": true, "name": "vasp", @@ -81,21 +80,60 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "error_handler" + }, + { + "name": "prepare_restart" + }, + { + "name": "remove_non_zero_weight_kpoints" + } + ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "error_handler", - "prepare_restart", - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "vasp", + "results": [ + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "pressure" + }, + { + "name": "fermi_energy" + }, + { + "name": "atomic_forces" + }, + { + "name": "total_force" + }, + { + "name": "stress_tensor" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -111,68 +149,73 @@ ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "total_energy", - "total_energy_contributions", - "pressure", - "fermi_energy", - "atomic_forces", - "total_force", - "stress_tensor" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "vasp", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "vasp", - "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "INCAR", - "rendered": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "INCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "KPOINTS", - "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "KPOINTS", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "{{ input.POSCAR }}\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "POSCAR", - "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "{{ input.POSCAR }}\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "POSCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/vasp/fixed_cell_relaxation.json b/data/workflows/subworkflows/vasp/fixed_cell_relaxation.json index c46fe4da..8721c6d2 100644 --- a/data/workflows/subworkflows/vasp/fixed_cell_relaxation.json +++ b/data/workflows/subworkflows/vasp/fixed_cell_relaxation.json @@ -5,13 +5,13 @@ "name": "vasp" }, "properties": [ - "total_energy", "atomic_forces", "fermi_energy", + "final_structure", "pressure", "stress_tensor", - "total_force", - "final_structure" + "total_energy", + "total_force" ], "model": { "type": "dft", @@ -21,11 +21,7 @@ "subtype": "paw", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -73,6 +69,9 @@ "name": "prepare_restart" } ], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "isLicensed": true, "name": "vasp", @@ -84,21 +83,64 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "error_handler" + }, + { + "name": "prepare_restart" + }, + { + "name": "remove_non_zero_weight_kpoints" + } + ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "error_handler", - "prepare_restart", - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "vasp_relax", + "results": [ + { + "name": "total_energy" + }, + { + "name": "atomic_forces" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "stress_tensor" + }, + { + "name": "total_force" + }, + { + "name": "final_structure" + } + ], + "preProcessors": [], + "postProcessors": [ + { + "name": "prepare_restart" + } + ], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -116,73 +158,77 @@ } ], "monitors": [ - "standard_output", - "convergence_electronic", - "convergence_ionic" - ], - "postProcessors": [ - "prepare_restart" - ], - "results": [ - "total_energy", - "atomic_forces", - "fermi_energy", - "pressure", - "stress_tensor", - "total_force", - "final_structure" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + }, + { + "name": "convergence_ionic" + } ], - "name": "vasp_relax", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "vasp", - "content": "ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "INCAR", - "rendered": "ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "INCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "KPOINTS", - "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "KPOINTS", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "{{ input.POSCAR }}\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "POSCAR", - "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "{{ input.POSCAR }}\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "POSCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/vasp/initial_final_total_energies.json b/data/workflows/subworkflows/vasp/initial_final_total_energies.json index eab1e918..88367f1f 100644 --- a/data/workflows/subworkflows/vasp/initial_final_total_energies.json +++ b/data/workflows/subworkflows/vasp/initial_final_total_energies.json @@ -6,20 +6,13 @@ "name": "vasp" }, "properties": [ - "total_energy", - "total_energy_contributions", - "pressure", - "fermi_energy", "atomic_forces", - "total_force", + "fermi_energy", + "pressure", "stress_tensor", "total_energy", "total_energy_contributions", - "pressure", - "fermi_energy", - "atomic_forces", - "total_force", - "stress_tensor" + "total_force" ], "model": { "type": "dft", @@ -29,11 +22,7 @@ "subtype": "paw", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -74,6 +63,9 @@ "flowchartId": "f969f010-9dae-5085-9ac5-86150ef78897", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "isLicensed": true, "name": "vasp", @@ -85,21 +77,60 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "error_handler" + }, + { + "name": "prepare_restart" + }, + { + "name": "remove_non_zero_weight_kpoints" + } + ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "error_handler", - "prepare_restart", - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "vasp_neb_initial", + "results": [ + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "pressure" + }, + { + "name": "fermi_energy" + }, + { + "name": "atomic_forces" + }, + { + "name": "total_force" + }, + { + "name": "stress_tensor" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -116,76 +147,79 @@ } ], "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "total_energy", - "total_energy_contributions", - "pressure", - "fermi_energy", - "atomic_forces", - "total_force", - "stress_tensor" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "vasp_neb_initial", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "vasp", - "content": "ISTART = 0\nENCUT = 500\nISPIN = 2\n", - "contextProviders": [ - { - "name": "NEBFormDataManager" - }, - { - "name": "VASPNEBInputDataManager" - } - ], - "executableName": "vasp", - "name": "INCAR", - "rendered": "ISTART = 0\nENCUT = 500\nISPIN = 2\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "ISTART = 0\nENCUT = 500\nISPIN = 2\n", + "contextProviders": [ + { + "name": "NEBFormDataManager" + }, + { + "name": "VASPNEBInputDataManager" + } + ], + "executableName": "vasp", + "name": "INCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "KPOINTS", - "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "KPOINTS", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "{{ input.FIRST_IMAGE }}\n", - "contextProviders": [ - { - "name": "NEBFormDataManager" - }, - { - "name": "VASPNEBInputDataManager" - } - ], - "executableName": "vasp", - "name": "POSCAR", - "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "{{ input.FIRST_IMAGE }}\n", + "contextProviders": [ + { + "name": "NEBFormDataManager" + }, + { + "name": "VASPNEBInputDataManager" + } + ], + "executableName": "vasp", + "name": "POSCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "e65a17ce-10c8-5710-ad4d-fb3d42434091" + "context": [], + "next": "e65a17ce-10c8-5710-ad4d-fb3d42434091", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -225,6 +259,9 @@ "flowchartId": "e65a17ce-10c8-5710-ad4d-fb3d42434091", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "isLicensed": true, "name": "vasp", @@ -236,21 +273,60 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "error_handler" + }, + { + "name": "prepare_restart" + }, + { + "name": "remove_non_zero_weight_kpoints" + } + ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "error_handler", - "prepare_restart", - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "vasp_neb_final", + "results": [ + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "pressure" + }, + { + "name": "fermi_energy" + }, + { + "name": "atomic_forces" + }, + { + "name": "total_force" + }, + { + "name": "stress_tensor" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -267,75 +343,99 @@ } ], "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "total_energy", - "total_energy_contributions", - "pressure", - "fermi_energy", - "atomic_forces", - "total_force", - "stress_tensor" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "vasp_neb_final", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "vasp", - "content": "ISTART = 0\nENCUT = 500\nISPIN = 2\n", - "contextProviders": [ - { - "name": "NEBFormDataManager" - }, - { - "name": "VASPNEBInputDataManager" - } - ], - "executableName": "vasp", - "name": "INCAR", - "rendered": "ISTART = 0\nENCUT = 500\nISPIN = 2\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "ISTART = 0\nENCUT = 500\nISPIN = 2\n", + "contextProviders": [ + { + "name": "NEBFormDataManager" + }, + { + "name": "VASPNEBInputDataManager" + } + ], + "executableName": "vasp", + "name": "INCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "KPOINTS", - "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "KPOINTS", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "{{ input.LAST_IMAGE }}\n", - "contextProviders": [ - { - "name": "NEBFormDataManager" - }, - { - "name": "VASPNEBInputDataManager" - } - ], - "executableName": "vasp", - "name": "POSCAR", - "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "{{ input.LAST_IMAGE }}\n", + "contextProviders": [ + { + "name": "NEBFormDataManager" + }, + { + "name": "VASPNEBInputDataManager" + } + ], + "executableName": "vasp", + "name": "POSCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "compute": { + "ppn": 1, + "nodes": 1, + "queue": "D", + "timeLimit": "01:00:00", + "notify": "n", + "cluster": { + "fqdn": "" + }, + "timeLimitType": "per single attempt", + "isRestartable": true, + "arguments": { + "nimage": 1, + "npools": 1, + "nband": 1, + "ntg": 1, + "ndiag": 1 + } + }, + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/vasp/kpoint_convergence.json b/data/workflows/subworkflows/vasp/kpoint_convergence.json index 1e282622..bf1a8031 100644 --- a/data/workflows/subworkflows/vasp/kpoint_convergence.json +++ b/data/workflows/subworkflows/vasp/kpoint_convergence.json @@ -5,13 +5,13 @@ "name": "vasp" }, "properties": [ + "atomic_forces", + "fermi_energy", + "pressure", + "stress_tensor", "total_energy", "total_energy_contributions", - "pressure", - "fermi_energy", - "atomic_forces", - "total_force", - "stress_tensor" + "total_force" ], "model": { "type": "dft", @@ -21,11 +21,7 @@ "subtype": "paw", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -34,22 +30,18 @@ "operand": "TOL", "value": 0.00001, "input": [], - "flowchartId": "init-tolerance", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "init-tolerance", "head": true, "next": "init-increment", - "application": { - "isLicensed": true, - "name": "vasp", - "shortName": "vasp", - "summary": "Vienna Ab-initio Simulation Package", - "build": "GNU", - "isDefault": true, - "version": "5.4.4", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Init increment", @@ -57,22 +49,18 @@ "operand": "INC", "value": 1, "input": [], - "flowchartId": "init-increment", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "init-increment", "head": false, "next": "init-result", - "application": { - "isLicensed": true, - "name": "vasp", - "shortName": "vasp", - "summary": "Vienna Ab-initio Simulation Package", - "build": "GNU", - "isDefault": true, - "version": "5.4.4", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Init result", @@ -80,22 +68,18 @@ "operand": "PREV_RESULT", "value": 0, "input": [], - "flowchartId": "init-result", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "init-result", "head": false, "next": "init-parameter", - "application": { - "isLicensed": true, - "name": "vasp", - "shortName": "vasp", - "summary": "Vienna Ab-initio Simulation Package", - "build": "GNU", - "isDefault": true, - "version": "5.4.4", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Init parameter", @@ -103,22 +87,18 @@ "operand": "PARAMETER", "value": 1, "input": [], - "flowchartId": "init-parameter", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "init-parameter", "head": false, "next": "vasp-kpoint-convergence", - "application": { - "isLicensed": true, - "name": "vasp", - "shortName": "vasp", - "summary": "Vienna Ab-initio Simulation Package", - "build": "GNU", - "isDefault": true, - "version": "5.4.4", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -158,6 +138,9 @@ "flowchartId": "vasp-kpoint-convergence", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "isLicensed": true, "name": "vasp", @@ -169,21 +152,60 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "error_handler" + }, + { + "name": "prepare_restart" + }, + { + "name": "remove_non_zero_weight_kpoints" + } + ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "error_handler", - "prepare_restart", - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "vasp_kpt_conv", + "results": [ + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "pressure" + }, + { + "name": "fermi_energy" + }, + { + "name": "atomic_forces" + }, + { + "name": "total_force" + }, + { + "name": "stress_tensor" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -201,70 +223,73 @@ } ], "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "total_energy", - "total_energy_contributions", - "pressure", - "fermi_energy", - "atomic_forces", - "total_force", - "stress_tensor" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "vasp_kpt_conv", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "vasp", - "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "INCAR", - "rendered": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "INCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "KPOINTS", - "rendered": "Automatic Mesh\n0\nGamma\n{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}\n0 0 0\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "KPOINTS", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "{{ input.POSCAR }}\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "POSCAR", - "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "{{ input.POSCAR }}\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "POSCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "store-result" + "context": [], + "next": "store-result", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "store result", @@ -277,50 +302,39 @@ "scope": "vasp-kpoint-convergence" } ], - "flowchartId": "store-result", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "store-result", "head": false, "next": "check-convergence", - "application": { - "isLicensed": true, - "name": "vasp", - "shortName": "vasp", - "summary": "Vienna Ab-initio Simulation Package", - "build": "GNU", - "isDefault": true, - "version": "5.4.4", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "check convergence", "type": "condition", "input": [], + "statement": "abs((PREV_RESULT-RESULT)/RESULT) < TOL", + "maxOccurrences": 50, "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "then": "convergence-is-reached", - "else": "update-result", - "statement": "abs((PREV_RESULT-RESULT)/RESULT) < TOL", - "maxOccurrences": 50, - "flowchartId": "check-convergence", "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "check-convergence", + "then": "convergence-is-reached", + "else": "update-result", "head": false, "next": "update-result", - "application": { - "isLicensed": true, - "name": "vasp", - "shortName": "vasp", - "summary": "Vienna Ab-initio Simulation Package", - "build": "GNU", - "isDefault": true, - "version": "5.4.4", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "update result", @@ -333,22 +347,18 @@ "scope": "global" } ], - "flowchartId": "update-result", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "update-result", "head": false, "next": "increment-parameter", - "application": { - "isLicensed": true, - "name": "vasp", - "shortName": "vasp", - "summary": "Vienna Ab-initio Simulation Package", - "build": "GNU", - "isDefault": true, - "version": "5.4.4", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "increment parameter", @@ -365,22 +375,18 @@ "scope": "global" } ], - "flowchartId": "increment-parameter", - "next": "vasp-kpoint-convergence", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "increment-parameter", + "next": "vasp-kpoint-convergence", "head": false, - "application": { - "isLicensed": true, - "name": "vasp", - "shortName": "vasp", - "summary": "Vienna Ab-initio Simulation Package", - "build": "GNU", - "isDefault": true, - "version": "5.4.4", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "exit", @@ -393,21 +399,19 @@ "scope": "global" } ], - "flowchartId": "convergence-is-reached", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "convergence-is-reached", "head": false, - "application": { - "isLicensed": true, - "name": "vasp", - "shortName": "vasp", - "summary": "Vienna Ab-initio Simulation Package", - "build": "GNU", - "isDefault": true, - "version": "5.4.4", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/vasp/neb_subworkflow.json b/data/workflows/subworkflows/vasp/neb_subworkflow.json index aaca3fa6..0d70871e 100644 --- a/data/workflows/subworkflows/vasp/neb_subworkflow.json +++ b/data/workflows/subworkflows/vasp/neb_subworkflow.json @@ -17,11 +17,7 @@ "subtype": "paw", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -44,6 +40,9 @@ "flowchartId": "9a1660ab-8067-5fad-9fb8-7c039f634636", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "isLicensed": true, "name": "vasp", @@ -55,21 +54,45 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "error_handler" + }, + { + "name": "prepare_restart" + }, + { + "name": "remove_non_zero_weight_kpoints" + } + ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "error_handler", - "prepare_restart", - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "vasp_neb", + "results": [ + { + "name": "reaction_energy_barrier" + }, + { + "name": "reaction_energy_profile" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -83,53 +106,58 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "reaction_energy_barrier", - "reaction_energy_profile" + { + "name": "standard_output" + } ], - "name": "vasp_neb", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "vasp", - "content": "ISTART = 0\nIBRION = 1\nEDIFFG = -0.001\nENCUT = 500\nNELM = 100\nNSW = 100\nIMAGES = {{ input.INTERMEDIATE_IMAGES.length or neb.nImages }}\nSPRING = -5\nISPIN = 2\n", - "contextProviders": [ - { - "name": "NEBFormDataManager" - }, - { - "name": "VASPNEBInputDataManager" - } - ], - "executableName": "vasp", - "name": "INCAR", - "rendered": "ISTART = 0\nIBRION = 1\nEDIFFG = -0.001\nENCUT = 500\nNELM = 100\nNSW = 100\nIMAGES = 1\nSPRING = -5\nISPIN = 2\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "ISTART = 0\nIBRION = 1\nEDIFFG = -0.001\nENCUT = 500\nNELM = 100\nNSW = 100\nIMAGES = {{ input.INTERMEDIATE_IMAGES.length or neb.nImages }}\nSPRING = -5\nISPIN = 2\n", + "contextProviders": [ + { + "name": "NEBFormDataManager" + }, + { + "name": "VASPNEBInputDataManager" + } + ], + "executableName": "vasp", + "name": "INCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "KPOINTS", - "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "KPOINTS", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } diff --git a/data/workflows/subworkflows/vasp/prepare_images.json b/data/workflows/subworkflows/vasp/prepare_images.json index c87a5206..e6544d5b 100644 --- a/data/workflows/subworkflows/vasp/prepare_images.json +++ b/data/workflows/subworkflows/vasp/prepare_images.json @@ -29,6 +29,9 @@ "flowchartId": "dc397ead-54ad-513b-992e-aedd54576409", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "shell", "shortName": "sh", @@ -39,14 +42,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "bash_vasp_prepare_neb_images", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "shell", "executableName": "sh", "input": [ @@ -55,30 +66,36 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "bash_vasp_prepare_neb_images", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "shell", - "content": "#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < 00/POSCAR < 01/POSCAR < 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n", - "contextProviders": [], - "executableName": "python", - "name": "espresso_xml_get_qpt_irr.py", - "rendered": "# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n\n\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n", - "schemaVersion": "2022.8.16" - } - ] - }, - { - "name": "assignment", - "type": "assignment", - "operand": "Q_POINTS", - "value": "json.loads(STDOUT)", - "input": [ - { - "scope": "9b8a495e-1ac1-56a7-b2e0-af1b405a1219", - "name": "STDOUT" - } - ], - "status": "idle", - "statusTrack": [], - "flowchartId": "d0fd8654-2106-546b-8792-7bb46272befc", - "tags": [], - "head": false, - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - } - } - ] + "units": [], + "schemaVersion": "2022.8.16", + "isDraft": false }, { "_id": "545a66e2-dfbe-513e-acaf-d79d0d139b9c", @@ -375,8 +335,8 @@ "schemaVersion": "2022.8.16" }, "properties": [ - "phonon_dos", - "phonon_dispersions" + "phonon_dispersions", + "phonon_dos" ], "model": { "type": "dft", @@ -386,11 +346,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -406,6 +362,9 @@ "flowchartId": "cb206177-a4af-599a-81ba-6c88d24253b6", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -417,14 +376,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "ph_grid_restart", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "ph.x", "input": [ @@ -433,32 +400,35 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "results": [], - "name": "ph_grid_restart", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", - "contextProviders": [ - { - "name": "QGridFormDataManager" - } - ], - "executableName": "ph.x", - "name": "ph_grid_restart.in", - "rendered": "&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", + "contextProviders": [ + { + "name": "QGridFormDataManager" + } + ], + "executableName": "ph.x", + "name": "ph_grid_restart.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "3b4507a7-9244-540b-abe0-66bceab700f5" + "context": [], + "next": "3b4507a7-9244-540b-abe0-66bceab700f5", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -473,6 +443,9 @@ "flowchartId": "3b4507a7-9244-540b-abe0-66bceab700f5", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -484,14 +457,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "q2r.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "q2r", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "q2r.x", "input": [ @@ -500,28 +481,31 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "results": [], - "name": "q2r", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", - "contextProviders": [], - "executableName": "q2r.x", - "name": "q2r.in", - "rendered": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", + "contextProviders": [], + "executableName": "q2r.x", + "name": "q2r.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "8fe6a24b-c994-55a2-a448-88657292e8c2" + "context": [], + "next": "8fe6a24b-c994-55a2-a448-88657292e8c2", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -540,6 +524,9 @@ "flowchartId": "8fe6a24b-c994-55a2-a448-88657292e8c2", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -551,14 +538,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "matdyn.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "matdyn_grid", + "results": [ + { + "name": "phonon_dos" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "matdyn.x", "input": [ @@ -567,34 +566,35 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "phonon_dos" + { + "name": "standard_output" + } ], - "name": "matdyn_grid", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n", - "contextProviders": [ - { - "name": "IGridFormDataManager" - } - ], - "executableName": "matdyn.x", - "name": "matdyn_grid.in", - "rendered": "&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n", + "contextProviders": [ + { + "name": "IGridFormDataManager" + } + ], + "executableName": "matdyn.x", + "name": "matdyn_grid.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "a7fded20-889b-54fc-bbb0-456e82689ab1" + "context": [], + "next": "a7fded20-889b-54fc-bbb0-456e82689ab1", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -613,6 +613,9 @@ "flowchartId": "a7fded20-889b-54fc-bbb0-456e82689ab1", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -624,14 +627,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "matdyn.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "matdyn_path", + "results": [ + { + "name": "phonon_dispersions" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "matdyn.x", "input": [ @@ -640,75 +655,86 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "phonon_dispersions" + { + "name": "standard_output" + } ], - "name": "matdyn_path", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", - "contextProviders": [ - { - "name": "IPathFormDataManager" - } - ], - "executableName": "matdyn.x", - "name": "matdyn_path.in", - "rendered": "&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", + "contextProviders": [ + { + "name": "IPathFormDataManager" + } + ], + "executableName": "matdyn.x", + "name": "matdyn_path.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } ], "units": [ { - "name": "Preliminary SCF Calculation", + "_id": "f52b8039-83d0-5485-a1f1-0bc37cb01ed3", "type": "subworkflow", - "_id": "79f2cb6a-7994-5369-8c85-af07c55ad26f", - "status": "idle", - "statusTrack": [], - "flowchartId": "b6a2b27a-0fec-5e0e-8974-073ee9d2ad83", - "tags": [], - "head": true, - "next": "4bb74dfb-46a6-5bf4-a477-5d374dc2e271" + "name": "pw-scf", + "preProcessors": [], + "postProcessors": [], + "monitors": [], + "results": [], + "flowchartId": "d270b789-fb67-573c-a566-9f09fdacea23", + "schemaVersion": "2022.8.16", + "isDefault": false }, { - "name": "ph-init-qpoints", "type": "subworkflow", - "_id": "2f017bcb-f4ba-55b8-b939-1f780679a88e", + "name": "ph-init-qpoints", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "4bb74dfb-46a6-5bf4-a477-5d374dc2e271", "tags": [], - "head": false, - "next": "9894b91f-6e97-5ee6-af02-0bef26bd62c0" + "_id": "2f017bcb-f4ba-55b8-b939-1f780679a88e", + "flowchartId": "4bb74dfb-46a6-5bf4-a477-5d374dc2e271", + "schemaVersion": "2022.8.16", + "isDefault": false }, { - "name": "espresso-xml-get-qpt-irr", "type": "subworkflow", - "_id": "e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a", + "name": "espresso-xml-get-qpt-irr", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "9894b91f-6e97-5ee6-af02-0bef26bd62c0", "tags": [], - "head": false, - "next": "24e3c1f0-8090-512e-9727-8770071d17c8" + "_id": "e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a", + "flowchartId": "9894b91f-6e97-5ee6-af02-0bef26bd62c0", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "map", "type": "map", - "workflowId": "731d3397-3278-516a-b28e-53626ef50f0a", "input": { "target": "MAP_DATA", "scope": "global", @@ -716,22 +742,32 @@ "values": [], "useValues": false }, + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "24e3c1f0-8090-512e-9727-8770071d17c8", "tags": [], - "head": false, - "next": "55a9e9fb-3545-5c4b-a1bb-b64a899b78c6" + "workflowId": "b58b7b6b-19b6-4fc2-b655-c3f380b70f5a", + "flowchartId": "24e3c1f0-8090-512e-9727-8770071d17c8", + "schemaVersion": "2022.8.16", + "isDefault": false }, { - "name": "reduce", "type": "subworkflow", - "_id": "545a66e2-dfbe-513e-acaf-d79d0d139b9c", + "name": "reduce", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "55a9e9fb-3545-5c4b-a1bb-b64a899b78c6", "tags": [], - "head": false + "_id": "545a66e2-dfbe-513e-acaf-d79d0d139b9c", + "flowchartId": "55a9e9fb-3545-5c4b-a1bb-b64a899b78c6", + "schemaVersion": "2022.8.16", + "isDefault": false } ], "properties": [ @@ -743,10 +779,10 @@ "total_energy_contributions", "total_force" ], - "_id": "23b9058b-884c-52d4-82a8-ee162b9761e0", "workflows": [ { - "name": "pre-processor", + "_id": "731d3397-3278-516a-b28e-53626ef50f0a", + "name": "phonon_map_workflow", "subworkflows": [ { "_id": "03f3a8a3-1fd0-5007-925f-fba78be63a51", @@ -784,6 +820,9 @@ "flowchartId": "99304304-e873-5c89-ae83-91e61a7f629c", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "shell", "shortName": "sh", @@ -794,14 +833,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "espresso_link_outdir_save", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "shell", "executableName": "sh", "input": [ @@ -810,28 +857,34 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "espresso_link_outdir_save", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "shell", - "content": "{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n", - "contextProviders": [], - "executableName": "sh", - "name": "espresso_link_outdir_save.sh", - "rendered": "\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "shell", + "content": "{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n", + "contextProviders": [], + "executableName": "sh", + "name": "espresso_link_outdir_save.sh", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false }, { "_id": "e68db280-8636-53e3-81a0-88396ba6147d", @@ -855,11 +908,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -875,6 +924,9 @@ "flowchartId": "8db9af08-d935-57a0-a824-e7db6d936de8", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -886,14 +938,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "ph_single_irr_qpt", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "ph.x", "input": [ @@ -902,33 +962,38 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "results": [], - "name": "ph_single_irr_qpt", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", - "contextProviders": [ - { - "name": "QGridFormDataManager" - } - ], - "executableName": "ph.x", - "name": "ph_single_irr_qpt.in", - "rendered": "&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n \n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n \n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = '{{ JOB_SCRATCH_DIR }}/outdir'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", + "contextProviders": [ + { + "name": "QGridFormDataManager" + } + ], + "executableName": "ph.x", + "name": "ph_single_irr_qpt.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false }, { "_id": "7239fc3a-b343-513f-af35-e8687e1829da", @@ -966,6 +1031,9 @@ "flowchartId": "cd5c3e29-511b-5ef8-949d-ad884f210301", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "shell", "shortName": "sh", @@ -976,14 +1044,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "espresso_collect_dynmat", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "shell", "executableName": "sh", "input": [ @@ -992,79 +1068,76 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "espresso_collect_dynmat", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "shell", - "content": "{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n", - "contextProviders": [], - "executableName": "sh", - "name": "espresso_collect_dynmat.sh", - "rendered": "\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "shell", + "content": "{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n", + "contextProviders": [], + "executableName": "sh", + "name": "espresso_collect_dynmat.sh", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } ], "units": [ { - "name": "pre-processor", - "type": "subworkflow", "_id": "03f3a8a3-1fd0-5007-925f-fba78be63a51", - "status": "idle", - "statusTrack": [], - "flowchartId": "e9a790f4-dec6-52c1-b951-014f0ff01cb4", - "tags": [], - "head": true, - "next": "c2195045-7a5c-54d3-ab88-211c82de09f1" + "type": "subworkflow", + "name": "pre-processor", + "preProcessors": [], + "postProcessors": [], + "monitors": [], + "results": [], + "flowchartId": "e9a790f4-dec6-52c1-b951-014f0ff01cb4" }, { - "name": "ph-single-irr-qpt", "type": "subworkflow", - "_id": "e68db280-8636-53e3-81a0-88396ba6147d", + "name": "ph-single-irr-qpt", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "c2195045-7a5c-54d3-ab88-211c82de09f1", "tags": [], - "head": false, - "next": "e483c7fb-2a29-5e91-819a-7465ead70134" + "_id": "e68db280-8636-53e3-81a0-88396ba6147d", + "flowchartId": "c2195045-7a5c-54d3-ab88-211c82de09f1" }, { - "name": "post-processor", "type": "subworkflow", - "_id": "7239fc3a-b343-513f-af35-e8687e1829da", + "name": "post-processor", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "e483c7fb-2a29-5e91-819a-7465ead70134", "tags": [], - "head": false + "_id": "7239fc3a-b343-513f-af35-e8687e1829da", + "flowchartId": "e483c7fb-2a29-5e91-819a-7465ead70134" } ], "properties": [], - "_id": "731d3397-3278-516a-b28e-53626ef50f0a", - "workflows": [], - "schemaVersion": "2022.8.16", - "isDefault": false, - "compute": { - "ppn": 1, - "nodes": 1, - "queue": "D", - "timeLimit": "01:00:00", - "notify": "n", - "cluster": { - "fqdn": "" - } - } + "workflows": [] } ], "schemaVersion": "2022.8.16", diff --git a/data/workflows/workflows/espresso/recalculate_bands.json b/data/workflows/workflows/espresso/recalculate_bands.json index 9d5ea8e6..6f700f2e 100644 --- a/data/workflows/workflows/espresso/recalculate_bands.json +++ b/data/workflows/workflows/espresso/recalculate_bands.json @@ -1,5 +1,6 @@ { "name": "Recalculate Bands", + "_id": "42b2b964-8ccc-5b36-9e33-41a954abc2ba", "subworkflows": [ { "_id": "64551dfb-e529-5d8d-9092-ff268f4da134", @@ -25,11 +26,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -49,6 +46,9 @@ "flowchartId": "d618df45-5af3-5da5-8882-d74a27e00b04", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -60,20 +60,37 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_bands", + "results": [ + { + "name": "band_structure" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -82,40 +99,41 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "band_structure" + { + "name": "standard_output" + } ], - "name": "pw_bands", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", - "contextProviders": [ - { - "name": "KPathFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_bands.in", - "rendered": "&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", + "contextProviders": [ + { + "name": "KPathFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_bands.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2" + "context": [], + "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -130,6 +148,9 @@ "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -141,14 +162,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "bands", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -157,46 +186,53 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", - "contextProviders": [], - "executableName": "bands.x", - "name": "bands.in", - "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", + "contextProviders": [], + "executableName": "bands.x", + "name": "bands.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } ], "units": [ { - "name": "Recalculate Bands", - "type": "subworkflow", "_id": "64551dfb-e529-5d8d-9092-ff268f4da134", - "status": "idle", - "statusTrack": [], + "type": "subworkflow", + "name": "Recalculate Bands", + "preProcessors": [], + "postProcessors": [], + "monitors": [], + "results": [], "flowchartId": "e8b72a45-765e-565f-ab17-c91a21aec09d", - "tags": [], - "head": true + "schemaVersion": "2022.8.16", + "isDefault": false } ], "properties": [ "band_structure" ], - "_id": "42b2b964-8ccc-5b36-9e33-41a954abc2ba", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, diff --git a/data/workflows/workflows/espresso/surface_energy.json b/data/workflows/workflows/espresso/surface_energy.json index 475a89b5..77cf2bf2 100644 --- a/data/workflows/workflows/espresso/surface_energy.json +++ b/data/workflows/workflows/espresso/surface_energy.json @@ -1,5 +1,6 @@ { "name": "Surface Energy", + "_id": "68512987-de73-5614-bab2-0f8b575cffa3", "subworkflows": [ { "_id": "3e05a2b5-4171-54a2-9d2d-9e46118a56bf", @@ -19,6 +20,7 @@ "fermi_energy", "pressure", "stress_tensor", + "surface_energy", "total_energy", "total_energy_contributions", "total_force" @@ -31,360 +33,13 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ - { - "name": "io-slab", - "type": "io", - "subtype": "input", - "head": true, - "results": [], - "monitors": [], - "flowchartId": "e463ef46-a36e-5168-87dd-e21eb980dfb8", - "preProcessors": [], - "postProcessors": [], - "source": "api", - "input": [ - { - "endpoint": "materials", - "endpoint_options": { - "params": { - "query": "{'_id': MATERIAL_ID}", - "projection": "{}" - } - }, - "name": "DATA" - } - ], - "next": "ee7abb4e-7848-5aeb-960d-0d441909e2d1", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - }, - "status": "idle", - "statusTrack": [], - "tags": [] - }, - { - "name": "slab", - "type": "assignment", - "operand": "SLAB", - "value": "DATA[0]", - "input": [ - { - "name": "DATA", - "scope": "e463ef46-a36e-5168-87dd-e21eb980dfb8" - } - ], - "head": false, - "results": [], - "monitors": [], - "flowchartId": "ee7abb4e-7848-5aeb-960d-0d441909e2d1", - "preProcessors": [], - "postProcessors": [], - "next": "44263820-0c80-5bd1-b854-9da8d198eac1", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - }, - "status": "idle", - "statusTrack": [], - "tags": [] - }, - { - "name": "io-bulk", - "type": "io", - "subtype": "input", - "head": false, - "results": [], - "monitors": [], - "flowchartId": "44263820-0c80-5bd1-b854-9da8d198eac1", - "preProcessors": [], - "postProcessors": [], - "source": "api", - "input": [ - { - "endpoint": "materials", - "endpoint_options": { - "params": { - "query": "{'_id': SLAB.metadata.bulkId}", - "projection": "{}" - } - }, - "name": "DATA" - } - ], - "next": "b70656f1-a394-57f4-b4de-00096969df4b", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - }, - "status": "idle", - "statusTrack": [], - "tags": [] - }, - { - "name": "bulk", - "type": "assignment", - "operand": "BULK", - "value": "DATA[0] if DATA else None", - "input": [ - { - "name": "DATA", - "scope": "44263820-0c80-5bd1-b854-9da8d198eac1" - } - ], - "head": false, - "results": [], - "monitors": [], - "flowchartId": "b70656f1-a394-57f4-b4de-00096969df4b", - "preProcessors": [], - "postProcessors": [], - "next": "6ca4006a-e3ae-56ea-91a1-06b9790b5f7e", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - }, - "status": "idle", - "statusTrack": [], - "tags": [] - }, - { - "name": "assert-bulk", - "type": "assertion", - "statement": "BULK != None", - "errorMessage": "Bulk material does not exist!", - "head": false, - "results": [], - "monitors": [], - "flowchartId": "6ca4006a-e3ae-56ea-91a1-06b9790b5f7e", - "preProcessors": [], - "postProcessors": [], - "next": "490635e0-c593-5809-9eb2-c794b96cfed1", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - }, - "status": "idle", - "statusTrack": [], - "tags": [] - }, - { - "name": "io-e-bulk", - "type": "io", - "subtype": "input", - "head": false, - "results": [], - "monitors": [], - "flowchartId": "490635e0-c593-5809-9eb2-c794b96cfed1", - "preProcessors": [], - "postProcessors": [], - "source": "api", - "input": [ - { - "endpoint": "refined-properties", - "endpoint_options": { - "params": { - "query": "{ 'exabyteId': BULK.exabyteId, 'data.name': 'total_energy', 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} }", - "projection": "{'sort': {'precision.value': -1}, 'limit': 1}" - } - }, - "name": "DATA" - } - ], - "next": "bbe13b97-4243-5a85-8f61-a279d0b797aa", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - }, - "status": "idle", - "statusTrack": [], - "tags": [] - }, - { - "name": "e-bulk", - "type": "assignment", - "operand": "E_BULK", - "value": "DATA[0].data.value if DATA else None", - "input": [ - { - "name": "DATA", - "scope": "490635e0-c593-5809-9eb2-c794b96cfed1" - } - ], - "head": false, - "results": [], - "monitors": [], - "flowchartId": "bbe13b97-4243-5a85-8f61-a279d0b797aa", - "preProcessors": [], - "postProcessors": [], - "next": "a06c9f43-7670-5fd0-ac42-7028a472235a", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - }, - "status": "idle", - "statusTrack": [], - "tags": [] - }, - { - "name": "assert-e-bulk", - "type": "assertion", - "statement": "E_BULK != None", - "errorMessage": "E_BULK does not exist!", - "head": false, - "results": [], - "monitors": [], - "flowchartId": "a06c9f43-7670-5fd0-ac42-7028a472235a", - "preProcessors": [], - "postProcessors": [], - "next": "cdf210be-26ed-585a-b4ac-d55795ba2975", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - }, - "status": "idle", - "statusTrack": [], - "tags": [] - }, - { - "name": "surface", - "type": "assignment", - "operand": "A", - "value": "np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))", - "input": [], - "head": false, - "results": [], - "monitors": [], - "flowchartId": "cdf210be-26ed-585a-b4ac-d55795ba2975", - "preProcessors": [], - "postProcessors": [], - "next": "ffa8e43d-096a-555b-b8d0-6d283365ef47", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - }, - "status": "idle", - "statusTrack": [], - "tags": [] - }, - { - "name": "n-bulk", - "type": "assignment", - "operand": "N_BULK", - "value": "len(BULK.basis.elements)", - "input": [], - "head": false, - "results": [], - "monitors": [], - "flowchartId": "ffa8e43d-096a-555b-b8d0-6d283365ef47", - "preProcessors": [], - "postProcessors": [], - "next": "a0336ec5-a6da-5e4c-bb48-82b70cf5245f", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - }, - "status": "idle", - "statusTrack": [], - "tags": [] - }, - { - "name": "n-slab", - "type": "assignment", - "operand": "N_SLAB", - "value": "len(SLAB.basis.elements)", - "input": [], - "head": false, - "results": [], - "monitors": [], - "flowchartId": "a0336ec5-a6da-5e4c-bb48-82b70cf5245f", - "preProcessors": [], - "postProcessors": [], - "next": "9fc7a088-5533-5f70-bb33-f676ec65f565", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - }, - "status": "idle", - "statusTrack": [], - "tags": [] - }, { "type": "execution", "name": "pw_scf", - "head": false, + "head": true, "results": [ { "name": "atomic_forces" @@ -419,6 +74,9 @@ "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -430,20 +88,55 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_scf", + "results": [ + { + "name": "atomic_forces" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "stress_tensor" + }, + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "total_force" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -453,122 +146,60 @@ ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "atomic_forces", - "fermi_energy", - "pressure", - "stress_tensor", - "total_energy", - "total_energy_contributions", - "total_force" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "pw_scf", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], - "input": [ - { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_scf.in", - "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" - } - ], - "next": "fcd88119-817c-5ac1-a430-ba892ac743eb" - }, - { - "name": "e-slab", - "type": "assignment", - "operand": "E_SLAB", - "value": "total_energy", "input": [ { - "name": "total_energy", - "scope": "9fc7a088-5533-5f70-bb33-f676ec65f565" - } - ], - "head": false, - "results": [], - "monitors": [], - "flowchartId": "fcd88119-817c-5ac1-a430-ba892ac743eb", - "preProcessors": [], - "postProcessors": [], - "next": "542ea9ad-8a07-5a76-b233-f72fb27c4fc6", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - }, - "status": "idle", - "statusTrack": [], - "tags": [] - }, - { - "name": "surface-energy", - "type": "assignment", - "operand": "SURFACE_ENERGY", - "value": "1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))", - "input": [], - "head": false, - "results": [ - { - "name": "surface_energy" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_scf.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "monitors": [], - "flowchartId": "542ea9ad-8a07-5a76-b233-f72fb27c4fc6", - "preProcessors": [], - "postProcessors": [], - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - }, - "status": "idle", - "statusTrack": [], - "tags": [] + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } ], "units": [ { - "name": "Surface Energy", - "type": "subworkflow", "_id": "3e05a2b5-4171-54a2-9d2d-9e46118a56bf", - "status": "idle", - "statusTrack": [], + "type": "subworkflow", + "name": "Surface Energy", + "preProcessors": [], + "postProcessors": [], + "monitors": [], + "results": [], "flowchartId": "d81dc9ce-bb50-5bc6-af1d-e5ede03bb0a6", - "tags": [], - "head": true + "schemaVersion": "2022.8.16", + "isDefault": false } ], "properties": [ @@ -581,7 +212,6 @@ "total_energy_contributions", "total_force" ], - "_id": "68512987-de73-5614-bab2-0f8b575cffa3", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, diff --git a/data/workflows/workflows/espresso/total_energy.json b/data/workflows/workflows/espresso/total_energy.json index 0924a04e..6db17142 100644 --- a/data/workflows/workflows/espresso/total_energy.json +++ b/data/workflows/workflows/espresso/total_energy.json @@ -1,5 +1,6 @@ { "name": "Total Energy", + "_id": "4e36ca25-fa46-5628-a227-27d22dea8553", "subworkflows": [ { "_id": "a16677f9-bb5b-54b5-9f97-c2af8c073184", @@ -31,11 +32,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -76,6 +73,9 @@ "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -87,20 +87,55 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_scf", + "results": [ + { + "name": "atomic_forces" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "stress_tensor" + }, + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "total_force" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -110,59 +145,60 @@ ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "atomic_forces", - "fermi_energy", - "pressure", - "stress_tensor", - "total_energy", - "total_energy_contributions", - "total_force" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "pw_scf", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_scf.in", - "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_scf.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } ], "units": [ { - "name": "Total Energy", - "type": "subworkflow", "_id": "a16677f9-bb5b-54b5-9f97-c2af8c073184", - "status": "idle", - "statusTrack": [], + "type": "subworkflow", + "name": "Total Energy", + "preProcessors": [], + "postProcessors": [], + "monitors": [], + "results": [], "flowchartId": "6059d61a-6a92-5657-9130-02208639aff8", - "tags": [], - "head": true + "schemaVersion": "2022.8.16", + "isDefault": false } ], "properties": [ @@ -174,7 +210,6 @@ "total_energy_contributions", "total_force" ], - "_id": "4e36ca25-fa46-5628-a227-27d22dea8553", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, diff --git a/data/workflows/workflows/espresso/valence_band_offset.json b/data/workflows/workflows/espresso/valence_band_offset.json index b4ed66ee..835bab50 100644 --- a/data/workflows/workflows/espresso/valence_band_offset.json +++ b/data/workflows/workflows/espresso/valence_band_offset.json @@ -1,5 +1,6 @@ { "name": "Valence Band Offset (2D)", + "_id": "d8e08cac-7747-50aa-b925-41f214d722c6", "subworkflows": [ { "isMultiMaterial": true, @@ -17,14 +18,14 @@ }, "properties": [ "atomic_forces", + "average_potential_profile", + "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", - "total_force", - "band_gaps", - "average_potential_profile" + "total_force" ], "model": { "type": "dft", @@ -34,11 +35,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -47,22 +44,18 @@ "operand": "MATERIAL_INDEX", "value": "0", "input": [], + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "0f21d8c4-ab32-53ba-b40d-fc9b6608e1b9", "tags": [], + "flowchartId": "0f21d8c4-ab32-53ba-b40d-fc9b6608e1b9", "head": true, "next": "9fc7a088-5533-5f70-bb33-f676ec65f565", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -102,6 +95,9 @@ "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -113,20 +109,55 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_scf", + "results": [ + { + "name": "atomic_forces" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "stress_tensor" + }, + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "total_force" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -136,46 +167,43 @@ ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "atomic_forces", - "fermi_energy", - "pressure", - "stress_tensor", - "total_energy", - "total_energy_contributions", - "total_force" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "pw_scf", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_scf.in", - "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_scf.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "pw-bands-calculate-band-gap" + "context": [], + "next": "pw-bands-calculate-band-gap", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -194,6 +222,9 @@ "flowchartId": "pw-bands-calculate-band-gap", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -205,20 +236,37 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_bands", + "results": [ + { + "name": "band_structure" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -227,40 +275,41 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "band_structure" + { + "name": "standard_output" + } ], - "name": "pw_bands", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", - "contextProviders": [ - { - "name": "KPathFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_bands.in", - "rendered": "&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", + "contextProviders": [ + { + "name": "KPathFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_bands.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "a667d9fd-35d5-5897-be0e-fa0247233649" + "context": [], + "next": "a667d9fd-35d5-5897-be0e-fa0247233649", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Select indirect band gap", @@ -273,22 +322,18 @@ "scope": "pw-bands-calculate-band-gap" } ], + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "a667d9fd-35d5-5897-be0e-fa0247233649", "tags": [], + "flowchartId": "a667d9fd-35d5-5897-be0e-fa0247233649", "head": false, "next": "08819369-b541-5b51-8a40-0ee135039482", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Set Valence Band Maximum", @@ -296,22 +341,18 @@ "operand": "VBM", "value": "BAND_GAP_INDIRECT['eigenvalueValence']", "input": [], + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "08819369-b541-5b51-8a40-0ee135039482", "tags": [], + "flowchartId": "08819369-b541-5b51-8a40-0ee135039482", "head": false, "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -326,6 +367,9 @@ "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -337,14 +381,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "bands", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -353,27 +405,31 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", - "contextProviders": [], - "executableName": "bands.x", - "name": "bands.in", - "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", + "contextProviders": [], + "executableName": "bands.x", + "name": "bands.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde" + "context": [], + "next": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -388,6 +444,9 @@ "flowchartId": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -399,14 +458,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "pp.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "pp_electrostatic_potential", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pp.x", "input": [ @@ -415,28 +482,31 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "results": [], - "name": "pp_electrostatic_potential", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", - "contextProviders": [], - "executableName": "pp.x", - "name": "pp_electrostatic_potential.in", - "rendered": "&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", + "contextProviders": [], + "executableName": "pp.x", + "name": "pp_electrostatic_potential.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "average-electrostatic-potential" + "context": [], + "next": "average-electrostatic-potential", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -455,6 +525,9 @@ "flowchartId": "average-electrostatic-potential", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -466,14 +539,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "average.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "average_potential", + "results": [ + { + "name": "average_potential_profile" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "average.x", "input": [ @@ -482,30 +567,31 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "average_potential_profile" + { + "name": "standard_output" + } ], - "name": "average_potential", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", - "contextProviders": [], - "executableName": "average.x", - "name": "average.in", - "rendered": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", + "contextProviders": [], + "executableName": "average.x", + "name": "average.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "c6c11873-91d7-5422-8302-3dcc1ce971e9" + "context": [], + "next": "c6c11873-91d7-5422-8302-3dcc1ce971e9", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Set Macroscopically Averaged ESP Data", @@ -518,23 +604,21 @@ "scope": "average-electrostatic-potential" } ], + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "c6c11873-91d7-5422-8302-3dcc1ce971e9", "tags": [], + "flowchartId": "c6c11873-91d7-5422-8302-3dcc1ce971e9", "head": false, - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false }, { "_id": "ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7", @@ -572,6 +656,9 @@ "flowchartId": "python-find-extrema", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -582,14 +669,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "generic:processing:find_extrema:scipy", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -603,36 +698,43 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "generic:processing:find_extrema:scipy", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "python", - "content": "# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n", - "contextProviders": [], - "executableName": "python", - "name": "find_extrema.py", - "rendered": "# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\nY = np.array({{array_from_context}})\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n", + "contextProviders": [], + "executableName": "python", + "name": "find_extrema.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "8fce780b-5555-5b73-b3d1-1bb24a4c759d" + "context": [], + "next": "8fce780b-5555-5b73-b3d1-1bb24a4c759d", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Set Average ESP Value", @@ -645,22 +747,21 @@ "scope": "python-find-extrema" } ], + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "8fce780b-5555-5b73-b3d1-1bb24a4c759d", "tags": [], + "flowchartId": "8fce780b-5555-5b73-b3d1-1bb24a4c759d", "head": false, - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false }, { "isMultiMaterial": true, @@ -678,14 +779,14 @@ }, "properties": [ "atomic_forces", + "average_potential_profile", + "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", - "total_force", - "band_gaps", - "average_potential_profile" + "total_force" ], "model": { "type": "dft", @@ -695,11 +796,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -708,22 +805,18 @@ "operand": "MATERIAL_INDEX", "value": "1", "input": [], + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "0bd31760-f6e4-5826-b282-882c06c97f94", "tags": [], + "flowchartId": "0bd31760-f6e4-5826-b282-882c06c97f94", "head": true, "next": "3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -763,6 +856,9 @@ "flowchartId": "3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -774,69 +870,101 @@ "schemaVersion": "2022.8.16" }, "executable": { - "hasAdvancedComputeOptions": true, - "isDefault": true, - "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], + "preProcessors": [], "postProcessors": [ - "remove_non_zero_weight_kpoints" - ], - "name": "pw.x", - "schemaVersion": "2022.8.16" - }, - "flavor": { - "applicationName": "espresso", - "executableName": "pw.x", - "input": [ { - "name": "pw_scf.in" + "name": "remove_non_zero_weight_kpoints" } ], + "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "atomic_forces", - "fermi_energy", - "pressure", - "stress_tensor", - "total_energy", - "total_energy_contributions", - "total_force" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } + ], + "name": "pw.x", + "schemaVersion": "2022.8.16" + }, + "flavor": { + "name": "pw_scf", + "results": [ + { + "name": "atomic_forces" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "stress_tensor" + }, + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "total_force" + } + ], + "preProcessors": [], + "postProcessors": [], + "applicationName": "espresso", + "executableName": "pw.x", + "input": [ + { + "name": "pw_scf.in" + } + ], + "isDefault": true, + "monitors": [ + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "pw_scf", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_scf.in", - "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_scf.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "pw-bands-calculate-band-gap-left" + "context": [], + "next": "pw-bands-calculate-band-gap-left", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -855,6 +983,9 @@ "flowchartId": "pw-bands-calculate-band-gap-left", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -866,20 +997,37 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_bands", + "results": [ + { + "name": "band_structure" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -888,40 +1036,41 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "band_structure" + { + "name": "standard_output" + } ], - "name": "pw_bands", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", - "contextProviders": [ - { - "name": "KPathFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_bands.in", - "rendered": "&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", + "contextProviders": [ + { + "name": "KPathFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_bands.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "a667d9fd-35d5-5897-be0e-fa0247233649" + "context": [], + "next": "a667d9fd-35d5-5897-be0e-fa0247233649", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Select indirect band gap", @@ -934,22 +1083,18 @@ "scope": "pw-bands-calculate-band-gap-left" } ], + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "a667d9fd-35d5-5897-be0e-fa0247233649", "tags": [], + "flowchartId": "a667d9fd-35d5-5897-be0e-fa0247233649", "head": false, "next": "08819369-b541-5b51-8a40-0ee135039482", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Set Valence Band Maximum", @@ -957,22 +1102,18 @@ "operand": "VBM_LEFT", "value": "BAND_GAP_INDIRECT['eigenvalueValence']", "input": [], + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "08819369-b541-5b51-8a40-0ee135039482", "tags": [], + "flowchartId": "08819369-b541-5b51-8a40-0ee135039482", "head": false, "next": "dfc4f1c5-5856-588a-99df-6d5fb46bb429", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -987,6 +1128,9 @@ "flowchartId": "dfc4f1c5-5856-588a-99df-6d5fb46bb429", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -998,14 +1142,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "bands", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -1014,27 +1166,31 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", - "contextProviders": [], - "executableName": "bands.x", - "name": "bands.in", - "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", + "contextProviders": [], + "executableName": "bands.x", + "name": "bands.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "b1bb2b3e-3197-5bcd-85b0-959cc357c8d3" + "context": [], + "next": "b1bb2b3e-3197-5bcd-85b0-959cc357c8d3", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -1049,6 +1205,9 @@ "flowchartId": "b1bb2b3e-3197-5bcd-85b0-959cc357c8d3", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -1060,14 +1219,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "pp.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "pp_electrostatic_potential", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pp.x", "input": [ @@ -1076,28 +1243,31 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "results": [], - "name": "pp_electrostatic_potential", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", - "contextProviders": [], - "executableName": "pp.x", - "name": "pp_electrostatic_potential.in", - "rendered": "&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", + "contextProviders": [], + "executableName": "pp.x", + "name": "pp_electrostatic_potential.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "average-electrostatic-potential-left" + "context": [], + "next": "average-electrostatic-potential-left", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -1116,6 +1286,9 @@ "flowchartId": "average-electrostatic-potential-left", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -1127,14 +1300,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "average.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "average_potential", + "results": [ + { + "name": "average_potential_profile" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "average.x", "input": [ @@ -1143,30 +1328,31 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "average_potential_profile" + { + "name": "standard_output" + } ], - "name": "average_potential", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", - "contextProviders": [], - "executableName": "average.x", - "name": "average.in", - "rendered": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", + "contextProviders": [], + "executableName": "average.x", + "name": "average.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "c6c11873-91d7-5422-8302-3dcc1ce971e9" + "context": [], + "next": "c6c11873-91d7-5422-8302-3dcc1ce971e9", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Set Macroscopically Averaged ESP Data", @@ -1179,23 +1365,21 @@ "scope": "average-electrostatic-potential-left" } ], + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "c6c11873-91d7-5422-8302-3dcc1ce971e9", "tags": [], + "flowchartId": "c6c11873-91d7-5422-8302-3dcc1ce971e9", "head": false, - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false }, { "_id": "6c303926-905c-5749-81d5-2d2964fdf09a", @@ -1233,6 +1417,9 @@ "flowchartId": "python-find-extrema-left", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -1243,14 +1430,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "generic:processing:find_extrema:scipy", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -1264,36 +1459,43 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "generic:processing:find_extrema:scipy", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "python", - "content": "# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n", - "contextProviders": [], - "executableName": "python", - "name": "find_extrema.py", - "rendered": "# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\nY = np.array({{array_from_context}})\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n", + "contextProviders": [], + "executableName": "python", + "name": "find_extrema.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "8fce780b-5555-5b73-b3d1-1bb24a4c759d" + "context": [], + "next": "8fce780b-5555-5b73-b3d1-1bb24a4c759d", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Set Average ESP Value", @@ -1306,22 +1508,21 @@ "scope": "python-find-extrema-left" } ], + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "8fce780b-5555-5b73-b3d1-1bb24a4c759d", "tags": [], + "flowchartId": "8fce780b-5555-5b73-b3d1-1bb24a4c759d", "head": false, - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false }, { "isMultiMaterial": true, @@ -1339,14 +1540,14 @@ }, "properties": [ "atomic_forces", + "average_potential_profile", + "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", - "total_force", - "band_gaps", - "average_potential_profile" + "total_force" ], "model": { "type": "dft", @@ -1356,11 +1557,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -1369,22 +1566,18 @@ "operand": "MATERIAL_INDEX", "value": "2", "input": [], + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "a05809d1-cc0d-5a0b-bf5e-d43b90a6ac4b", "tags": [], + "flowchartId": "a05809d1-cc0d-5a0b-bf5e-d43b90a6ac4b", "head": true, "next": "b89d6348-3915-5c24-9fbb-350bc98ac708", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -1424,6 +1617,9 @@ "flowchartId": "b89d6348-3915-5c24-9fbb-350bc98ac708", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -1435,20 +1631,55 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_scf", + "results": [ + { + "name": "atomic_forces" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "stress_tensor" + }, + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "total_force" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -1458,46 +1689,43 @@ ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "atomic_forces", - "fermi_energy", - "pressure", - "stress_tensor", - "total_energy", - "total_energy_contributions", - "total_force" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "pw_scf", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_scf.in", - "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_scf.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "pw-bands-calculate-band-gap-right" + "context": [], + "next": "pw-bands-calculate-band-gap-right", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -1516,6 +1744,9 @@ "flowchartId": "pw-bands-calculate-band-gap-right", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -1527,20 +1758,37 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_bands", + "results": [ + { + "name": "band_structure" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -1549,40 +1797,41 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "band_structure" + { + "name": "standard_output" + } ], - "name": "pw_bands", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", - "contextProviders": [ - { - "name": "KPathFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_bands.in", - "rendered": "&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", + "contextProviders": [ + { + "name": "KPathFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_bands.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "a667d9fd-35d5-5897-be0e-fa0247233649" + "context": [], + "next": "a667d9fd-35d5-5897-be0e-fa0247233649", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Select indirect band gap", @@ -1595,22 +1844,18 @@ "scope": "pw-bands-calculate-band-gap-right" } ], + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "a667d9fd-35d5-5897-be0e-fa0247233649", "tags": [], + "flowchartId": "a667d9fd-35d5-5897-be0e-fa0247233649", "head": false, "next": "08819369-b541-5b51-8a40-0ee135039482", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Set Valence Band Maximum", @@ -1618,22 +1863,18 @@ "operand": "VBM_RIGHT", "value": "BAND_GAP_INDIRECT['eigenvalueValence']", "input": [], + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "08819369-b541-5b51-8a40-0ee135039482", "tags": [], + "flowchartId": "08819369-b541-5b51-8a40-0ee135039482", "head": false, "next": "bc3f514c-4bed-521b-85a3-4e0edfdc3585", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -1648,6 +1889,9 @@ "flowchartId": "bc3f514c-4bed-521b-85a3-4e0edfdc3585", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -1659,14 +1903,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "bands", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -1675,27 +1927,31 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", - "contextProviders": [], - "executableName": "bands.x", - "name": "bands.in", - "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", + "contextProviders": [], + "executableName": "bands.x", + "name": "bands.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "28bb682d-d287-5beb-8a67-826449c474ee" + "context": [], + "next": "28bb682d-d287-5beb-8a67-826449c474ee", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -1710,6 +1966,9 @@ "flowchartId": "28bb682d-d287-5beb-8a67-826449c474ee", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -1721,14 +1980,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "pp.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "pp_electrostatic_potential", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pp.x", "input": [ @@ -1737,28 +2004,31 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "results": [], - "name": "pp_electrostatic_potential", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", - "contextProviders": [], - "executableName": "pp.x", - "name": "pp_electrostatic_potential.in", - "rendered": "&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", + "contextProviders": [], + "executableName": "pp.x", + "name": "pp_electrostatic_potential.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "average-electrostatic-potential-right" + "context": [], + "next": "average-electrostatic-potential-right", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -1777,6 +2047,9 @@ "flowchartId": "average-electrostatic-potential-right", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -1788,14 +2061,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "average.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "average_potential", + "results": [ + { + "name": "average_potential_profile" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "average.x", "input": [ @@ -1804,30 +2089,31 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "average_potential_profile" + { + "name": "standard_output" + } ], - "name": "average_potential", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", - "contextProviders": [], - "executableName": "average.x", - "name": "average.in", - "rendered": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", + "contextProviders": [], + "executableName": "average.x", + "name": "average.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "c6c11873-91d7-5422-8302-3dcc1ce971e9" + "context": [], + "next": "c6c11873-91d7-5422-8302-3dcc1ce971e9", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Set Macroscopically Averaged ESP Data", @@ -1840,23 +2126,21 @@ "scope": "average-electrostatic-potential-right" } ], + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "c6c11873-91d7-5422-8302-3dcc1ce971e9", "tags": [], + "flowchartId": "c6c11873-91d7-5422-8302-3dcc1ce971e9", "head": false, - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false }, { "_id": "736295e8-2ee0-5974-83bc-362061ac0688", @@ -1894,6 +2178,9 @@ "flowchartId": "python-find-extrema-right", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -1904,14 +2191,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "generic:processing:find_extrema:scipy", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -1925,36 +2220,43 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "generic:processing:find_extrema:scipy", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "python", - "content": "# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n", - "contextProviders": [], - "executableName": "python", - "name": "find_extrema.py", - "rendered": "# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\nY = np.array({{array_from_context}})\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n", + "contextProviders": [], + "executableName": "python", + "name": "find_extrema.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "8fce780b-5555-5b73-b3d1-1bb24a4c759d" + "context": [], + "next": "8fce780b-5555-5b73-b3d1-1bb24a4c759d", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Set Average ESP Value", @@ -1967,22 +2269,21 @@ "scope": "python-find-extrema-right" } ], + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "8fce780b-5555-5b73-b3d1-1bb24a4c759d", "tags": [], + "flowchartId": "8fce780b-5555-5b73-b3d1-1bb24a4c759d", "head": false, - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false }, { "_id": "1b70e606-a7ee-599e-89e0-91a7dc5faa4a", @@ -2015,21 +2316,18 @@ "operand": "VBM_DIFF", "value": "VBM_LEFT - VBM_RIGHT", "input": [], + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "bd4eaa98-b001-5694-87ef-ec77540502ab", "tags": [], + "flowchartId": "bd4eaa98-b001-5694-87ef-ec77540502ab", "head": true, "next": "2626f7bb-d392-5fd4-ab71-329b508de347", - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Difference of macroscopically averaged ESP in bulk", @@ -2037,21 +2335,18 @@ "operand": "AVG_ESP_DIFF", "value": "AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]", "input": [], + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "2626f7bb-d392-5fd4-ab71-329b508de347", "tags": [], + "flowchartId": "2626f7bb-d392-5fd4-ab71-329b508de347", "head": false, "next": "b7307787-53e2-599b-ad12-d627b04074b4", - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Lineup of macroscopically averaged ESP in interface", @@ -2059,21 +2354,18 @@ "operand": "ESP_LINEUP", "value": "np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])", "input": [], + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "b7307787-53e2-599b-ad12-d627b04074b4", "tags": [], + "flowchartId": "b7307787-53e2-599b-ad12-d627b04074b4", "head": false, "next": "197f4b4d-cb7b-57be-a885-d44cb1f61905", - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Valence Band Offset", @@ -2086,100 +2378,124 @@ "name": "valence_band_offset" } ], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "197f4b4d-cb7b-57be-a885-d44cb1f61905", "tags": [], + "flowchartId": "197f4b4d-cb7b-57be-a885-d44cb1f61905", "head": false, - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } ], "units": [ { - "name": "BS + Avg ESP (Interface)", - "type": "subworkflow", "_id": "9c65d03e-6a30-58f3-947a-f174342be0c3", - "status": "idle", - "statusTrack": [], + "type": "subworkflow", + "name": "BS + Avg ESP (Interface)", + "preProcessors": [], + "postProcessors": [], + "monitors": [], + "results": [], "flowchartId": "fd622b5c-5c02-594e-b582-b245c17ca9a4", - "tags": [], - "head": true, - "next": "ad3b1e4c-5965-5605-a067-dd0c59907c4b" + "schemaVersion": "2022.8.16", + "isDefault": false }, { - "name": "Find ESP Values (Interface)", "type": "subworkflow", - "_id": "ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7", + "name": "Find ESP Values (Interface)", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "ad3b1e4c-5965-5605-a067-dd0c59907c4b", "tags": [], - "head": false, - "next": "8d5b4734-edfd-55cc-ad80-aaa72487398d" + "_id": "ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7", + "flowchartId": "ad3b1e4c-5965-5605-a067-dd0c59907c4b", + "schemaVersion": "2022.8.16", + "isDefault": false }, { - "name": "BS + Avg ESP (interface left)", "type": "subworkflow", - "_id": "ba46d9b4-610f-537e-ae39-e39ce5240cda", + "name": "BS + Avg ESP (interface left)", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "8d5b4734-edfd-55cc-ad80-aaa72487398d", "tags": [], - "head": false, - "next": "102ec582-5b75-52f5-8b39-19ca725ed47a" + "_id": "ba46d9b4-610f-537e-ae39-e39ce5240cda", + "flowchartId": "8d5b4734-edfd-55cc-ad80-aaa72487398d", + "schemaVersion": "2022.8.16", + "isDefault": false }, { - "name": "Find ESP Value (Interface left)", "type": "subworkflow", - "_id": "6c303926-905c-5749-81d5-2d2964fdf09a", + "name": "Find ESP Value (Interface left)", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "102ec582-5b75-52f5-8b39-19ca725ed47a", "tags": [], - "head": false, - "next": "603c45db-93aa-54ce-a7fe-6e9b65b0037d" + "_id": "6c303926-905c-5749-81d5-2d2964fdf09a", + "flowchartId": "102ec582-5b75-52f5-8b39-19ca725ed47a", + "schemaVersion": "2022.8.16", + "isDefault": false }, { - "name": "BS + Avg ESP (interface right)", "type": "subworkflow", - "_id": "aa611fe8-1e6a-5e5c-976a-f64bfaaaace9", + "name": "BS + Avg ESP (interface right)", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "603c45db-93aa-54ce-a7fe-6e9b65b0037d", "tags": [], - "head": false, - "next": "e3444d35-cc41-59f5-8481-78d0c383b84e" + "_id": "aa611fe8-1e6a-5e5c-976a-f64bfaaaace9", + "flowchartId": "603c45db-93aa-54ce-a7fe-6e9b65b0037d", + "schemaVersion": "2022.8.16", + "isDefault": false }, { - "name": "Find ESP Value (Interface right)", "type": "subworkflow", - "_id": "736295e8-2ee0-5974-83bc-362061ac0688", + "name": "Find ESP Value (Interface right)", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "e3444d35-cc41-59f5-8481-78d0c383b84e", "tags": [], - "head": false, - "next": "0e0b141a-39ca-52bc-9094-e5f96dc72f39" + "_id": "736295e8-2ee0-5974-83bc-362061ac0688", + "flowchartId": "e3444d35-cc41-59f5-8481-78d0c383b84e", + "schemaVersion": "2022.8.16", + "isDefault": false }, { - "name": "Calculate VBO", "type": "subworkflow", - "_id": "1b70e606-a7ee-599e-89e0-91a7dc5faa4a", + "name": "Calculate VBO", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "0e0b141a-39ca-52bc-9094-e5f96dc72f39", "tags": [], - "head": false + "_id": "1b70e606-a7ee-599e-89e0-91a7dc5faa4a", + "flowchartId": "0e0b141a-39ca-52bc-9094-e5f96dc72f39", + "schemaVersion": "2022.8.16", + "isDefault": false } ], "properties": [ @@ -2193,7 +2509,6 @@ "total_energy_contributions", "total_force" ], - "_id": "d8e08cac-7747-50aa-b925-41f214d722c6", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, diff --git a/data/workflows/workflows/espresso/variable_cell_relaxation.json b/data/workflows/workflows/espresso/variable_cell_relaxation.json index 1022f84d..9480dc9a 100644 --- a/data/workflows/workflows/espresso/variable_cell_relaxation.json +++ b/data/workflows/workflows/espresso/variable_cell_relaxation.json @@ -1,5 +1,6 @@ { "name": "Variable-cell Relaxation", + "_id": "c45dcef1-d16b-59d1-9318-cedd0b1acf08", "subworkflows": [ { "systemName": "espresso-variable-cell-relaxation", @@ -16,13 +17,13 @@ "schemaVersion": "2022.8.16" }, "properties": [ - "total_energy", + "atomic_forces", "fermi_energy", + "final_structure", "pressure", - "atomic_forces", - "total_force", "stress_tensor", - "final_structure" + "total_energy", + "total_force" ], "model": { "type": "dft", @@ -32,11 +33,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -80,6 +77,9 @@ "flowchartId": "e1bd0870-6245-5fc2-a50d-48cabc356ac8", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -91,20 +91,55 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_vc-relax", + "results": [ + { + "name": "total_energy" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "atomic_forces" + }, + { + "name": "total_force" + }, + { + "name": "stress_tensor" + }, + { + "name": "final_structure" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -113,61 +148,64 @@ } ], "monitors": [ - "standard_output", - "convergence_electronic", - "convergence_ionic" - ], - "results": [ - "total_energy", - "fermi_energy", - "pressure", - "atomic_forces", - "total_force", - "stress_tensor", - "final_structure" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + }, + { + "name": "convergence_ionic" + } ], - "name": "pw_vc-relax", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_vc_relax.in", - "rendered": "&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_vc_relax.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } ], "units": [ { - "name": "Variable-cell Relaxation", - "type": "subworkflow", "_id": "58709c44-47f6-5fbf-bf2e-358b9d98f75d", - "status": "idle", - "statusTrack": [], + "type": "subworkflow", + "name": "Variable-cell Relaxation", + "preProcessors": [], + "postProcessors": [], + "monitors": [], + "results": [], "flowchartId": "8f6e9590-6a87-584b-abd7-1fb98253054c", - "tags": [], - "head": true + "schemaVersion": "2022.8.16", + "isDefault": false } ], "properties": [ @@ -179,7 +217,6 @@ "total_energy", "total_force" ], - "_id": "c45dcef1-d16b-59d1-9318-cedd0b1acf08", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, diff --git a/data/workflows/workflows/espresso/wavefunction_amplitude.json b/data/workflows/workflows/espresso/wavefunction_amplitude.json index 491a41a3..56d31737 100644 --- a/data/workflows/workflows/espresso/wavefunction_amplitude.json +++ b/data/workflows/workflows/espresso/wavefunction_amplitude.json @@ -1,5 +1,6 @@ { "name": "Wavefunction Amplitude", + "_id": "196d364a-5a30-549b-a898-8b9704b50ff1", "subworkflows": [ { "_id": "6a670ac8-6c12-5285-a6f8-9bf579fc88ee", @@ -33,11 +34,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -81,6 +78,9 @@ "flowchartId": "pw-scf", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -92,20 +92,55 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_scf", + "results": [ + { + "name": "atomic_forces" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "stress_tensor" + }, + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "total_force" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -115,46 +150,43 @@ ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "atomic_forces", - "fermi_energy", - "pressure", - "stress_tensor", - "total_energy", - "total_energy_contributions", - "total_force" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "pw_scf", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_scf.in", - "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_scf.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "extract-band-energies" + "context": [], + "next": "extract-band-energies", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Extract Band Energies", @@ -167,22 +199,18 @@ "scope": "pw-scf" } ], - "flowchartId": "extract-band-energies", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "extract-band-energies", "head": false, "next": "indices-below-fermi", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Find Indices Below Fermi", @@ -195,22 +223,18 @@ "scope": "pw-scf" } ], - "flowchartId": "indices-below-fermi", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "indices-below-fermi", "head": false, "next": "8771dc7f-878e-5f13-a840-a3a416854f1e", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Store Band Below EF", @@ -218,22 +242,18 @@ "operand": "KBAND_VALUE_BELOW_EF", "value": "indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1", "input": [], + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "8771dc7f-878e-5f13-a840-a3a416854f1e", "tags": [], + "flowchartId": "8771dc7f-878e-5f13-a840-a3a416854f1e", "head": false, "next": "57a07d7d-3f68-5f31-97ad-ebe8c5593cd2", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Select Band", @@ -241,22 +261,18 @@ "operand": "KBAND_VALUE", "value": "KBAND_VALUE_BELOW_EF", "input": [], + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "57a07d7d-3f68-5f31-97ad-ebe8c5593cd2", "tags": [], + "flowchartId": "57a07d7d-3f68-5f31-97ad-ebe8c5593cd2", "head": false, "next": "pp-wfn", - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -275,6 +291,9 @@ "flowchartId": "pp-wfn", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -286,14 +305,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "pp.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "pp_wfn", + "results": [ + { + "name": "wavefunction_amplitude" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pp.x", "input": [ @@ -302,31 +333,34 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "wavefunction_amplitude" + { + "name": "standard_output" + } ], - "name": "pp_wfn", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n", - "contextProviders": [], - "executableName": "pp.x", - "name": "pp_wfn.in", - "rendered": "&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {{ KBAND_VALUE | default(1) }}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = NaN\n nx = 200\n/\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n", + "contextProviders": [], + "executableName": "pp.x", + "name": "pp_wfn.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false }, { "_id": "e4ec581f-1cb3-5036-b698-999a96711559", @@ -359,9 +393,7 @@ "head": true, "results": [ { - "name": "file_content", - "basename": "wf_r.png", - "filetype": "image" + "name": "file_content" } ], "monitors": [ @@ -372,6 +404,9 @@ "flowchartId": "57fca898-8e8b-5ef2-81a5-9d2b612bc18d", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -382,14 +417,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "plot_wavefunction", + "results": [ + { + "name": "file_content" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -403,65 +450,75 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ { - "name": "file_content" + "name": "standard_output" } ], - "name": "plot_wavefunction", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "python", - "content": "# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n", - "contextProviders": [], - "executableName": "python", - "name": "script.py", - "rendered": "# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n", + "contextProviders": [], + "executableName": "python", + "name": "script.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } ], "units": [ { - "name": "Wavefunction Amplitude", - "type": "subworkflow", "_id": "6a670ac8-6c12-5285-a6f8-9bf579fc88ee", - "status": "idle", - "statusTrack": [], + "type": "subworkflow", + "name": "Wavefunction Amplitude", + "preProcessors": [], + "postProcessors": [], + "monitors": [], + "results": [], "flowchartId": "36467db9-279f-52a3-a6ef-ffdc26d875ed", - "tags": [], - "head": true, - "next": "4ce49281-e731-550e-af66-6d2408db8237" + "schemaVersion": "2022.8.16", + "isDefault": false }, { - "name": "Plot Wavefunction", "type": "subworkflow", - "_id": "e4ec581f-1cb3-5036-b698-999a96711559", + "name": "Plot Wavefunction", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "4ce49281-e731-550e-af66-6d2408db8237", "tags": [], - "head": false + "_id": "e4ec581f-1cb3-5036-b698-999a96711559", + "flowchartId": "4ce49281-e731-550e-af66-6d2408db8237", + "schemaVersion": "2022.8.16", + "isDefault": false } ], "properties": [ @@ -475,7 +532,6 @@ "total_force", "wavefunction_amplitude" ], - "_id": "196d364a-5a30-549b-a898-8b9704b50ff1", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, diff --git a/data/workflows/workflows/espresso/zero_point_energy.json b/data/workflows/workflows/espresso/zero_point_energy.json index 28aeb4e6..7de8ca0e 100644 --- a/data/workflows/workflows/espresso/zero_point_energy.json +++ b/data/workflows/workflows/espresso/zero_point_energy.json @@ -1,5 +1,6 @@ { "name": "Zero Point Energy", + "_id": "3158c78d-58bb-5675-8c7f-6f2337061015", "subworkflows": [ { "_id": "151538cc-9e71-5269-8b9e-cb5977151227", @@ -32,11 +33,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -77,6 +74,9 @@ "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -88,20 +88,55 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "remove_non_zero_weight_kpoints" + } + ], "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pw_scf", + "results": [ + { + "name": "atomic_forces" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "stress_tensor" + }, + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "total_force" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -111,46 +146,43 @@ ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "atomic_forces", - "fermi_energy", - "pressure", - "stress_tensor", - "total_energy", - "total_energy_contributions", - "total_force" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "pw_scf", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_scf.in", - "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "QEPWXInputDataManager" + }, + { + "name": "PlanewaveCutoffDataManager" + } + ], + "executableName": "pw.x", + "name": "pw_scf.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "107595d1-490f-53a2-8432-7f8a12f14d96" + "context": [], + "next": "107595d1-490f-53a2-8432-7f8a12f14d96", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -169,6 +201,9 @@ "flowchartId": "107595d1-490f-53a2-8432-7f8a12f14d96", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -180,14 +215,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "name": "ph_gamma", + "results": [ + { + "name": "zero_point_energy" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "espresso", "executableName": "ph.x", "input": [ @@ -196,43 +243,48 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "zero_point_energy" + { + "name": "standard_output" + } ], - "name": "ph_gamma", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "espresso", - "content": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n", - "contextProviders": [], - "executableName": "ph.x", - "name": "ph_gamma.in", - "rendered": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n/\n0 0 0\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "espresso", + "content": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n", + "contextProviders": [], + "executableName": "ph.x", + "name": "ph_gamma.in", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } ], "units": [ { - "name": "Zero Point Energy", - "type": "subworkflow", "_id": "151538cc-9e71-5269-8b9e-cb5977151227", - "status": "idle", - "statusTrack": [], + "type": "subworkflow", + "name": "Zero Point Energy", + "preProcessors": [], + "postProcessors": [], + "monitors": [], + "results": [], "flowchartId": "d906bd20-eb92-5a01-a0e2-c81a2d9b2a41", - "tags": [], - "head": true + "schemaVersion": "2022.8.16", + "isDefault": false } ], "properties": [ @@ -245,7 +297,6 @@ "total_force", "zero_point_energy" ], - "_id": "3158c78d-58bb-5675-8c7f-6f2337061015", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, diff --git a/data/workflows/workflows/nwchem/total_energy.json b/data/workflows/workflows/nwchem/total_energy.json index 739bd816..c9aa27cf 100644 --- a/data/workflows/workflows/nwchem/total_energy.json +++ b/data/workflows/workflows/nwchem/total_energy.json @@ -1,5 +1,6 @@ { "name": "Total Energy", + "_id": "937fbac8-2dec-5fb1-a46f-b8a0cc3d3d05", "subworkflows": [ { "_id": "9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13", @@ -25,11 +26,7 @@ "subtype": "pople", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -52,6 +49,9 @@ "flowchartId": "6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "nwchem", "shortName": "nwchem", @@ -62,18 +62,34 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "error_handler" + } + ], "hasAdvancedComputeOptions": false, "isDefault": true, "monitors": [ - "standard_output" - ], - "postProcessors": [ - "error_handler" + { + "name": "standard_output" + } ], "name": "nwchem", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "nwchem_total_energy", + "results": [ + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "nwchem", "executableName": "nwchem", "input": [ @@ -83,54 +99,57 @@ ], "isDefault": true, "monitors": [ - "standard_output" - ], - "results": [ - "total_energy", - "total_energy_contributions" + { + "name": "standard_output" + } ], - "name": "nwchem_total_energy", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "nwchem", - "content": " start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n", - "contextProviders": [ - { - "name": "NWChemInputDataManager" - } - ], - "executableName": "nwchem", - "name": "nwchem_total_energy.inp", - "rendered": " start nwchem\n title \"Test\"\n charge 0\n geometry units au noautosym\n Si 0.000000000 0.000000000 0.000000000 \nSi 1.116306745 0.789348070 1.933500000 \n end\n basis\n * library 6-31G\n end\n dft\n xc B3LYP\n mult 1\n end\n task dft energy\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "nwchem", + "content": " start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n", + "contextProviders": [ + { + "name": "NWChemInputDataManager" + } + ], + "executableName": "nwchem", + "name": "nwchem_total_energy.inp", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } ], "units": [ { - "name": "Total Energy", - "type": "subworkflow", "_id": "9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13", - "status": "idle", - "statusTrack": [], + "type": "subworkflow", + "name": "Total Energy", + "preProcessors": [], + "postProcessors": [], + "monitors": [], + "results": [], "flowchartId": "6059d61a-6a92-5657-9130-02208639aff8", - "tags": [], - "head": true + "schemaVersion": "2022.8.16", + "isDefault": false } ], "properties": [ "total_energy", "total_energy_contributions" ], - "_id": "937fbac8-2dec-5fb1-a46f-b8a0cc3d3d05", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, diff --git a/data/workflows/workflows/python/ml/classification_workflow.json b/data/workflows/workflows/python/ml/classification_workflow.json index 596ab67c..70084e60 100644 --- a/data/workflows/workflows/python/ml/classification_workflow.json +++ b/data/workflows/workflows/python/ml/classification_workflow.json @@ -1,5 +1,6 @@ { "name": "Python ML Train Classification", + "_id": "f447c6df-3b7b-5b8e-a0cc-1a743847ceed", "subworkflows": [ { "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", @@ -30,32 +31,37 @@ "operand": "IS_WORKFLOW_RUNNING_TO_PREDICT", "value": "False", "input": [], - "flowchartId": "head-set-predict-status", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], "tags": [ "pyml:workflow-type-setter" ], - "status": "idle", - "statusTrack": [], + "flowchartId": "head-set-predict-status", "head": true, "next": "head-fetch-training-data", - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Fetch Dataset", "type": "io", "subtype": "input", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "enableRender": true, "flowchartId": "head-fetch-training-data", "input": [ { + "type": "object_storage", "basename": "{{DATASET_BASENAME}}", "objectData": { "CONTAINER": "", @@ -66,20 +72,10 @@ } ], "source": "object_storage", - "status": "idle", - "statusTrack": [], - "tags": [], "head": false, "next": "head-branch-on-predict-status", - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Train or Predict?", @@ -90,37 +86,41 @@ "scope": "global" } ], + "statement": "IS_WORKFLOW_RUNNING_TO_PREDICT", + "maxOccurrences": 100, "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "then": "head-fetch-trained-model", - "else": "end-of-ml-train-head", - "statement": "IS_WORKFLOW_RUNNING_TO_PREDICT", - "maxOccurrences": 100, - "flowchartId": "head-branch-on-predict-status", "status": "idle", "statusTrack": [], "tags": [], + "else": "end-of-ml-train-head", + "flowchartId": "head-branch-on-predict-status", + "then": "head-fetch-trained-model", "head": false, "next": "head-fetch-trained-model", - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Fetch Trained Model as file", "type": "io", "subtype": "input", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [ + "set-io-unit-filenames" + ], "enableRender": true, "flowchartId": "head-fetch-trained-model", "input": [ { + "type": "object_storage", "basename": "", "objectData": { "CONTAINER": "", @@ -131,22 +131,10 @@ } ], "source": "object_storage", - "tags": [ - "set-io-unit-filenames" - ], - "status": "idle", - "statusTrack": [], "head": false, "next": "end-of-ml-train-head", - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "End Setup", @@ -154,22 +142,21 @@ "operand": "IS_SETUP_COMPLETE", "value": "True", "input": [], - "flowchartId": "end-of-ml-train-head", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "end-of-ml-train-head", "head": false, - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false }, { "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", @@ -184,8 +171,8 @@ "schemaVersion": "2022.8.16" }, "properties": [ - "workflow:pyml_predict", - "file_content" + "file_content", + "workflow:pyml_predict" ], "model": { "type": "unknown", @@ -210,6 +197,9 @@ "flowchartId": "c3608488-0259-5ff4-8b90-11c6e60d6c85", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -220,14 +210,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:setup_variables_packages", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -241,41 +239,48 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "pyml:setup_variables_packages", "schemaVersion": "2022.8.16", "isDefault": false }, - "enableRender": true, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", - "contextProviders": [ - { - "name": "MLSettingsDataManager" - } - ], - "executableName": "python", - "name": "settings.py", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", + "contextProviders": [ + { + "name": "MLSettingsDataManager" + } + ], + "executableName": "python", + "name": "settings.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3" + "context": [], + "enableRender": true, + "next": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -290,6 +295,9 @@ "flowchartId": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -300,14 +308,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:data_input:read_csv:pandas", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -321,36 +337,43 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "pyml:data_input:read_csv:pandas", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", - "contextProviders": [], - "executableName": "python", - "name": "data_input_read_csv_pandas.py", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", + "contextProviders": [], + "executableName": "python", + "name": "data_input_read_csv_pandas.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "7fff5212-6c6d-586b-9997-4d4485e09383" + "context": [], + "next": "7fff5212-6c6d-586b-9997-4d4485e09383", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -365,6 +388,9 @@ "flowchartId": "7fff5212-6c6d-586b-9997-4d4485e09383", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -375,14 +401,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:data_input:train_test_split:sklearn", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -396,40 +430,47 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "pyml:data_input:train_test_split:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", - "contextProviders": [ - { - "name": "MLTrainTestSplitDataManager" - } - ], - "executableName": "python", - "name": "data_input_train_test_split_sklearn.py", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", + "contextProviders": [ + { + "name": "MLTrainTestSplitDataManager" + } + ], + "executableName": "python", + "name": "data_input_train_test_split_sklearn.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "799de7dc-9394-571b-8e0d-3ff876a3df02" + "context": [], + "next": "799de7dc-9394-571b-8e0d-3ff876a3df02", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -444,6 +485,9 @@ "flowchartId": "799de7dc-9394-571b-8e0d-3ff876a3df02", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -454,14 +498,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:pre_processing:standardization:sklearn", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -475,36 +527,43 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "pyml:pre_processing:standardization:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", - "contextProviders": [], - "executableName": "python", - "name": "pre_processing_standardization_sklearn.py", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", + "contextProviders": [], + "executableName": "python", + "name": "pre_processing_standardization_sklearn.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "8dfc61c3-067d-5ea8-bd26-7296628d707a" + "context": [], + "next": "8dfc61c3-067d-5ea8-bd26-7296628d707a", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -523,6 +582,12 @@ "flowchartId": "8dfc61c3-067d-5ea8-bd26-7296628d707a", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [ + "remove-all-results", + "creates-predictions-csv-during-predict-phase" + ], "application": { "name": "python", "shortName": "py", @@ -533,14 +598,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:model:random_forest_classification:sklearn", + "results": [ + { + "name": "workflow:pyml_predict" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -554,42 +631,43 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "workflow:pyml_predict" + { + "name": "standard_output" + } ], - "name": "pyml:model:random_forest_classification:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, - "tags": [ - "remove-all-results", - "creates-predictions-csv-during-predict-phase" - ], - "status": "idle", - "statusTrack": [], "input": [ { - "applicationName": "python", - "content": "# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", - "contextProviders": [], - "executableName": "python", - "name": "model_random_forest_classification_sklearn.py", - "rendered": "# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", + "contextProviders": [], + "executableName": "python", + "name": "model_random_forest_classification_sklearn.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "35436b4a-cd9c-5089-ab42-665c4f9ba049" + "context": [], + "next": "35436b4a-cd9c-5089-ab42-665c4f9ba049", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -597,8 +675,6 @@ "head": false, "results": [ { - "basename": "my_roc_plot.png", - "filetype": "image", "name": "file_content" } ], @@ -614,6 +690,11 @@ "name": "remove_virtual_environment" } ], + "status": "idle", + "statusTrack": [], + "tags": [ + "remove-all-results" + ], "application": { "name": "python", "shortName": "py", @@ -624,14 +705,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:post_processing:roc_curve:sklearn", + "results": [ + { + "name": "file_content" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -645,71 +738,79 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "file_content" + { + "name": "standard_output" + } ], - "name": "pyml:post_processing:roc_curve:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, - "tags": [ - "remove-all-results" - ], - "status": "idle", - "statusTrack": [], "input": [ { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", - "contextProviders": [], - "executableName": "python", - "name": "post_processing_roc_curve_sklearn.py", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", + "contextProviders": [], + "executableName": "python", + "name": "post_processing_roc_curve_sklearn.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } ], "units": [ { - "name": "Set Up the Job", - "type": "subworkflow", "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", - "status": "idle", - "statusTrack": [], + "type": "subworkflow", + "name": "Set Up the Job", + "preProcessors": [], + "postProcessors": [], + "monitors": [], + "results": [], "flowchartId": "5b51df93-15dd-5440-90fd-a3ffa264b7d8", - "tags": [], - "head": true, - "next": "90738aae-daac-599f-913f-29fb6acdff00" + "schemaVersion": "2022.8.16", + "isDefault": false }, { - "name": "Machine Learning", "type": "subworkflow", - "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", + "name": "Machine Learning", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "90738aae-daac-599f-913f-29fb6acdff00", "tags": [], - "head": false + "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", + "flowchartId": "90738aae-daac-599f-913f-29fb6acdff00", + "schemaVersion": "2022.8.16", + "isDefault": false } ], "properties": [], - "_id": "f447c6df-3b7b-5b8e-a0cc-1a743847ceed", "workflows": [], - "isUsingDataset": true, "schemaVersion": "2022.8.16", "isDefault": false, "application": { diff --git a/data/workflows/workflows/python/ml/clustering_workflow.json b/data/workflows/workflows/python/ml/clustering_workflow.json index 0a88b7a8..024a5f5b 100644 --- a/data/workflows/workflows/python/ml/clustering_workflow.json +++ b/data/workflows/workflows/python/ml/clustering_workflow.json @@ -1,5 +1,6 @@ { "name": "Python ML Train Clustering", + "_id": "f447c6df-3b7b-5b8e-a0cc-1a743847ceed", "subworkflows": [ { "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", @@ -30,32 +31,37 @@ "operand": "IS_WORKFLOW_RUNNING_TO_PREDICT", "value": "False", "input": [], - "flowchartId": "head-set-predict-status", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], "tags": [ "pyml:workflow-type-setter" ], - "status": "idle", - "statusTrack": [], + "flowchartId": "head-set-predict-status", "head": true, "next": "head-fetch-training-data", - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Fetch Dataset", "type": "io", "subtype": "input", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "enableRender": true, "flowchartId": "head-fetch-training-data", "input": [ { + "type": "object_storage", "basename": "{{DATASET_BASENAME}}", "objectData": { "CONTAINER": "", @@ -66,20 +72,10 @@ } ], "source": "object_storage", - "status": "idle", - "statusTrack": [], - "tags": [], "head": false, "next": "head-branch-on-predict-status", - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Train or Predict?", @@ -90,37 +86,41 @@ "scope": "global" } ], + "statement": "IS_WORKFLOW_RUNNING_TO_PREDICT", + "maxOccurrences": 100, "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "then": "head-fetch-trained-model", - "else": "end-of-ml-train-head", - "statement": "IS_WORKFLOW_RUNNING_TO_PREDICT", - "maxOccurrences": 100, - "flowchartId": "head-branch-on-predict-status", "status": "idle", "statusTrack": [], "tags": [], + "else": "end-of-ml-train-head", + "flowchartId": "head-branch-on-predict-status", + "then": "head-fetch-trained-model", "head": false, "next": "head-fetch-trained-model", - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Fetch Trained Model as file", "type": "io", "subtype": "input", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [ + "set-io-unit-filenames" + ], "enableRender": true, "flowchartId": "head-fetch-trained-model", "input": [ { + "type": "object_storage", "basename": "", "objectData": { "CONTAINER": "", @@ -131,22 +131,10 @@ } ], "source": "object_storage", - "tags": [ - "set-io-unit-filenames" - ], - "status": "idle", - "statusTrack": [], "head": false, "next": "end-of-ml-train-head", - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "End Setup", @@ -154,22 +142,21 @@ "operand": "IS_SETUP_COMPLETE", "value": "True", "input": [], - "flowchartId": "end-of-ml-train-head", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "end-of-ml-train-head", "head": false, - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false }, { "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", @@ -184,8 +171,8 @@ "schemaVersion": "2022.8.16" }, "properties": [ - "workflow:pyml_predict", - "file_content" + "file_content", + "workflow:pyml_predict" ], "model": { "type": "unknown", @@ -210,6 +197,9 @@ "flowchartId": "c3608488-0259-5ff4-8b90-11c6e60d6c85", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -220,14 +210,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:setup_variables_packages", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -241,41 +239,48 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "pyml:setup_variables_packages", "schemaVersion": "2022.8.16", "isDefault": false }, - "enableRender": true, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", - "contextProviders": [ - { - "name": "MLSettingsDataManager" - } - ], - "executableName": "python", - "name": "settings.py", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", + "contextProviders": [ + { + "name": "MLSettingsDataManager" + } + ], + "executableName": "python", + "name": "settings.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3" + "context": [], + "enableRender": true, + "next": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -290,6 +295,9 @@ "flowchartId": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -300,14 +308,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:data_input:read_csv:pandas", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -321,36 +337,43 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "pyml:data_input:read_csv:pandas", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", - "contextProviders": [], - "executableName": "python", - "name": "data_input_read_csv_pandas.py", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", + "contextProviders": [], + "executableName": "python", + "name": "data_input_read_csv_pandas.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "7fff5212-6c6d-586b-9997-4d4485e09383" + "context": [], + "next": "7fff5212-6c6d-586b-9997-4d4485e09383", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -365,6 +388,9 @@ "flowchartId": "7fff5212-6c6d-586b-9997-4d4485e09383", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -375,14 +401,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:data_input:train_test_split:sklearn", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -396,40 +430,47 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "pyml:data_input:train_test_split:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", - "contextProviders": [ - { - "name": "MLTrainTestSplitDataManager" - } - ], - "executableName": "python", - "name": "data_input_train_test_split_sklearn.py", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", + "contextProviders": [ + { + "name": "MLTrainTestSplitDataManager" + } + ], + "executableName": "python", + "name": "data_input_train_test_split_sklearn.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "799de7dc-9394-571b-8e0d-3ff876a3df02" + "context": [], + "next": "799de7dc-9394-571b-8e0d-3ff876a3df02", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -444,6 +485,9 @@ "flowchartId": "799de7dc-9394-571b-8e0d-3ff876a3df02", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -454,14 +498,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:pre_processing:standardization:sklearn", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -475,36 +527,43 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "pyml:pre_processing:standardization:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", - "contextProviders": [], - "executableName": "python", - "name": "pre_processing_standardization_sklearn.py", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", + "contextProviders": [], + "executableName": "python", + "name": "pre_processing_standardization_sklearn.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "8dfc61c3-067d-5ea8-bd26-7296628d707a" + "context": [], + "next": "8dfc61c3-067d-5ea8-bd26-7296628d707a", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -523,6 +582,12 @@ "flowchartId": "8dfc61c3-067d-5ea8-bd26-7296628d707a", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [ + "remove-all-results", + "creates-predictions-csv-during-predict-phase" + ], "application": { "name": "python", "shortName": "py", @@ -533,14 +598,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:model:random_forest_classification:sklearn", + "results": [ + { + "name": "workflow:pyml_predict" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -554,42 +631,43 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "workflow:pyml_predict" + { + "name": "standard_output" + } ], - "name": "pyml:model:random_forest_classification:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, - "tags": [ - "remove-all-results", - "creates-predictions-csv-during-predict-phase" - ], - "status": "idle", - "statusTrack": [], "input": [ { - "applicationName": "python", - "content": "# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", - "contextProviders": [], - "executableName": "python", - "name": "model_random_forest_classification_sklearn.py", - "rendered": "# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", + "contextProviders": [], + "executableName": "python", + "name": "model_random_forest_classification_sklearn.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "35436b4a-cd9c-5089-ab42-665c4f9ba049" + "context": [], + "next": "35436b4a-cd9c-5089-ab42-665c4f9ba049", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -597,8 +675,6 @@ "head": false, "results": [ { - "basename": "my_roc_plot.png", - "filetype": "image", "name": "file_content" } ], @@ -614,6 +690,11 @@ "name": "remove_virtual_environment" } ], + "status": "idle", + "statusTrack": [], + "tags": [ + "remove-all-results" + ], "application": { "name": "python", "shortName": "py", @@ -624,14 +705,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:post_processing:roc_curve:sklearn", + "results": [ + { + "name": "file_content" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -645,71 +738,79 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "file_content" + { + "name": "standard_output" + } ], - "name": "pyml:post_processing:roc_curve:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, - "tags": [ - "remove-all-results" - ], - "status": "idle", - "statusTrack": [], "input": [ { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", - "contextProviders": [], - "executableName": "python", - "name": "post_processing_roc_curve_sklearn.py", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", + "contextProviders": [], + "executableName": "python", + "name": "post_processing_roc_curve_sklearn.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } ], "units": [ { - "name": "Set Up the Job", - "type": "subworkflow", "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", - "status": "idle", - "statusTrack": [], + "type": "subworkflow", + "name": "Set Up the Job", + "preProcessors": [], + "postProcessors": [], + "monitors": [], + "results": [], "flowchartId": "5b51df93-15dd-5440-90fd-a3ffa264b7d8", - "tags": [], - "head": true, - "next": "90738aae-daac-599f-913f-29fb6acdff00" + "schemaVersion": "2022.8.16", + "isDefault": false }, { - "name": "Machine Learning", "type": "subworkflow", - "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", + "name": "Machine Learning", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "90738aae-daac-599f-913f-29fb6acdff00", "tags": [], - "head": false + "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", + "flowchartId": "90738aae-daac-599f-913f-29fb6acdff00", + "schemaVersion": "2022.8.16", + "isDefault": false } ], "properties": [], - "_id": "f447c6df-3b7b-5b8e-a0cc-1a743847ceed", "workflows": [], - "isUsingDataset": true, "schemaVersion": "2022.8.16", "isDefault": false, "application": { diff --git a/data/workflows/workflows/python/ml/regression_workflow.json b/data/workflows/workflows/python/ml/regression_workflow.json index 41a45b83..81ddba61 100644 --- a/data/workflows/workflows/python/ml/regression_workflow.json +++ b/data/workflows/workflows/python/ml/regression_workflow.json @@ -1,5 +1,6 @@ { "name": "Python ML Train Regression", + "_id": "f447c6df-3b7b-5b8e-a0cc-1a743847ceed", "subworkflows": [ { "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", @@ -30,32 +31,37 @@ "operand": "IS_WORKFLOW_RUNNING_TO_PREDICT", "value": "False", "input": [], - "flowchartId": "head-set-predict-status", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], "tags": [ "pyml:workflow-type-setter" ], - "status": "idle", - "statusTrack": [], + "flowchartId": "head-set-predict-status", "head": true, "next": "head-fetch-training-data", - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Fetch Dataset", "type": "io", "subtype": "input", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "enableRender": true, "flowchartId": "head-fetch-training-data", "input": [ { + "type": "object_storage", "basename": "{{DATASET_BASENAME}}", "objectData": { "CONTAINER": "", @@ -66,20 +72,10 @@ } ], "source": "object_storage", - "status": "idle", - "statusTrack": [], - "tags": [], "head": false, "next": "head-branch-on-predict-status", - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Train or Predict?", @@ -90,37 +86,41 @@ "scope": "global" } ], + "statement": "IS_WORKFLOW_RUNNING_TO_PREDICT", + "maxOccurrences": 100, "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "then": "head-fetch-trained-model", - "else": "end-of-ml-train-head", - "statement": "IS_WORKFLOW_RUNNING_TO_PREDICT", - "maxOccurrences": 100, - "flowchartId": "head-branch-on-predict-status", "status": "idle", "statusTrack": [], "tags": [], + "else": "end-of-ml-train-head", + "flowchartId": "head-branch-on-predict-status", + "then": "head-fetch-trained-model", "head": false, "next": "head-fetch-trained-model", - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Fetch Trained Model as file", "type": "io", "subtype": "input", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [ + "set-io-unit-filenames" + ], "enableRender": true, "flowchartId": "head-fetch-trained-model", "input": [ { + "type": "object_storage", "basename": "", "objectData": { "CONTAINER": "", @@ -131,22 +131,10 @@ } ], "source": "object_storage", - "tags": [ - "set-io-unit-filenames" - ], - "status": "idle", - "statusTrack": [], "head": false, "next": "end-of-ml-train-head", - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "End Setup", @@ -154,22 +142,21 @@ "operand": "IS_SETUP_COMPLETE", "value": "True", "input": [], - "flowchartId": "end-of-ml-train-head", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "end-of-ml-train-head", "head": false, - "application": { - "name": "python", - "shortName": "py", - "summary": "Python Script", - "build": "GNU", - "isDefault": true, - "version": "3.10.13", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false }, { "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", @@ -184,8 +171,8 @@ "schemaVersion": "2022.8.16" }, "properties": [ - "workflow:pyml_predict", - "file_content" + "file_content", + "workflow:pyml_predict" ], "model": { "type": "unknown", @@ -210,6 +197,9 @@ "flowchartId": "c3608488-0259-5ff4-8b90-11c6e60d6c85", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -220,14 +210,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:setup_variables_packages", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -241,41 +239,48 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "pyml:setup_variables_packages", "schemaVersion": "2022.8.16", "isDefault": false }, - "enableRender": true, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", - "contextProviders": [ - { - "name": "MLSettingsDataManager" - } - ], - "executableName": "python", - "name": "settings.py", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", + "contextProviders": [ + { + "name": "MLSettingsDataManager" + } + ], + "executableName": "python", + "name": "settings.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3" + "context": [], + "enableRender": true, + "next": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -290,6 +295,9 @@ "flowchartId": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -300,14 +308,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:data_input:read_csv:pandas", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -321,36 +337,43 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "pyml:data_input:read_csv:pandas", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", - "contextProviders": [], - "executableName": "python", - "name": "data_input_read_csv_pandas.py", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", + "contextProviders": [], + "executableName": "python", + "name": "data_input_read_csv_pandas.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "7fff5212-6c6d-586b-9997-4d4485e09383" + "context": [], + "next": "7fff5212-6c6d-586b-9997-4d4485e09383", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -365,6 +388,9 @@ "flowchartId": "7fff5212-6c6d-586b-9997-4d4485e09383", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -375,14 +401,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:data_input:train_test_split:sklearn", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -396,40 +430,47 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "pyml:data_input:train_test_split:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", - "contextProviders": [ - { - "name": "MLTrainTestSplitDataManager" - } - ], - "executableName": "python", - "name": "data_input_train_test_split_sklearn.py", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", + "contextProviders": [ + { + "name": "MLTrainTestSplitDataManager" + } + ], + "executableName": "python", + "name": "data_input_train_test_split_sklearn.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "799de7dc-9394-571b-8e0d-3ff876a3df02" + "context": [], + "next": "799de7dc-9394-571b-8e0d-3ff876a3df02", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -444,6 +485,9 @@ "flowchartId": "799de7dc-9394-571b-8e0d-3ff876a3df02", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -454,14 +498,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:pre_processing:standardization:sklearn", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -475,36 +527,43 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "pyml:pre_processing:standardization:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", - "contextProviders": [], - "executableName": "python", - "name": "pre_processing_standardization_sklearn.py", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", + "contextProviders": [], + "executableName": "python", + "name": "pre_processing_standardization_sklearn.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "8dfc61c3-067d-5ea8-bd26-7296628d707a" + "context": [], + "next": "8dfc61c3-067d-5ea8-bd26-7296628d707a", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -523,6 +582,12 @@ "flowchartId": "8dfc61c3-067d-5ea8-bd26-7296628d707a", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [ + "remove-all-results", + "creates-predictions-csv-during-predict-phase" + ], "application": { "name": "python", "shortName": "py", @@ -533,14 +598,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:model:multilayer_perceptron:sklearn", + "results": [ + { + "name": "workflow:pyml_predict" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -554,42 +631,43 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "workflow:pyml_predict" + { + "name": "standard_output" + } ], - "name": "pyml:model:multilayer_perceptron:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, - "tags": [ - "remove-all-results", - "creates-predictions-csv-during-predict-phase" - ], - "status": "idle", - "statusTrack": [], "input": [ { - "applicationName": "python", - "content": "# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", - "contextProviders": [], - "executableName": "python", - "name": "model_mlp_sklearn.py", - "rendered": "# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", + "contextProviders": [], + "executableName": "python", + "name": "model_mlp_sklearn.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "1ca76a49-a3c7-5fa2-b693-538b599ecd7c" + "context": [], + "next": "1ca76a49-a3c7-5fa2-b693-538b599ecd7c", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -597,8 +675,6 @@ "head": false, "results": [ { - "basename": "my_parity_plot.png", - "filetype": "image", "name": "file_content" } ], @@ -614,6 +690,11 @@ "name": "remove_virtual_environment" } ], + "status": "idle", + "statusTrack": [], + "tags": [ + "remove-all-results" + ], "application": { "name": "python", "shortName": "py", @@ -624,14 +705,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "pyml:post_processing:parity_plot:matplotlib", + "results": [ + { + "name": "file_content" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -645,71 +738,79 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ - "file_content" + { + "name": "standard_output" + } ], - "name": "pyml:post_processing:parity_plot:matplotlib", "schemaVersion": "2022.8.16", "isDefault": false }, - "tags": [ - "remove-all-results" - ], - "status": "idle", - "statusTrack": [], "input": [ { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", - "contextProviders": [], - "executableName": "python", - "name": "post_processing_parity_plot_matplotlib.py", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", + "contextProviders": [], + "executableName": "python", + "name": "post_processing_parity_plot_matplotlib.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } ], "units": [ { - "name": "Set Up the Job", - "type": "subworkflow", "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", - "status": "idle", - "statusTrack": [], + "type": "subworkflow", + "name": "Set Up the Job", + "preProcessors": [], + "postProcessors": [], + "monitors": [], + "results": [], "flowchartId": "5b51df93-15dd-5440-90fd-a3ffa264b7d8", - "tags": [], - "head": true, - "next": "90738aae-daac-599f-913f-29fb6acdff00" + "schemaVersion": "2022.8.16", + "isDefault": false }, { - "name": "Machine Learning", "type": "subworkflow", - "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", + "name": "Machine Learning", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "90738aae-daac-599f-913f-29fb6acdff00", "tags": [], - "head": false + "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", + "flowchartId": "90738aae-daac-599f-913f-29fb6acdff00", + "schemaVersion": "2022.8.16", + "isDefault": false } ], "properties": [], - "_id": "f447c6df-3b7b-5b8e-a0cc-1a743847ceed", "workflows": [], - "isUsingDataset": true, "schemaVersion": "2022.8.16", "isDefault": false, "application": { diff --git a/data/workflows/workflows/python/python_script.json b/data/workflows/workflows/python/python_script.json index 57173435..5a564dc0 100644 --- a/data/workflows/workflows/python/python_script.json +++ b/data/workflows/workflows/python/python_script.json @@ -1,5 +1,6 @@ { "name": "Python Script", + "_id": "de816646-766b-5f97-b468-0937d4381440", "subworkflows": [ { "_id": "64a079ba-7a12-57b7-ac06-310b2bf8d354", @@ -37,6 +38,9 @@ "flowchartId": "9b8a495e-1ac1-56a7-b2e0-af1b405a1219", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -47,14 +51,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "hello_world", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -68,52 +80,62 @@ ], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "hello_world", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "python", - "content": "# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n", - "contextProviders": [], - "executableName": "python", - "name": "script.py", - "rendered": "# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n", + "contextProviders": [], + "executableName": "python", + "name": "script.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "python", - "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n", - "contextProviders": [], - "executableName": "python", - "name": "requirements.txt", - "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "python", + "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n", + "contextProviders": [], + "executableName": "python", + "name": "requirements.txt", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } ], "units": [ { - "name": "Python Script", - "type": "subworkflow", "_id": "64a079ba-7a12-57b7-ac06-310b2bf8d354", - "status": "idle", - "statusTrack": [], + "type": "subworkflow", + "name": "Python Script", + "preProcessors": [], + "postProcessors": [], + "monitors": [], + "results": [], "flowchartId": "c50e28b2-a0c5-5324-8b6f-e99b5a546bd8", - "tags": [], - "head": true + "schemaVersion": "2022.8.16", + "isDefault": false } ], "properties": [], - "_id": "de816646-766b-5f97-b468-0937d4381440", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, diff --git a/data/workflows/workflows/shell/batch_espresso_pwscf.json b/data/workflows/workflows/shell/batch_espresso_pwscf.json index 83c46453..e6325829 100644 --- a/data/workflows/workflows/shell/batch_espresso_pwscf.json +++ b/data/workflows/workflows/shell/batch_espresso_pwscf.json @@ -1,5 +1,6 @@ { "name": "Shell Batch Job (Espresso PWSCF)", + "_id": "e0046fb4-37db-5732-bf81-c48e13081a4c", "subworkflows": [ { "_id": "f0775c7b-214a-5245-b921-5b4eb53d15a9", @@ -37,6 +38,9 @@ "flowchartId": "99304304-e873-5c89-ae83-91e61a7f629c", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "shell", "shortName": "sh", @@ -47,14 +51,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "job_espresso_pw_scf", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "shell", "executableName": "sh", "input": [ @@ -63,44 +75,51 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "job_espresso_pw_scf", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "shell", - "content": "#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n", - "contextProviders": [], - "executableName": "sh", - "name": "job_espresso_pw_scf.sh", - "rendered": "#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "shell", + "content": "#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n", + "contextProviders": [], + "executableName": "sh", + "name": "job_espresso_pw_scf.sh", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } ], "units": [ { - "name": "Shell Batch Job (Espresso PWSCF)", - "type": "subworkflow", "_id": "f0775c7b-214a-5245-b921-5b4eb53d15a9", - "status": "idle", - "statusTrack": [], + "type": "subworkflow", + "name": "Shell Batch Job (Espresso PWSCF)", + "preProcessors": [], + "postProcessors": [], + "monitors": [], + "results": [], "flowchartId": "d884e8f7-7acf-5a03-bc9a-186903bdaa0e", - "tags": [], - "head": true + "schemaVersion": "2022.8.16", + "isDefault": false } ], "properties": [], - "_id": "e0046fb4-37db-5732-bf81-c48e13081a4c", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, diff --git a/data/workflows/workflows/shell/hello_world.json b/data/workflows/workflows/shell/hello_world.json index e3db8d0c..a1e9a094 100644 --- a/data/workflows/workflows/shell/hello_world.json +++ b/data/workflows/workflows/shell/hello_world.json @@ -1,5 +1,6 @@ { "name": "Shell Script", + "_id": "d2fd444c-06b4-5d66-baeb-449c680ae1bf", "subworkflows": [ { "_id": "ce33d4cf-e0d2-5020-854d-9ea1fe5c8512", @@ -37,6 +38,9 @@ "flowchartId": "99304304-e873-5c89-ae83-91e61a7f629c", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "shell", "shortName": "sh", @@ -47,14 +51,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "hello_world", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "shell", "executableName": "sh", "input": [ @@ -64,43 +76,50 @@ ], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "hello_world", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "shell", - "content": "#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n", - "contextProviders": [], - "executableName": "sh", - "name": "hello_world.sh", - "rendered": "#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "shell", + "content": "#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n", + "contextProviders": [], + "executableName": "sh", + "name": "hello_world.sh", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } ], "units": [ { - "name": "Shell Hello World", - "type": "subworkflow", "_id": "ce33d4cf-e0d2-5020-854d-9ea1fe5c8512", - "status": "idle", - "statusTrack": [], + "type": "subworkflow", + "name": "Shell Hello World", + "preProcessors": [], + "postProcessors": [], + "monitors": [], + "results": [], "flowchartId": "319307c2-bf22-5bf2-b4e9-a4cdf671b786", - "tags": [], - "head": true + "schemaVersion": "2022.8.16", + "isDefault": false } ], "properties": [], - "_id": "d2fd444c-06b4-5d66-baeb-449c680ae1bf", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, diff --git a/data/workflows/workflows/vasp/band_gap.json b/data/workflows/workflows/vasp/band_gap.json index 5a53ede3..b61e6025 100644 --- a/data/workflows/workflows/vasp/band_gap.json +++ b/data/workflows/workflows/vasp/band_gap.json @@ -1,5 +1,6 @@ { "name": "Band Gap", + "_id": "1a358471-0a73-5fcb-ad3c-7a8079029c86", "subworkflows": [ { "_id": "e65f2461-5f5c-5a51-8c48-88ad37bff100", @@ -15,15 +16,14 @@ "schemaVersion": "2022.8.16" }, "properties": [ - "total_energy", - "total_energy_contributions", - "pressure", - "fermi_energy", "atomic_forces", - "total_force", - "stress_tensor", "band_gaps", - "fermi_energy" + "fermi_energy", + "pressure", + "stress_tensor", + "total_energy", + "total_energy_contributions", + "total_force" ], "model": { "type": "dft", @@ -33,11 +33,7 @@ "subtype": "paw", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -78,6 +74,9 @@ "flowchartId": "9cb87769-bf20-56bf-a8b3-5a164e3bf541", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "isLicensed": true, "name": "vasp", @@ -89,21 +88,60 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "error_handler" + }, + { + "name": "prepare_restart" + }, + { + "name": "remove_non_zero_weight_kpoints" + } + ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "error_handler", - "prepare_restart", - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "vasp", + "results": [ + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "pressure" + }, + { + "name": "fermi_energy" + }, + { + "name": "atomic_forces" + }, + { + "name": "total_force" + }, + { + "name": "stress_tensor" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -119,69 +157,72 @@ ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "total_energy", - "total_energy_contributions", - "pressure", - "fermi_energy", - "atomic_forces", - "total_force", - "stress_tensor" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "vasp", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "vasp", - "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "INCAR", - "rendered": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "INCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "KPOINTS", - "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "KPOINTS", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "{{ input.POSCAR }}\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "POSCAR", - "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "{{ input.POSCAR }}\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "POSCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "f0d65517-9592-5bc8-948e-a0851a766cbb" + "context": [], + "next": "f0d65517-9592-5bc8-948e-a0851a766cbb", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -206,6 +247,9 @@ "flowchartId": "f0d65517-9592-5bc8-948e-a0851a766cbb", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "isLicensed": true, "name": "vasp", @@ -217,21 +261,45 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "error_handler" + }, + { + "name": "prepare_restart" + }, + { + "name": "remove_non_zero_weight_kpoints" + } + ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "error_handler", - "prepare_restart", - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "vasp_nscf", + "results": [ + { + "name": "band_gaps" + }, + { + "name": "fermi_energy" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -249,92 +317,102 @@ } ], "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "band_gaps", - "fermi_energy" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "vasp_nscf", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "vasp", - "content": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "INCAR", - "rendered": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "INCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "KPOINTS", - "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "KPOINTS", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "{{ input.POSCAR }}\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "POSCAR", - "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "{{ input.POSCAR }}\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "POSCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } ], "units": [ { - "name": "Band Gap", - "type": "subworkflow", "_id": "e65f2461-5f5c-5a51-8c48-88ad37bff100", - "status": "idle", - "statusTrack": [], + "type": "subworkflow", + "name": "Band Gap", + "preProcessors": [], + "postProcessors": [], + "monitors": [], + "results": [], "flowchartId": "db3b83ea-0ef5-594c-89a8-bde38dbc6105", - "tags": [], - "head": true + "schemaVersion": "2022.8.16", + "isDefault": false } ], "properties": [ "atomic_forces", "band_gaps", "fermi_energy", - "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force" ], - "_id": "16ca0232-a570-53d1-a4d3-32bbd6f3f0a2", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, diff --git a/data/workflows/workflows/vasp/band_structure.json b/data/workflows/workflows/vasp/band_structure.json index 55a68f50..606dc500 100644 --- a/data/workflows/workflows/vasp/band_structure.json +++ b/data/workflows/workflows/vasp/band_structure.json @@ -1,5 +1,6 @@ { "name": "Band Structure", + "_id": "25b0ad08-87bb-5400-bea4-acd5fe2163c0", "subworkflows": [ { "_id": "cd6e3d59-5544-56ac-878b-fd8716a09768", @@ -15,14 +16,14 @@ "schemaVersion": "2022.8.16" }, "properties": [ - "total_energy", - "total_energy_contributions", - "pressure", - "fermi_energy", "atomic_forces", - "total_force", + "band_structure", + "fermi_energy", + "pressure", "stress_tensor", - "band_structure" + "total_energy", + "total_energy_contributions", + "total_force" ], "model": { "type": "dft", @@ -32,11 +33,7 @@ "subtype": "paw", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -77,6 +74,9 @@ "flowchartId": "9cb87769-bf20-56bf-a8b3-5a164e3bf541", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "isLicensed": true, "name": "vasp", @@ -88,21 +88,60 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "error_handler" + }, + { + "name": "prepare_restart" + }, + { + "name": "remove_non_zero_weight_kpoints" + } + ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "error_handler", - "prepare_restart", - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "vasp", + "results": [ + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "pressure" + }, + { + "name": "fermi_energy" + }, + { + "name": "atomic_forces" + }, + { + "name": "total_force" + }, + { + "name": "stress_tensor" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -118,69 +157,72 @@ ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "total_energy", - "total_energy_contributions", - "pressure", - "fermi_energy", - "atomic_forces", - "total_force", - "stress_tensor" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "vasp", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "vasp", - "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "INCAR", - "rendered": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "INCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "KPOINTS", - "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "KPOINTS", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "{{ input.POSCAR }}\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "POSCAR", - "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "{{ input.POSCAR }}\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "POSCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "1e1de3be-f6e4-513e-afe2-c84e567a8108" + "context": [], + "next": "1e1de3be-f6e4-513e-afe2-c84e567a8108", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -202,6 +244,9 @@ "flowchartId": "1e1de3be-f6e4-513e-afe2-c84e567a8108", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "isLicensed": true, "name": "vasp", @@ -213,21 +258,42 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "error_handler" + }, + { + "name": "prepare_restart" + }, + { + "name": "remove_non_zero_weight_kpoints" + } + ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "error_handler", - "prepare_restart", - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "vasp_bands", + "results": [ + { + "name": "band_structure" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -245,77 +311,90 @@ } ], "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "band_structure" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "vasp_bands", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "vasp", - "content": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "INCAR", - "rendered": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "INCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", - "contextProviders": [ - { - "name": "KPathFormDataManager" - }, - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "KPOINTS", - "rendered": "kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", + "contextProviders": [ + { + "name": "KPathFormDataManager" + }, + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "KPOINTS", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "{{ input.POSCAR }}\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "POSCAR", - "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "{{ input.POSCAR }}\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "POSCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } ], "units": [ { - "name": "Band Structure", - "type": "subworkflow", "_id": "cd6e3d59-5544-56ac-878b-fd8716a09768", - "status": "idle", - "statusTrack": [], + "type": "subworkflow", + "name": "Band Structure", + "preProcessors": [], + "postProcessors": [], + "monitors": [], + "results": [], "flowchartId": "c573187f-a8bb-5084-9fcf-1560bf4a7786", - "tags": [], - "head": true + "schemaVersion": "2022.8.16", + "isDefault": false } ], "properties": [ @@ -328,7 +407,6 @@ "total_energy_contributions", "total_force" ], - "_id": "25b0ad08-87bb-5400-bea4-acd5fe2163c0", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, diff --git a/data/workflows/workflows/vasp/band_structure_dos.json b/data/workflows/workflows/vasp/band_structure_dos.json index 7397ab8c..cd95c20d 100644 --- a/data/workflows/workflows/vasp/band_structure_dos.json +++ b/data/workflows/workflows/vasp/band_structure_dos.json @@ -1,5 +1,6 @@ { "name": "Band Structure + Density of States", + "_id": "c8338d40-3c6e-5581-b03c-d7fb5cbb8df5", "subworkflows": [ { "_id": "d38fea11-9781-5151-8dae-d705381498be", @@ -15,15 +16,15 @@ "schemaVersion": "2022.8.16" }, "properties": [ + "atomic_forces", + "band_structure", "density_of_states", - "total_energy", - "total_energy_contributions", - "pressure", "fermi_energy", - "atomic_forces", - "total_force", + "pressure", "stress_tensor", - "band_structure" + "total_energy", + "total_energy_contributions", + "total_force" ], "model": { "type": "dft", @@ -33,11 +34,7 @@ "subtype": "paw", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -81,6 +78,9 @@ "flowchartId": "9cb87769-bf20-56bf-a8b3-5a164e3bf541", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "isLicensed": true, "name": "vasp", @@ -92,21 +92,60 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "error_handler" + }, + { + "name": "prepare_restart" + }, + { + "name": "remove_non_zero_weight_kpoints" + } + ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "error_handler", - "prepare_restart", - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "vasp", + "results": [ + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "pressure" + }, + { + "name": "fermi_energy" + }, + { + "name": "atomic_forces" + }, + { + "name": "total_force" + }, + { + "name": "stress_tensor" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -122,69 +161,72 @@ ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "total_energy", - "total_energy_contributions", - "pressure", - "fermi_energy", - "atomic_forces", - "total_force", - "stress_tensor" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "vasp", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "vasp", - "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "INCAR", - "rendered": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "INCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "KPOINTS", - "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "KPOINTS", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "{{ input.POSCAR }}\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "POSCAR", - "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "{{ input.POSCAR }}\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "POSCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "1e1de3be-f6e4-513e-afe2-c84e567a8108" + "context": [], + "next": "1e1de3be-f6e4-513e-afe2-c84e567a8108", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -206,6 +248,9 @@ "flowchartId": "1e1de3be-f6e4-513e-afe2-c84e567a8108", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "isLicensed": true, "name": "vasp", @@ -217,21 +262,42 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "error_handler" + }, + { + "name": "prepare_restart" + }, + { + "name": "remove_non_zero_weight_kpoints" + } + ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "error_handler", - "prepare_restart", - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "vasp_bands", + "results": [ + { + "name": "band_structure" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -249,77 +315,90 @@ } ], "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "band_structure" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "vasp_bands", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "vasp", - "content": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "INCAR", - "rendered": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "INCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", - "contextProviders": [ - { - "name": "KPathFormDataManager" - }, - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "KPOINTS", - "rendered": "kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", + "contextProviders": [ + { + "name": "KPathFormDataManager" + }, + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "KPOINTS", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "{{ input.POSCAR }}\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "POSCAR", - "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "{{ input.POSCAR }}\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "POSCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } ], "units": [ { - "name": "Band Structure + Density of States", - "type": "subworkflow", "_id": "d38fea11-9781-5151-8dae-d705381498be", - "status": "idle", - "statusTrack": [], + "type": "subworkflow", + "name": "Band Structure + Density of States", + "preProcessors": [], + "postProcessors": [], + "monitors": [], + "results": [], "flowchartId": "8a098bb9-73b1-5e84-bfc7-b783e02d0f53", - "tags": [], - "head": true + "schemaVersion": "2022.8.16", + "isDefault": false } ], "properties": [ @@ -333,7 +412,6 @@ "total_energy_contributions", "total_force" ], - "_id": "c8338d40-3c6e-5581-b03c-d7fb5cbb8df5", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, diff --git a/data/workflows/workflows/vasp/dos.json b/data/workflows/workflows/vasp/dos.json index 2e324d9f..a51421f1 100644 --- a/data/workflows/workflows/vasp/dos.json +++ b/data/workflows/workflows/vasp/dos.json @@ -1,5 +1,6 @@ { "name": "Density of States", + "_id": "629a79fb-a03f-5e34-b2ce-9c735e8ef6c0", "subworkflows": [ { "_id": "4897ca33-b023-5a8d-9a5d-9e74df0f00ad", @@ -15,14 +16,14 @@ "schemaVersion": "2022.8.16" }, "properties": [ + "atomic_forces", "density_of_states", + "fermi_energy", + "pressure", + "stress_tensor", "total_energy", "total_energy_contributions", - "pressure", - "fermi_energy", - "atomic_forces", - "total_force", - "stress_tensor" + "total_force" ], "model": { "type": "dft", @@ -32,11 +33,7 @@ "subtype": "paw", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -80,6 +77,9 @@ "flowchartId": "9cb87769-bf20-56bf-a8b3-5a164e3bf541", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "isLicensed": true, "name": "vasp", @@ -91,21 +91,60 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "error_handler" + }, + { + "name": "prepare_restart" + }, + { + "name": "remove_non_zero_weight_kpoints" + } + ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "error_handler", - "prepare_restart", - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "vasp", + "results": [ + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "pressure" + }, + { + "name": "fermi_energy" + }, + { + "name": "atomic_forces" + }, + { + "name": "total_force" + }, + { + "name": "stress_tensor" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -121,82 +160,89 @@ ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "total_energy", - "total_energy_contributions", - "pressure", - "fermi_energy", - "atomic_forces", - "total_force", - "stress_tensor" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "vasp", "schemaVersion": "2022.8.16" }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "vasp", - "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "INCAR", - "rendered": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "INCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "KPOINTS", - "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "KPOINTS", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "{{ input.POSCAR }}\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "POSCAR", - "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "{{ input.POSCAR }}\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "POSCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } ], "units": [ { - "name": "Density of States", - "type": "subworkflow", "_id": "4897ca33-b023-5a8d-9a5d-9e74df0f00ad", - "status": "idle", - "statusTrack": [], + "type": "subworkflow", + "name": "Density of States", + "preProcessors": [], + "postProcessors": [], + "monitors": [], + "results": [], "flowchartId": "3e64fdb4-ab5b-52a0-a1d5-51343c49481c", - "tags": [], - "head": true + "schemaVersion": "2022.8.16", + "isDefault": false } ], "properties": [ @@ -209,7 +255,6 @@ "total_energy_contributions", "total_force" ], - "_id": "629a79fb-a03f-5e34-b2ce-9c735e8ef6c0", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, diff --git a/data/workflows/workflows/vasp/fixed_cell_relaxation.json b/data/workflows/workflows/vasp/fixed_cell_relaxation.json index a493fe54..68754dd1 100644 --- a/data/workflows/workflows/vasp/fixed_cell_relaxation.json +++ b/data/workflows/workflows/vasp/fixed_cell_relaxation.json @@ -1,5 +1,6 @@ { "name": "Fixed-cell Relaxation", + "_id": "cb69418c-2f6c-551d-af81-0cf20ec1113d", "subworkflows": [ { "_id": "db6cc94b-2f26-5688-ba97-80b11567b549", @@ -15,13 +16,13 @@ "schemaVersion": "2022.8.16" }, "properties": [ - "total_energy", "atomic_forces", "fermi_energy", + "final_structure", "pressure", "stress_tensor", - "total_force", - "final_structure" + "total_energy", + "total_force" ], "model": { "type": "dft", @@ -31,11 +32,7 @@ "subtype": "paw", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -83,6 +80,9 @@ "name": "prepare_restart" } ], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "isLicensed": true, "name": "vasp", @@ -94,21 +94,64 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "error_handler" + }, + { + "name": "prepare_restart" + }, + { + "name": "remove_non_zero_weight_kpoints" + } + ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "error_handler", - "prepare_restart", - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "vasp_relax", + "results": [ + { + "name": "total_energy" + }, + { + "name": "atomic_forces" + }, + { + "name": "fermi_energy" + }, + { + "name": "pressure" + }, + { + "name": "stress_tensor" + }, + { + "name": "total_force" + }, + { + "name": "final_structure" + } + ], + "preProcessors": [], + "postProcessors": [ + { + "name": "prepare_restart" + } + ], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -126,87 +169,93 @@ } ], "monitors": [ - "standard_output", - "convergence_electronic", - "convergence_ionic" - ], - "postProcessors": [ - "prepare_restart" - ], - "results": [ - "total_energy", - "atomic_forces", - "fermi_energy", - "pressure", - "stress_tensor", - "total_force", - "final_structure" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + }, + { + "name": "convergence_ionic" + } ], - "name": "vasp_relax", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "vasp", - "content": "ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "INCAR", - "rendered": "ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "INCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "KPOINTS", - "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "KPOINTS", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "{{ input.POSCAR }}\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "POSCAR", - "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "{{ input.POSCAR }}\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "POSCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } ], "units": [ { - "name": "Fixed-cell Relaxation", - "type": "subworkflow", "_id": "db6cc94b-2f26-5688-ba97-80b11567b549", - "status": "idle", - "statusTrack": [], + "type": "subworkflow", + "name": "Fixed-cell Relaxation", + "preProcessors": [], + "postProcessors": [], + "monitors": [], + "results": [], "flowchartId": "0de8c4c8-b722-5cd2-ae68-b484262e0a01", - "tags": [], - "head": true + "schemaVersion": "2022.8.16", + "isDefault": false } ], "properties": [ @@ -218,7 +267,6 @@ "total_energy", "total_force" ], - "_id": "cb69418c-2f6c-551d-af81-0cf20ec1113d", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, diff --git a/data/workflows/workflows/vasp/kpoint_convergence.json b/data/workflows/workflows/vasp/kpoint_convergence.json index cece990f..3726ba84 100644 --- a/data/workflows/workflows/vasp/kpoint_convergence.json +++ b/data/workflows/workflows/vasp/kpoint_convergence.json @@ -1,5 +1,6 @@ { "name": "K-point Convergence", + "_id": "fcf105f9-5ae7-5c32-a6b3-e3579cbdf39a", "subworkflows": [ { "_id": "5d736d84-d616-538f-a09b-81a32ac0777c", @@ -15,13 +16,13 @@ "schemaVersion": "2022.8.16" }, "properties": [ + "atomic_forces", + "fermi_energy", + "pressure", + "stress_tensor", "total_energy", "total_energy_contributions", - "pressure", - "fermi_energy", - "atomic_forces", - "total_force", - "stress_tensor" + "total_force" ], "model": { "type": "dft", @@ -31,11 +32,7 @@ "subtype": "paw", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -44,22 +41,18 @@ "operand": "TOL", "value": 0.00001, "input": [], - "flowchartId": "init-tolerance", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "init-tolerance", "head": true, "next": "init-increment", - "application": { - "isLicensed": true, - "name": "vasp", - "shortName": "vasp", - "summary": "Vienna Ab-initio Simulation Package", - "build": "GNU", - "isDefault": true, - "version": "5.4.4", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Init increment", @@ -67,22 +60,18 @@ "operand": "INC", "value": 1, "input": [], - "flowchartId": "init-increment", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "init-increment", "head": false, "next": "init-result", - "application": { - "isLicensed": true, - "name": "vasp", - "shortName": "vasp", - "summary": "Vienna Ab-initio Simulation Package", - "build": "GNU", - "isDefault": true, - "version": "5.4.4", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Init result", @@ -90,22 +79,18 @@ "operand": "PREV_RESULT", "value": 0, "input": [], - "flowchartId": "init-result", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "init-result", "head": false, "next": "init-parameter", - "application": { - "isLicensed": true, - "name": "vasp", - "shortName": "vasp", - "summary": "Vienna Ab-initio Simulation Package", - "build": "GNU", - "isDefault": true, - "version": "5.4.4", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Init parameter", @@ -113,22 +98,18 @@ "operand": "PARAMETER", "value": 1, "input": [], - "flowchartId": "init-parameter", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "init-parameter", "head": false, "next": "vasp-kpoint-convergence", - "application": { - "isLicensed": true, - "name": "vasp", - "shortName": "vasp", - "summary": "Vienna Ab-initio Simulation Package", - "build": "GNU", - "isDefault": true, - "version": "5.4.4", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -168,6 +149,9 @@ "flowchartId": "vasp-kpoint-convergence", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "isLicensed": true, "name": "vasp", @@ -179,21 +163,60 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "error_handler" + }, + { + "name": "prepare_restart" + }, + { + "name": "remove_non_zero_weight_kpoints" + } + ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "error_handler", - "prepare_restart", - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "vasp_kpt_conv", + "results": [ + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "pressure" + }, + { + "name": "fermi_energy" + }, + { + "name": "atomic_forces" + }, + { + "name": "total_force" + }, + { + "name": "stress_tensor" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -211,70 +234,73 @@ } ], "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "total_energy", - "total_energy_contributions", - "pressure", - "fermi_energy", - "atomic_forces", - "total_force", - "stress_tensor" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "vasp_kpt_conv", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "vasp", - "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "INCAR", - "rendered": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "INCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "KPOINTS", - "rendered": "Automatic Mesh\n0\nGamma\n{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}\n0 0 0\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "KPOINTS", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "{{ input.POSCAR }}\n", - "contextProviders": [ - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "POSCAR", - "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "{{ input.POSCAR }}\n", + "contextProviders": [ + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "POSCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "store-result" + "context": [], + "next": "store-result", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "store result", @@ -287,50 +313,39 @@ "scope": "vasp-kpoint-convergence" } ], - "flowchartId": "store-result", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "store-result", "head": false, "next": "check-convergence", - "application": { - "isLicensed": true, - "name": "vasp", - "shortName": "vasp", - "summary": "Vienna Ab-initio Simulation Package", - "build": "GNU", - "isDefault": true, - "version": "5.4.4", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "check convergence", "type": "condition", "input": [], + "statement": "abs((PREV_RESULT-RESULT)/RESULT) < TOL", + "maxOccurrences": 50, "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "then": "convergence-is-reached", - "else": "update-result", - "statement": "abs((PREV_RESULT-RESULT)/RESULT) < TOL", - "maxOccurrences": 50, - "flowchartId": "check-convergence", "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "check-convergence", + "then": "convergence-is-reached", + "else": "update-result", "head": false, "next": "update-result", - "application": { - "isLicensed": true, - "name": "vasp", - "shortName": "vasp", - "summary": "Vienna Ab-initio Simulation Package", - "build": "GNU", - "isDefault": true, - "version": "5.4.4", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "update result", @@ -343,22 +358,18 @@ "scope": "global" } ], - "flowchartId": "update-result", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "update-result", "head": false, "next": "increment-parameter", - "application": { - "isLicensed": true, - "name": "vasp", - "shortName": "vasp", - "summary": "Vienna Ab-initio Simulation Package", - "build": "GNU", - "isDefault": true, - "version": "5.4.4", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "increment parameter", @@ -375,22 +386,18 @@ "scope": "global" } ], - "flowchartId": "increment-parameter", - "next": "vasp-kpoint-convergence", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "increment-parameter", + "next": "vasp-kpoint-convergence", "head": false, - "application": { - "isLicensed": true, - "name": "vasp", - "shortName": "vasp", - "summary": "Vienna Ab-initio Simulation Package", - "build": "GNU", - "isDefault": true, - "version": "5.4.4", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "exit", @@ -403,35 +410,35 @@ "scope": "global" } ], - "flowchartId": "convergence-is-reached", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], "tags": [], + "flowchartId": "convergence-is-reached", "head": false, - "application": { - "isLicensed": true, - "name": "vasp", - "shortName": "vasp", - "summary": "Vienna Ab-initio Simulation Package", - "build": "GNU", - "isDefault": true, - "version": "5.4.4", - "schemaVersion": "2022.8.16" - } + "schemaVersion": "2022.8.16", + "isDefault": false } - ] + ], + "schemaVersion": "2022.8.16", + "isDraft": false } ], "units": [ { - "name": "K-point Convergence", - "type": "subworkflow", "_id": "5d736d84-d616-538f-a09b-81a32ac0777c", - "status": "idle", - "statusTrack": [], + "type": "subworkflow", + "name": "K-point Convergence", + "preProcessors": [], + "postProcessors": [], + "monitors": [], + "results": [], "flowchartId": "a34eec2c-cdb2-537d-88c0-ed1d7b205879", - "tags": [], - "head": true + "schemaVersion": "2022.8.16", + "isDefault": false } ], "properties": [ @@ -443,7 +450,6 @@ "total_energy_contributions", "total_force" ], - "_id": "fcf105f9-5ae7-5c32-a6b3-e3579cbdf39a", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, diff --git a/data/workflows/workflows/vasp/neb.json b/data/workflows/workflows/vasp/neb.json index d2f5fabb..93711f63 100644 --- a/data/workflows/workflows/vasp/neb.json +++ b/data/workflows/workflows/vasp/neb.json @@ -1,5 +1,6 @@ { "name": "Nudged Elastic Band (NEB)", + "_id": "2973908e-21ae-5424-afc9-ccb3fde477d8", "subworkflows": [ { "isMultiMaterial": true, @@ -16,20 +17,13 @@ "schemaVersion": "2022.8.16" }, "properties": [ - "total_energy", - "total_energy_contributions", - "pressure", - "fermi_energy", "atomic_forces", - "total_force", + "fermi_energy", + "pressure", "stress_tensor", "total_energy", "total_energy_contributions", - "pressure", - "fermi_energy", - "atomic_forces", - "total_force", - "stress_tensor" + "total_force" ], "model": { "type": "dft", @@ -39,11 +33,7 @@ "subtype": "paw", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -84,6 +74,9 @@ "flowchartId": "f969f010-9dae-5085-9ac5-86150ef78897", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "isLicensed": true, "name": "vasp", @@ -95,21 +88,60 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "error_handler" + }, + { + "name": "prepare_restart" + }, + { + "name": "remove_non_zero_weight_kpoints" + } + ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "error_handler", - "prepare_restart", - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "vasp_neb_initial", + "results": [ + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "pressure" + }, + { + "name": "fermi_energy" + }, + { + "name": "atomic_forces" + }, + { + "name": "total_force" + }, + { + "name": "stress_tensor" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -126,76 +158,79 @@ } ], "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "total_energy", - "total_energy_contributions", - "pressure", - "fermi_energy", - "atomic_forces", - "total_force", - "stress_tensor" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "vasp_neb_initial", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "vasp", - "content": "ISTART = 0\nENCUT = 500\nISPIN = 2\n", - "contextProviders": [ - { - "name": "NEBFormDataManager" - }, - { - "name": "VASPNEBInputDataManager" - } - ], - "executableName": "vasp", - "name": "INCAR", - "rendered": "ISTART = 0\nENCUT = 500\nISPIN = 2\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "ISTART = 0\nENCUT = 500\nISPIN = 2\n", + "contextProviders": [ + { + "name": "NEBFormDataManager" + }, + { + "name": "VASPNEBInputDataManager" + } + ], + "executableName": "vasp", + "name": "INCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "KPOINTS", - "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "KPOINTS", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "{{ input.FIRST_IMAGE }}\n", - "contextProviders": [ - { - "name": "NEBFormDataManager" - }, - { - "name": "VASPNEBInputDataManager" - } - ], - "executableName": "vasp", - "name": "POSCAR", - "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "{{ input.FIRST_IMAGE }}\n", + "contextProviders": [ + { + "name": "NEBFormDataManager" + }, + { + "name": "VASPNEBInputDataManager" + } + ], + "executableName": "vasp", + "name": "POSCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } ], - "next": "e65a17ce-10c8-5710-ad4d-fb3d42434091" + "context": [], + "next": "e65a17ce-10c8-5710-ad4d-fb3d42434091", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -235,6 +270,9 @@ "flowchartId": "e65a17ce-10c8-5710-ad4d-fb3d42434091", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "isLicensed": true, "name": "vasp", @@ -246,21 +284,60 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [ + { + "name": "error_handler" + }, + { + "name": "prepare_restart" + }, + { + "name": "remove_non_zero_weight_kpoints" + } + ], "isDefault": true, "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "error_handler", - "prepare_restart", - "remove_non_zero_weight_kpoints" + { + "name": "standard_output" + }, + { + "name": "convergence_ionic" + }, + { + "name": "convergence_electronic" + } ], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "vasp_neb_final", + "results": [ + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + }, + { + "name": "pressure" + }, + { + "name": "fermi_energy" + }, + { + "name": "atomic_forces" + }, + { + "name": "total_force" + }, + { + "name": "stress_tensor" + } + ], + "preProcessors": [], + "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -277,77 +354,101 @@ } ], "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "total_energy", - "total_energy_contributions", - "pressure", - "fermi_energy", - "atomic_forces", - "total_force", - "stress_tensor" + { + "name": "standard_output" + }, + { + "name": "convergence_electronic" + } ], - "name": "vasp_neb_final", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "vasp", - "content": "ISTART = 0\nENCUT = 500\nISPIN = 2\n", - "contextProviders": [ - { - "name": "NEBFormDataManager" - }, - { - "name": "VASPNEBInputDataManager" - } - ], - "executableName": "vasp", - "name": "INCAR", - "rendered": "ISTART = 0\nENCUT = 500\nISPIN = 2\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "ISTART = 0\nENCUT = 500\nISPIN = 2\n", + "contextProviders": [ + { + "name": "NEBFormDataManager" + }, + { + "name": "VASPNEBInputDataManager" + } + ], + "executableName": "vasp", + "name": "INCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "VASPInputDataManager" - } - ], - "executableName": "vasp", - "name": "KPOINTS", - "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", + "contextProviders": [ + { + "name": "KGridFormDataManager" + }, + { + "name": "VASPInputDataManager" + } + ], + "executableName": "vasp", + "name": "KPOINTS", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false }, { - "applicationName": "vasp", - "content": "{{ input.LAST_IMAGE }}\n", - "contextProviders": [ - { - "name": "NEBFormDataManager" - }, - { - "name": "VASPNEBInputDataManager" - } - ], - "executableName": "vasp", - "name": "POSCAR", - "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", - "schemaVersion": "2022.8.16" + "template": { + "applicationName": "vasp", + "content": "{{ input.LAST_IMAGE }}\n", + "contextProviders": [ + { + "name": "NEBFormDataManager" + }, + { + "name": "VASPNEBInputDataManager" + } + ], + "executableName": "vasp", + "name": "POSCAR", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false } - ] + ], + "context": [], + "schemaVersion": "2022.8.16", + "isDefault": false + } + ], + "compute": { + "ppn": 1, + "nodes": 1, + "queue": "D", + "timeLimit": "01:00:00", + "notify": "n", + "cluster": { + "fqdn": "" + }, + "timeLimitType": "per single attempt", + "isRestartable": true, + "arguments": { + "nimage": 1, + "npools": 1, + "nband": 1, + "ntg": 1, + "ndiag": 1 } - ] + }, + "schemaVersion": "2022.8.16", + "isDraft": false }, { "isMultiMaterial": true, @@ -386,6 +487,9 @@ "flowchartId": "dc397ead-54ad-513b-992e-aedd54576409", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "shell", "shortName": "sh", @@ -396,14 +500,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { + "name": "bash_vasp_prepare_neb_images", + "results": [], + "preProcessors": [], + "postProcessors": [], "applicationName": "shell", "executableName": "sh", "input": [ @@ -412,32 +524,38 @@ } ], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], - "name": "bash_vasp_prepare_neb_images", "schemaVersion": "2022.8.16", "isDefault": false }, - "status": "idle", - "statusTrack": [], - "tags": [], "input": [ { - "applicationName": "shell", - "content": "#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < 00/POSCAR < 01/POSCAR < 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR <; export declare class ApplicationStandata extends Standata { static runtimeData: { filesMapByName: { @@ -65,8 +79,8 @@ export declare class ApplicationStandata extends Standata { }[]; }; }; - getAppDataForApplication(appName: string): ApplicationVersionsMapType; - getAppTreeForApplication(appName: string): Record; + private getAppDataForApplication; + private getAppTreeForApplication; getAllAppTemplates(): TemplateSchema[]; getAllAppTree(): { espresso: { @@ -78,11 +92,15 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; + monitors: { + name: string; + }[]; results: never[]; }; }; - monitors: string[]; + monitors: { + name: string; + }[]; results: never[]; }; "average.x": { @@ -93,7 +111,9 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; + monitors: { + name: string; + }[]; results: never[]; }; average_potential: { @@ -102,12 +122,20 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; }; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; "bands.x": { flavors: { @@ -117,7 +145,9 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; + monitors: { + name: string; + }[]; }; bands_spin_dn: { applicationName: string; @@ -125,7 +155,9 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; + monitors: { + name: string; + }[]; }; bands_spin_up: { applicationName: string; @@ -133,11 +165,17 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; + monitors: { + name: string; + }[]; }; }; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; "cp.x": { flavors: { @@ -148,7 +186,9 @@ export declare class ApplicationStandata extends Standata { name: string; }[]; isDefault: boolean; - monitors: string[]; + monitors: { + name: string; + }[]; results: never[]; }; cp_wf: { @@ -157,11 +197,15 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; + monitors: { + name: string; + }[]; results: never[]; }; }; - monitors: string[]; + monitors: { + name: string; + }[]; results: never[]; }; "dos.x": { @@ -172,12 +216,20 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; }; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; "dynmat.x": { flavors: { @@ -187,11 +239,15 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; + monitors: { + name: string; + }[]; results: never[]; }; }; - monitors: string[]; + monitors: { + name: string; + }[]; results: never[]; }; "epsilon.x": { @@ -202,12 +258,20 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; }; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; "gw.x": { flavors: { @@ -217,8 +281,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; gw_bands_plasmon_pole: { applicationName: string; @@ -226,12 +294,20 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; }; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; "gww.x": { flavors: { @@ -241,11 +317,15 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; + monitors: { + name: string; + }[]; results: never[]; }; }; - monitors: string[]; + monitors: { + name: string; + }[]; results: never[]; }; "head.x": { @@ -256,11 +336,15 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; + monitors: { + name: string; + }[]; results: never[]; }; }; - monitors: string[]; + monitors: { + name: string; + }[]; results: never[]; }; "hp.x": { @@ -271,12 +355,20 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; }; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; supportedApplicationVersions: string[]; }; "matdyn.x": { @@ -287,8 +379,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; matdyn_path: { applicationName: string; @@ -296,12 +392,20 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; }; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; "neb.x": { flavors: { @@ -312,12 +416,20 @@ export declare class ApplicationStandata extends Standata { name: string; }[]; isMultiMaterial: boolean; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; }; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; "ph.x": { flavors: { @@ -327,8 +439,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; ph_grid: { applicationName: string; @@ -336,8 +452,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; ph_grid_restart: { applicationName: string; @@ -345,7 +465,9 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; + monitors: { + name: string; + }[]; results: never[]; }; ph_init_qpoints: { @@ -354,7 +476,9 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; + monitors: { + name: string; + }[]; results: never[]; }; ph_path: { @@ -363,8 +487,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; ph_single_irr_qpt: { applicationName: string; @@ -372,12 +500,18 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; + monitors: { + name: string; + }[]; results: never[]; }; }; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; "pp.x": { flavors: { @@ -387,7 +521,9 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; + monitors: { + name: string; + }[]; results: never[]; }; pp_electrostatic_potential: { @@ -396,7 +532,9 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; + monitors: { + name: string; + }[]; results: never[]; }; pp_wfn: { @@ -405,11 +543,17 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; }; - monitors: string[]; + monitors: { + name: string; + }[]; results: never[]; }; "projwfc.x": { @@ -420,12 +564,20 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; }; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; "pw.x": { flavors: { @@ -435,8 +587,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; "pw_bands_dft_u+j_magn": { applicationName: string; @@ -444,8 +600,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; supportedApplicationVersions: string[]; }; "pw_bands_dft_u+v_magn": { @@ -454,8 +614,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; supportedApplicationVersions: string[]; }; pw_bands_dft_u_magn: { @@ -464,8 +628,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; supportedApplicationVersions: string[]; }; pw_bands_dft_u_magn_legacy: { @@ -474,8 +642,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; supportedApplicationVersions: string[]; }; pw_bands_dft_u_soc: { @@ -484,8 +656,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; supportedApplicationVersions: string[]; }; pw_bands_dft_u_soc_legacy: { @@ -494,8 +670,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; supportedApplicationVersions: string[]; }; pw_bands_magn: { @@ -504,8 +684,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; pw_bands_soc: { applicationName: string; @@ -513,8 +697,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; pw_esm: { applicationName: string; @@ -522,8 +710,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; pw_esm_relax: { applicationName: string; @@ -531,8 +723,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; pw_md: { applicationName: string; @@ -540,8 +736,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; pw_nscf: { applicationName: string; @@ -549,8 +749,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; "pw_nscf_dft_u+j_magn": { applicationName: string; @@ -558,8 +762,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; supportedApplicationVersions: string[]; }; "pw_nscf_dft_u+v_magn": { @@ -568,8 +776,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; supportedApplicationVersions: string[]; }; pw_nscf_dft_u_magn: { @@ -578,8 +790,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; supportedApplicationVersions: string[]; }; pw_nscf_dft_u_magn_legacy: { @@ -588,8 +804,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; supportedApplicationVersions: string[]; }; pw_nscf_dft_u_soc: { @@ -598,8 +818,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; supportedApplicationVersions: string[]; }; pw_nscf_dft_u_soc_legacy: { @@ -608,8 +832,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; supportedApplicationVersions: string[]; }; pw_nscf_magn: { @@ -618,8 +846,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; pw_nscf_soc: { applicationName: string; @@ -627,8 +859,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; pw_relax: { applicationName: string; @@ -636,8 +872,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; pw_scf: { applicationName: string; @@ -646,8 +886,12 @@ export declare class ApplicationStandata extends Standata { name: string; }[]; isDefault: boolean; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; pw_scf_bands_hse: { applicationName: string; @@ -655,8 +899,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; pw_scf_dft_u: { applicationName: string; @@ -664,8 +912,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; supportedApplicationVersions: string[]; }; "pw_scf_dft_u+j": { @@ -674,8 +926,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; supportedApplicationVersions: string[]; }; "pw_scf_dft_u+j_magn": { @@ -684,8 +940,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; supportedApplicationVersions: string[]; }; "pw_scf_dft_u+v": { @@ -694,8 +954,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; supportedApplicationVersions: string[]; }; "pw_scf_dft_u+v_magn": { @@ -704,8 +968,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; supportedApplicationVersions: string[]; }; pw_scf_dft_u_legacy: { @@ -714,8 +982,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; supportedApplicationVersions: string[]; }; pw_scf_dft_u_magn: { @@ -724,8 +996,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; supportedApplicationVersions: string[]; }; pw_scf_dft_u_magn_legacy: { @@ -734,8 +1010,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; supportedApplicationVersions: string[]; }; pw_scf_dft_u_soc: { @@ -744,8 +1024,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; supportedApplicationVersions: string[]; }; pw_scf_dft_u_soc_legacy: { @@ -754,8 +1038,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; supportedApplicationVersions: string[]; }; pw_scf_hse: { @@ -764,8 +1052,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; pw_scf_kpt_conv: { applicationName: string; @@ -773,8 +1065,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; pw_scf_magn: { applicationName: string; @@ -782,8 +1078,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; pw_scf_soc: { applicationName: string; @@ -791,8 +1091,12 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; "pw_vc-relax": { applicationName: string; @@ -800,15 +1104,25 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; }; hasAdvancedComputeOptions: boolean; isDefault: boolean; - monitors: string[]; - postProcessors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + postProcessors: { + name: string; + }[]; + results: { + name: string; + }[]; }; "pw4gww.x": { flavors: { @@ -818,11 +1132,15 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; + monitors: { + name: string; + }[]; results: never[]; }; }; - monitors: string[]; + monitors: { + name: string; + }[]; results: never[]; }; "q2r.x": { @@ -833,11 +1151,15 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; + monitors: { + name: string; + }[]; results: never[]; }; }; - monitors: string[]; + monitors: { + name: string; + }[]; results: never[]; }; "simple.x": { @@ -848,11 +1170,15 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; + monitors: { + name: string; + }[]; results: never[]; }; }; - monitors: string[]; + monitors: { + name: string; + }[]; results: never[]; }; "simple_bse.x": { @@ -863,11 +1189,15 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; + monitors: { + name: string; + }[]; results: never[]; }; }; - monitors: string[]; + monitors: { + name: string; + }[]; results: never[]; }; "simple_ip.x": { @@ -878,11 +1208,15 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; + monitors: { + name: string; + }[]; results: never[]; }; }; - monitors: string[]; + monitors: { + name: string; + }[]; results: never[]; }; }; @@ -896,15 +1230,25 @@ export declare class ApplicationStandata extends Standata { name: string; }[]; isDefault: boolean; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; }; hasAdvancedComputeOptions: boolean; isDefault: boolean; - monitors: string[]; - postProcessors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + postProcessors: { + name: string; + }[]; + results: { + name: string; + }[]; }; }; python: { @@ -920,7 +1264,9 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; })[]; - monitors: string[]; + monitors: { + name: string; + }[]; }; espresso_xml_get_qpt_irr: { applicationName: string; @@ -928,7 +1274,9 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; + monitors: { + name: string; + }[]; }; "generic:post_processing:plot:matplotlib": { applicationName: string; @@ -937,7 +1285,9 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; }[]; - monitors: string[]; + monitors: { + name: string; + }[]; }; "generic:processing:find_extrema:scipy": { applicationName: string; @@ -946,7 +1296,9 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; }[]; - monitors: string[]; + monitors: { + name: string; + }[]; }; hello_world: { applicationName: string; @@ -959,7 +1311,9 @@ export declare class ApplicationStandata extends Standata { templateName?: undefined; })[]; isDefault: boolean; - monitors: string[]; + monitors: { + name: string; + }[]; }; plot_wavefunction: { applicationName: string; @@ -968,7 +1322,9 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; }[]; - monitors: string[]; + monitors: { + name: string; + }[]; results: { basename: string; filetype: string; @@ -982,7 +1338,9 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; }[]; - monitors: string[]; + monitors: { + name: string; + }[]; }; "pyml:data_input:read_csv:pandas": { applicationName: string; @@ -991,7 +1349,9 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; }[]; - monitors: string[]; + monitors: { + name: string; + }[]; }; "pyml:data_input:train_test_split:sklearn": { applicationName: string; @@ -1000,7 +1360,9 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; }[]; - monitors: string[]; + monitors: { + name: string; + }[]; }; "pyml:model:adaboosted_trees_regression:sklearn": { applicationName: string; @@ -1009,8 +1371,12 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; "pyml:model:bagged_trees_regression:sklearn": { applicationName: string; @@ -1019,8 +1385,12 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; "pyml:model:extreme_gradboosted_trees_classification:sklearn": { applicationName: string; @@ -1029,8 +1399,12 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; "pyml:model:extreme_gradboosted_trees_regression:sklearn": { applicationName: string; @@ -1039,8 +1413,12 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; "pyml:model:gradboosted_trees_classification:sklearn": { applicationName: string; @@ -1049,8 +1427,12 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; "pyml:model:gradboosted_trees_regression:sklearn": { applicationName: string; @@ -1059,8 +1441,12 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; "pyml:model:k_means_clustering:sklearn": { applicationName: string; @@ -1069,8 +1455,12 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; "pyml:model:kernel_ridge_regression:sklearn": { applicationName: string; @@ -1079,8 +1469,12 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; "pyml:model:lasso_regression:sklearn": { applicationName: string; @@ -1089,8 +1483,12 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; "pyml:model:multilayer_perceptron:sklearn": { applicationName: string; @@ -1099,8 +1497,12 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; "pyml:model:random_forest_classification:sklearn": { applicationName: string; @@ -1109,8 +1511,12 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; "pyml:model:random_forest_regression:sklearn": { applicationName: string; @@ -1119,8 +1525,12 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; "pyml:model:ridge_regression:sklearn": { applicationName: string; @@ -1129,8 +1539,12 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; "pyml:post_processing:parity_plot:matplotlib": { applicationName: string; @@ -1139,8 +1553,12 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; "pyml:post_processing:pca_2d_clusters:matplotlib": { applicationName: string; @@ -1149,8 +1567,12 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; "pyml:post_processing:roc_curve:sklearn": { applicationName: string; @@ -1159,8 +1581,12 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; "pyml:pre_processing:min_max_scaler:sklearn": { applicationName: string; @@ -1169,7 +1595,9 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; }[]; - monitors: string[]; + monitors: { + name: string; + }[]; }; "pyml:pre_processing:remove_duplicates:pandas": { applicationName: string; @@ -1178,7 +1606,9 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; }[]; - monitors: string[]; + monitors: { + name: string; + }[]; }; "pyml:pre_processing:remove_missing:pandas": { applicationName: string; @@ -1187,7 +1617,9 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; }[]; - monitors: string[]; + monitors: { + name: string; + }[]; }; "pyml:pre_processing:standardization:sklearn": { applicationName: string; @@ -1196,7 +1628,9 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; }[]; - monitors: string[]; + monitors: { + name: string; + }[]; }; "pyml:setup_variables_packages": { applicationName: string; @@ -1205,12 +1639,18 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; }[]; - monitors: string[]; + monitors: { + name: string; + }[]; }; }; isDefault: boolean; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; }; shell: { @@ -1223,7 +1663,9 @@ export declare class ApplicationStandata extends Standata { name: string; }[]; isMultiMaterial: boolean; - monitors: string[]; + monitors: { + name: string; + }[]; }; espresso_collect_dynmat: { applicationName: string; @@ -1231,7 +1673,9 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; + monitors: { + name: string; + }[]; }; espresso_link_outdir_save: { applicationName: string; @@ -1239,7 +1683,9 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; + monitors: { + name: string; + }[]; }; hello_world: { applicationName: string; @@ -1248,7 +1694,9 @@ export declare class ApplicationStandata extends Standata { name: string; }[]; isDefault: boolean; - monitors: string[]; + monitors: { + name: string; + }[]; }; job_espresso_pw_scf: { applicationName: string; @@ -1256,12 +1704,18 @@ export declare class ApplicationStandata extends Standata { input: { name: string; }[]; - monitors: string[]; + monitors: { + name: string; + }[]; }; }; isDefault: boolean; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; }; vasp: { @@ -1274,8 +1728,12 @@ export declare class ApplicationStandata extends Standata { name: string; }[]; isDefault: boolean; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; vasp_bands: { applicationName: string; @@ -1284,8 +1742,12 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; vasp_bands_hse: { applicationName: string; @@ -1295,8 +1757,12 @@ export declare class ApplicationStandata extends Standata { templateName: string; }[]; isDefault: boolean; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; vasp_hse: { applicationName: string; @@ -1309,8 +1775,12 @@ export declare class ApplicationStandata extends Standata { templateName?: undefined; })[]; isDefault: boolean; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; vasp_kpt_conv: { applicationName: string; @@ -1319,8 +1789,12 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; vasp_neb: { applicationName: string; @@ -1330,8 +1804,12 @@ export declare class ApplicationStandata extends Standata { templateName: string; }[]; isMultiMaterial: boolean; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; vasp_neb_final: { applicationName: string; @@ -1344,8 +1822,12 @@ export declare class ApplicationStandata extends Standata { templateName?: undefined; })[]; isMultiMaterial: boolean; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; vasp_neb_initial: { applicationName: string; @@ -1358,8 +1840,12 @@ export declare class ApplicationStandata extends Standata { templateName?: undefined; })[]; isMultiMaterial: boolean; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; vasp_nscf: { applicationName: string; @@ -1368,8 +1854,12 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; vasp_nscf_hse: { applicationName: string; @@ -1379,8 +1869,12 @@ export declare class ApplicationStandata extends Standata { templateName: string; }[]; isDefault: boolean; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; vasp_relax: { applicationName: string; @@ -1389,9 +1883,15 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; }[]; - monitors: string[]; - postProcessors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + postProcessors: { + name: string; + }[]; + results: { + name: string; + }[]; }; vasp_symprec: { applicationName: string; @@ -1403,8 +1903,12 @@ export declare class ApplicationStandata extends Standata { name: string; templateName?: undefined; })[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; vasp_vc_relax: { applicationName: string; @@ -1413,9 +1917,15 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; }[]; - monitors: string[]; - postProcessors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + postProcessors: { + name: string; + }[]; + results: { + name: string; + }[]; }; vasp_vc_relax_conv: { applicationName: string; @@ -1424,8 +1934,12 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; vasp_zpe: { applicationName: string; @@ -1434,23 +1948,33 @@ export declare class ApplicationStandata extends Standata { name: string; templateName: string; }[]; - monitors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; }; isDefault: boolean; - monitors: string[]; - postProcessors: string[]; - results: string[]; + monitors: { + name: string; + }[]; + postProcessors: { + name: string; + }[]; + results: { + name: string; + }[]; }; }; }; - getAllApplicationNames(): string[]; + private getAllApplicationNames; getAllAppData(): ApplicationSchema[]; getTemplatesByName(appName: string, execName: string, templateName?: string): TemplateSchema[]; getByApplicationName(appName: string): ApplicationSchema[]; static getDefaultVersionForApplication(appName: string): string; - static getDefaultBuildForApplicationAndVersion(appName: string, version: string): string; + static getDefaultBuildForApplicationAndVersion(appName: string, version: string): string | null; getDefaultConfigByNameAndVersion(appName: string, version?: string): ApplicationSchema; getDefaultConfig(): { name: string; @@ -1459,4 +1983,69 @@ export declare class ApplicationStandata extends Standata { summary: string; build: string; }; + private applicationsTree?; + private applications?; + getApplicationsTree(): ApplicationTree; + getApplications(): ApplicationSchema[]; + getApplicationTreeItem(appName: string): ApplicationTreeItem; + getApplication({ name, version, build }: ApplicationConfig): ApplicationSchema; + getExecutableByName(appName: string, execName?: string): { + name: string; + isDefault?: boolean | undefined; + hasAdvancedComputeOptions?: boolean | undefined; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; + postProcessors: { + name: string; + }[]; + flavors: Record & Pick, "results">>; + supportedApplicationVersions?: string[] | undefined; + preProcessors: never[]; + applicationId: never[]; + }; + getExecutableAndFlavorByName(appName: string, execName?: string, flavorName?: string): { + executable: { + name: string; + isDefault?: boolean | undefined; + hasAdvancedComputeOptions?: boolean | undefined; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; + postProcessors: { + name: string; + }[]; + flavors: Record & Pick, "results">>; + supportedApplicationVersions?: string[] | undefined; + preProcessors: never[]; + applicationId: never[]; + }; + flavor: { + isDefault?: boolean | undefined; + input: { + templateId?: string | undefined; + templateName?: string | undefined; + name?: string | undefined; + }[]; + monitors: { + name: string; + }[]; + applicationName?: string | undefined; + executableName?: string | undefined; + results: { + name: string; + }[]; + name: string; + preProcessors: never[]; + postProcessors: never[]; + }; + }; + getInput(flavor: FlavorSchema): TemplateSchema[]; } +export {}; diff --git a/dist/js/application.js b/dist/js/application.js index 8022be7d..2df68a0d 100644 --- a/dist/js/application.js +++ b/dist/js/application.js @@ -9,7 +9,6 @@ const applications_json_1 = __importDefault(require("./runtime_data/applications const applicationVersionsMapByApplication_json_1 = __importDefault(require("./runtime_data/applications/applicationVersionsMapByApplication.json")); const executableFlavorMapByApplication_json_1 = __importDefault(require("./runtime_data/applications/executableFlavorMapByApplication.json")); const templatesList_json_1 = __importDefault(require("./runtime_data/applications/templatesList.json")); -const applicationVersionMap_1 = require("./utils/applicationVersionMap"); const TEMPLATES_LIST = templatesList_json_1.default; const APP_VERSIONS = applicationVersionsMapByApplication_json_1.default; const EXECUTABLE_FLAVOR = executableFlavorMapByApplication_json_1.default; @@ -18,7 +17,7 @@ var TAGS; TAGS["DEFAULT"] = "default"; TAGS["DEFAULT_VERSION"] = "default_version"; TAGS["DEFAULT_BUILD"] = "default_build"; -})(TAGS || (exports.TAGS = TAGS = {})); +})(TAGS = exports.TAGS || (exports.TAGS = {})); class ApplicationStandata extends base_1.Standata { getAppDataForApplication(appName) { const applicationVersionsMap = APP_VERSIONS[appName]; @@ -33,7 +32,19 @@ class ApplicationStandata extends base_1.Standata { if (!(appName in executableData)) { throw new Error(`${appName} is not a known application with executable tree.`); } - return executableData[appName]; + const appTree = executableData[appName]; + return Object.fromEntries(Object.entries(appTree).map(([name, exec]) => { + return [ + name, + { + preProcessors: [], + postProcessors: [], + applicationId: [], + ...exec, + name, + }, + ]; + })); } getAllAppTemplates() { // TODO: Convert to use this.getAll() when template data is in Standata format @@ -72,19 +83,14 @@ class ApplicationStandata extends base_1.Standata { return allEntities.filter((entity) => entity.name === appName); } static getDefaultVersionForApplication(appName) { - const applicationVersionsMap = new applicationVersionMap_1.ApplicationVersionsMap(APP_VERSIONS[appName]); - return applicationVersionsMap.defaultVersion; + return APP_VERSIONS[appName].defaultVersion; } static getDefaultBuildForApplicationAndVersion(appName, version) { - const applicationVersionsMap = new applicationVersionMap_1.ApplicationVersionsMap(APP_VERSIONS[appName]); - const versionConfig = applicationVersionsMap.versionConfigs.find((config) => config.version === version && config.isDefault); - if (!versionConfig) { - throw new Error(`No default build found for ${appName} with version ${version}`); - } - if (!versionConfig.build) { - throw new Error(`No build specified for default config of ${appName} with version ${version}`); - } - return versionConfig.build; + var _a; + const versionConfig = APP_VERSIONS[appName].versions.find((config) => { + return config.version === version && config.isDefault; + }); + return (_a = versionConfig === null || versionConfig === void 0 ? void 0 : versionConfig.build) !== null && _a !== void 0 ? _a : null; } // TODO: move to parent class Standata, name and generic parameters getDefaultConfigByNameAndVersion(appName, version) { @@ -111,6 +117,102 @@ class ApplicationStandata extends base_1.Standata { const { name, shortName, version, summary, build } = fullConfig; return { name, shortName, version, summary, build }; } + getApplicationsTree() { + if (this.applicationsTree) { + return this.applicationsTree; + } + const applicationNames = this.getAllApplicationNames(); + this.applicationsTree = applicationNames.reduce((tree, appName) => { + const { versions, defaultVersion, ...appData } = this.getAppDataForApplication(appName); + return { + ...tree, + [appName]: { + defaultVersion, + versions: versions.reduce((acc, versionInfo) => { + return { + ...acc, + [versionInfo.version]: { + ...acc[versionInfo.version], + [versionInfo.build]: { + ...appData, + ...versionInfo, + }, + }, + }; + }, {}), + }, + }; + }, {}); + return this.applicationsTree; + } + getApplications() { + if (this.applications) { + return this.applications; + } + const tree = this.getApplicationsTree(); + this.applications = Object.values(tree).flatMap((appTreeItem) => { + return Object.values(appTreeItem.versions).flatMap((version) => { + return Object.values(version).flat(); + }); + }); + return this.applications; + } + getApplicationTreeItem(appName) { + const tree = this.getApplicationsTree(); + const app = tree[appName]; + if (!app) { + throw new Error(`Application ${appName} not found`); + } + return app; + } + getApplication({ name, version, build }) { + const appTreeItem = this.getApplicationTreeItem(name); + const { defaultVersion } = appTreeItem; + const appVersion = appTreeItem.versions[version || defaultVersion]; + const application = build + ? appVersion[build] + : Object.values(appVersion).find((build) => build.isDefault); + if (!application) { + throw new Error(`Application ${name} not found with version ${version} and build ${build}`); + } + return application; + } + getExecutableByName(appName, execName) { + const appTree = this.getAppTreeForApplication(appName); + const config = execName && appTree[execName] + ? appTree[execName] + : Object.values(appTree).find((exec) => exec.isDefault); + if (!config) { + throw new Error(`Executable ${execName} not found for application ${appName}`); + } + return config; + } + getExecutableAndFlavorByName(appName, execName, flavorName) { + const executable = this.getExecutableByName(appName, execName); + const flavor = Object.entries(executable.flavors) + .map(([name, flavor]) => { + return { name, results: [], preProcessors: [], postProcessors: [], ...flavor }; + }) + .find(({ name, isDefault }) => { + return flavorName ? name === flavorName : isDefault; + }); + if (!flavor) { + throw new Error(`Flavor ${flavorName} not found for executable ${execName} in application ${appName}`); + } + return { executable, flavor }; + } + getInput(flavor) { + const appName = flavor.applicationName || ""; + const execName = flavor.executableName || ""; + return flavor.input.map((input) => { + const inputName = input.templateName || input.name; + const filtered = this.getTemplatesByName(appName, execName, inputName); + if (filtered.length !== 1) { + console.log(`found ${filtered.length} templates for app=${appName} exec=${execName} name=${inputName} expected 1`); + } + return { ...filtered[0], name: input.name || "" }; + }); + } } exports.ApplicationStandata = ApplicationStandata; ApplicationStandata.runtimeData = applications_json_1.default; diff --git a/dist/js/applicationMethod.d.ts b/dist/js/applicationMethod.d.ts index c62aa9fa..310d3681 100644 --- a/dist/js/applicationMethod.d.ts +++ b/dist/js/applicationMethod.d.ts @@ -1,8 +1,9 @@ +import type { ApplicationSchema } from "@mat3ra/esse/dist/js/types"; import { ApplicationMethodParametersInterface } from "./types/applicationFilter"; import { ApplicationFilterStandata } from "./utils/applicationFilter"; export declare class ApplicationMethodStandata extends ApplicationFilterStandata { constructor(); findByApplicationParameters({ methodList, name, version, build, executable, flavor, }: ApplicationMethodParametersInterface): any[]; getAvailableMethods(name: string): any; - getDefaultMethodConfigForApplication(applicationConfig: any): any; + getDefaultMethodConfigForApplication(application: ApplicationSchema): any; } diff --git a/dist/js/applicationMethod.js b/dist/js/applicationMethod.js index 99bed773..0ea98dff 100644 --- a/dist/js/applicationMethod.js +++ b/dist/js/applicationMethod.js @@ -18,15 +18,15 @@ class ApplicationMethodStandata extends applicationFilter_1.ApplicationFilterSta getAvailableMethods(name) { return this.getAvailableEntities(name); } - getDefaultMethodConfigForApplication(applicationConfig) { - const { name, version, build, executable, flavor } = applicationConfig; + getDefaultMethodConfigForApplication(application) { + const { name, version, build /* executable, flavor */ } = application; const availableMethods = this.getAvailableMethods(name); if (!availableMethods || Object.keys(availableMethods).length === 0) { return { type: "unknown", subtype: "unknown" }; } const methodStandata = new method_1.MethodStandata(); const allMethods = methodStandata.getAll(); - return this.filterByApplicationParametersGetDefault(allMethods, name, version, build, executable, flavor); + return this.filterByApplicationParametersGetDefault(allMethods, name, version, build); } } exports.ApplicationMethodStandata = ApplicationMethodStandata; diff --git a/dist/js/cli.js b/dist/js/cli.js index 48a13b20..5e556ebf 100644 --- a/dist/js/cli.js +++ b/dist/js/cli.js @@ -15,23 +15,13 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? ( }) : function(o, v) { o["default"] = v; }); -var __importStar = (this && this.__importStar) || (function () { - var ownKeys = function(o) { - ownKeys = Object.getOwnPropertyNames || function (o) { - var ar = []; - for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; - return ar; - }; - return ownKeys(o); - }; - return function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); - __setModuleDefault(result, mod); - return result; - }; -})(); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; diff --git a/dist/js/modelMethodFilter.js b/dist/js/modelMethodFilter.js index 9fccc16d..c858b04d 100644 --- a/dist/js/modelMethodFilter.js +++ b/dist/js/modelMethodFilter.js @@ -3,8 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); -exports.ModelMethodFilter = void 0; -exports.filterMethodsByModel = filterMethodsByModel; +exports.filterMethodsByModel = exports.ModelMethodFilter = void 0; const modelMethodMap_json_1 = __importDefault(require("./runtime_data/models/modelMethodMap.json")); class ModelMethodFilter { constructor() { @@ -86,3 +85,4 @@ function filterMethodsByModel({ methodList, model, }) { const modelMethodFilter = new ModelMethodFilter(); return modelMethodFilter.getCompatibleMethods(model, methodList); } +exports.filterMethodsByModel = filterMethodsByModel; diff --git a/dist/js/runtime_data/applications.json b/dist/js/runtime_data/applications.json index a01c314a..a4540716 100644 --- a/dist/js/runtime_data/applications.json +++ b/dist/js/runtime_data/applications.json @@ -1 +1 @@ -{ "filesMapByName": { "espresso/espresso_gnu_6.3.json": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "nwchem/nwchem_gnu_7.0.2.json": { "build": "GNU", "isDefault": true, "name": "nwchem", "shortName": "nwchem", "summary": "NWChem", "version": "7.0.2" }, "python/python_gnu_3.10.13.json": { "build": "GNU", "isDefault": true, "name": "python", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "shell/shell_gnu_5.1.8.json": { "build": "GNU", "isDefault": true, "name": "shell", "shortName": "sh", "summary": "Shell Script", "version": "5.1.8" }, "vasp/vasp_gnu_5.4.4.json": { "build": "GNU", "isDefault": true, "isLicensed": true, "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "version": "5.4.4" } }, "standataConfig": { "categories": { "defaults": ["default_version", "default_build", "default"], "language_type": ["scripting", "compiled"], "model": ["atomistic", "macroscopic", "mesoscopic", "quantum-mechanical", "statistical"], "purpose": ["modeling", "programming_language"] }, "entities": [{ "categories": ["quantum-mechanical", "modeling", "compiled", "default_version", "default_build", "default"], "filename": "espresso/espresso_gnu_6.3.json" }, { "categories": ["quantum-mechanical", "modeling", "compiled", "default_version", "default_build", "default"], "filename": "vasp/vasp_gnu_5.4.4.json" }, { "categories": ["quantum-mechanical", "modeling", "compiled", "default_version", "default_build", "default"], "filename": "nwchem/nwchem_gnu_7.0.2.json" }, { "categories": ["programming_language", "scripting", "default_version", "default"], "filename": "python/python_gnu_3.10.13.json" }, { "categories": ["programming_language", "scripting", "default_version", "default"], "filename": "shell/shell_gnu_5.1.8.json" }] } } +{"filesMapByName":{"espresso/espresso_gnu_6.3.json":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"nwchem/nwchem_gnu_7.0.2.json":{"build":"GNU","isDefault":true,"name":"nwchem","shortName":"nwchem","summary":"NWChem","version":"7.0.2"},"python/python_gnu_3.10.13.json":{"build":"GNU","isDefault":true,"name":"python","shortName":"py","summary":"Python Script","version":"3.10.13"},"shell/shell_gnu_5.1.8.json":{"build":"GNU","isDefault":true,"name":"shell","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"vasp/vasp_gnu_5.4.4.json":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"}},"standataConfig":{"categories":{"defaults":["default_version","default_build","default"],"language_type":["scripting","compiled"],"model":["atomistic","macroscopic","mesoscopic","quantum-mechanical","statistical"],"purpose":["modeling","programming_language"]},"entities":[{"categories":["quantum-mechanical","modeling","compiled","default_version","default_build","default"],"filename":"espresso/espresso_gnu_6.3.json"},{"categories":["quantum-mechanical","modeling","compiled","default_version","default_build","default"],"filename":"vasp/vasp_gnu_5.4.4.json"},{"categories":["quantum-mechanical","modeling","compiled","default_version","default_build","default"],"filename":"nwchem/nwchem_gnu_7.0.2.json"},{"categories":["programming_language","scripting","default_version","default"],"filename":"python/python_gnu_3.10.13.json"},{"categories":["programming_language","scripting","default_version","default"],"filename":"shell/shell_gnu_5.1.8.json"}]}} diff --git a/dist/js/runtime_data/applications/applicationVersionsMapByApplication.json b/dist/js/runtime_data/applications/applicationVersionsMapByApplication.json index e6db3bc9..7fddd66c 100644 --- a/dist/js/runtime_data/applications/applicationVersionsMapByApplication.json +++ b/dist/js/runtime_data/applications/applicationVersionsMapByApplication.json @@ -1 +1 @@ -{ "espresso": { "defaultVersion": "6.3", "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "versions": [{ "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "version": "6.3" }] }, "nwchem": { "defaultVersion": "7.0.2", "name": "nwchem", "shortName": "nwchem", "summary": "NWChem", "versions": [{ "build": "GNU", "isDefault": true, "version": "7.0.2" }] }, "python": { "defaultVersion": "3.10.13", "name": "python", "shortName": "py", "summary": "Python Script", "versions": [{ "build": "GNU", "isDefault": true, "version": "3.10.13" }] }, "shell": { "defaultVersion": "5.1.8", "name": "shell", "shortName": "sh", "summary": "Shell Script", "versions": [{ "build": "GNU", "isDefault": true, "version": "5.1.8" }] }, "vasp": { "defaultVersion": "5.4.4", "isLicensed": true, "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "versions": [{ "build": "GNU", "isDefault": true, "version": "5.4.4" }] } } +{"espresso":{"defaultVersion":"6.3","name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","versions":[{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3"}]},"nwchem":{"defaultVersion":"7.0.2","name":"nwchem","shortName":"nwchem","summary":"NWChem","versions":[{"build":"GNU","isDefault":true,"version":"7.0.2"}]},"python":{"defaultVersion":"3.10.13","name":"python","shortName":"py","summary":"Python Script","versions":[{"build":"GNU","isDefault":true,"version":"3.10.13"}]},"shell":{"defaultVersion":"5.1.8","name":"shell","shortName":"sh","summary":"Shell Script","versions":[{"build":"GNU","isDefault":true,"version":"5.1.8"}]},"vasp":{"defaultVersion":"5.4.4","isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","versions":[{"build":"GNU","isDefault":true,"version":"5.4.4"}]}} diff --git a/dist/js/runtime_data/applications/executableFlavorMapByApplication.json b/dist/js/runtime_data/applications/executableFlavorMapByApplication.json index 38b146cf..29aed155 100644 --- a/dist/js/runtime_data/applications/executableFlavorMapByApplication.json +++ b/dist/js/runtime_data/applications/executableFlavorMapByApplication.json @@ -1 +1 @@ -{ "espresso": { "abcoeff_to_eps.x": { "flavors": { "abcoeff_to_eps_simple": { "applicationName": "espresso", "executableName": "abcoeff_to_eps.x", "input": [{ "name": "abcoeff_to_eps_simple.in" }], "monitors": ["standard_output"], "results": [] } }, "monitors": ["standard_output"], "results": [] }, "average.x": { "flavors": { "average": { "applicationName": "espresso", "executableName": "average.x", "input": [{ "name": "average.in" }], "monitors": ["standard_output"], "results": [] }, "average_potential": { "applicationName": "espresso", "executableName": "average.x", "input": [{ "name": "average.in" }], "monitors": ["standard_output"], "results": ["average_potential_profile"] } }, "monitors": ["standard_output"], "results": ["average_potential_profile"] }, "bands.x": { "flavors": { "bands": { "applicationName": "espresso", "executableName": "bands.x", "input": [{ "name": "bands.in" }], "monitors": ["standard_output"] }, "bands_spin_dn": { "applicationName": "espresso", "executableName": "bands.x", "input": [{ "name": "bands_spin_dn.in" }], "monitors": ["standard_output"] }, "bands_spin_up": { "applicationName": "espresso", "executableName": "bands.x", "input": [{ "name": "bands_spin_up.in" }], "monitors": ["standard_output"] } }, "monitors": ["standard_output"], "results": ["band_structure"] }, "cp.x": { "flavors": { "cp": { "applicationName": "espresso", "executableName": "cp.x", "input": [{ "name": "cp.in" }], "isDefault": true, "monitors": ["standard_output"], "results": [] }, "cp_wf": { "applicationName": "espresso", "executableName": "cp.x", "input": [{ "name": "cp_wf.in" }], "monitors": ["standard_output"], "results": [] } }, "monitors": ["standard_output"], "results": [] }, "dos.x": { "flavors": { "dos": { "applicationName": "espresso", "executableName": "dos.x", "input": [{ "name": "dos.in" }], "monitors": ["standard_output"], "results": ["density_of_states"] } }, "monitors": ["standard_output"], "results": ["density_of_states"] }, "dynmat.x": { "flavors": { "dynmat": { "applicationName": "espresso", "executableName": "dynmat.x", "input": [{ "name": "dynmat_grid.in" }], "monitors": ["standard_output"], "results": [] } }, "monitors": ["standard_output"], "results": [] }, "epsilon.x": { "flavors": { "dielectric_tensor": { "applicationName": "espresso", "executableName": "epsilon.x", "input": [{ "name": "epsilon.in" }], "monitors": ["standard_output"], "results": ["dielectric_tensor"] } }, "monitors": ["standard_output"], "results": ["dielectric_tensor"] }, "gw.x": { "flavors": { "gw_bands_full_frequency": { "applicationName": "espresso", "executableName": "gw.x", "input": [{ "name": "gw_bands_full_frequency.in" }], "monitors": ["standard_output"], "results": ["band_structure", "fermi_energy", "band_gaps"] }, "gw_bands_plasmon_pole": { "applicationName": "espresso", "executableName": "gw.x", "input": [{ "name": "gw_bands_plasmon_pole.in" }], "monitors": ["standard_output"], "results": ["band_structure", "fermi_energy", "band_gaps"] } }, "monitors": ["standard_output"], "results": ["band_structure", "fermi_energy", "band_gaps"] }, "gww.x": { "flavors": { "gww_simple": { "applicationName": "espresso", "executableName": "gww.x", "input": [{ "name": "gww_simple.in" }], "monitors": ["standard_output"], "results": [] } }, "monitors": ["standard_output"], "results": [] }, "head.x": { "flavors": { "head_simple": { "applicationName": "espresso", "executableName": "head.x", "input": [{ "name": "head_simple.in" }], "monitors": ["standard_output"], "results": [] } }, "monitors": ["standard_output"], "results": [] }, "hp.x": { "flavors": { "hp": { "applicationName": "espresso", "executableName": "hp.x", "input": [{ "name": "hp.in" }], "monitors": ["standard_output"], "results": ["hubbard_u", "hubbard_v_nn", "hubbard_v"] } }, "monitors": ["standard_output"], "results": ["hubbard_u", "hubbard_v_nn", "hubbard_v"], "supportedApplicationVersions": ["7.0", "7.2", "7.3"] }, "matdyn.x": { "flavors": { "matdyn_grid": { "applicationName": "espresso", "executableName": "matdyn.x", "input": [{ "name": "matdyn_grid.in" }], "monitors": ["standard_output"], "results": ["phonon_dos"] }, "matdyn_path": { "applicationName": "espresso", "executableName": "matdyn.x", "input": [{ "name": "matdyn_path.in" }], "monitors": ["standard_output"], "results": ["phonon_dispersions"] } }, "monitors": ["standard_output"], "results": ["phonon_dos", "phonon_dispersions"] }, "neb.x": { "flavors": { "neb": { "applicationName": "espresso", "executableName": "neb.x", "input": [{ "name": "neb.in" }], "isMultiMaterial": true, "monitors": ["standard_output"], "results": ["reaction_energy_barrier", "reaction_energy_profile"] } }, "monitors": ["standard_output"], "results": ["reaction_energy_barrier", "reaction_energy_profile"] }, "ph.x": { "flavors": { "ph_gamma": { "applicationName": "espresso", "executableName": "ph.x", "input": [{ "name": "ph_gamma.in" }], "monitors": ["standard_output"], "results": ["zero_point_energy"] }, "ph_grid": { "applicationName": "espresso", "executableName": "ph.x", "input": [{ "name": "ph_grid.in" }], "monitors": ["standard_output"], "results": ["phonon_dos"] }, "ph_grid_restart": { "applicationName": "espresso", "executableName": "ph.x", "input": [{ "name": "ph_grid_restart.in" }], "monitors": ["standard_output"], "results": [] }, "ph_init_qpoints": { "applicationName": "espresso", "executableName": "ph.x", "input": [{ "name": "ph_init_qpoints.in" }], "monitors": ["standard_output"], "results": [] }, "ph_path": { "applicationName": "espresso", "executableName": "ph.x", "input": [{ "name": "ph_path.in" }], "monitors": ["standard_output"], "results": ["phonon_dispersions"] }, "ph_single_irr_qpt": { "applicationName": "espresso", "executableName": "ph.x", "input": [{ "name": "ph_single_irr_qpt.in" }], "monitors": ["standard_output"], "results": [] } }, "monitors": ["standard_output"], "results": ["phonon_dos", "phonon_dispersions", "zero_point_energy"] }, "pp.x": { "flavors": { "pp_density": { "applicationName": "espresso", "executableName": "pp.x", "input": [{ "name": "pp_density.in" }], "monitors": ["standard_output"], "results": [] }, "pp_electrostatic_potential": { "applicationName": "espresso", "executableName": "pp.x", "input": [{ "name": "pp_electrostatic_potential.in" }], "monitors": ["standard_output"], "results": [] } }, "monitors": ["standard_output"], "results": [] }, "projwfc.x": { "flavors": { "projwfc": { "applicationName": "espresso", "executableName": "projwfc.x", "input": [{ "name": "projwfc.in" }], "monitors": ["standard_output"], "results": ["density_of_states"] } }, "monitors": ["standard_output"], "results": ["density_of_states"] }, "pw.x": { "flavors": { "pw_bands": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_bands.in" }], "monitors": ["standard_output"], "results": ["band_structure"] }, "pw_bands_dft_u+j_magn": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_bands_dft_j_magn.in" }], "monitors": ["standard_output"], "results": ["band_structure"], "supportedApplicationVersions": ["7.2", "7.3"] }, "pw_bands_dft_u+v_magn": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_bands_dft_v_magn.in" }], "monitors": ["standard_output"], "results": ["band_structure"], "supportedApplicationVersions": ["7.2", "7.3"] }, "pw_bands_dft_u_magn": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_bands_dft_u_magn.in" }], "monitors": ["standard_output"], "results": ["band_structure"], "supportedApplicationVersions": ["7.2", "7.3"] }, "pw_bands_dft_u_magn_legacy": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_bands_dft_u_magn_legacy.in" }], "monitors": ["standard_output"], "results": ["band_structure"], "supportedApplicationVersions": ["6.3", "6.4.1", "6.5.0", "6.6.0", "6.7.0", "6.8.0", "7.0"] }, "pw_bands_dft_u_soc": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_bands_dft_u_soc.in" }], "monitors": ["standard_output"], "results": ["band_structure"], "supportedApplicationVersions": ["7.2", "7.3"] }, "pw_bands_dft_u_soc_legacy": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_bands_dft_u_soc_legacy.in" }], "monitors": ["standard_output"], "results": ["band_structure"], "supportedApplicationVersions": ["6.3", "6.4.1", "6.5.0", "6.6.0", "6.7.0", "6.8.0", "7.0"] }, "pw_bands_magn": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_bands_magn.in" }], "monitors": ["standard_output"], "results": ["band_structure"] }, "pw_bands_soc": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_bands_soc.in" }], "monitors": ["standard_output"], "results": ["band_structure"] }, "pw_esm": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_esm.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor", "potential_profile", "charge_density_profile"] }, "pw_esm_relax": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_esm_relax.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor", "potential_profile", "charge_density_profile"] }, "pw_md": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_md.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"] }, "pw_nscf": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_nscf.in" }], "monitors": ["standard_output"], "results": ["fermi_energy", "band_gaps"] }, "pw_nscf_dft_u+j_magn": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_nscf_dft_j_magn.in" }], "monitors": ["standard_output"], "results": ["fermi_energy", "band_gaps"], "supportedApplicationVersions": ["7.2", "7.3"] }, "pw_nscf_dft_u+v_magn": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_nscf_dft_v_magn.in" }], "monitors": ["standard_output"], "results": ["fermi_energy", "band_gaps"], "supportedApplicationVersions": ["7.2", "7.3"] }, "pw_nscf_dft_u_magn": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_nscf_dft_u_magn.in" }], "monitors": ["standard_output"], "results": ["fermi_energy", "band_gaps"], "supportedApplicationVersions": ["7.2", "7.3"] }, "pw_nscf_dft_u_magn_legacy": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_nscf_dft_u_magn_legacy.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "supportedApplicationVersions": ["6.3", "6.4.1", "6.5.0", "6.6.0", "6.7.0", "6.8.0", "7.0"] }, "pw_nscf_dft_u_soc": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_nscf_dft_u_soc.in" }], "monitors": ["standard_output"], "results": ["fermi_energy", "band_gaps"], "supportedApplicationVersions": ["7.2", "7.3"] }, "pw_nscf_dft_u_soc_legacy": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_nscf_dft_u_soc_legacy.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "supportedApplicationVersions": ["6.3", "6.4.1", "6.5.0", "6.6.0", "6.7.0", "6.8.0", "7.0"] }, "pw_nscf_magn": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_nscf_magn.in" }], "monitors": ["standard_output"], "results": ["fermi_energy", "band_gaps"] }, "pw_nscf_soc": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_nscf_soc.in" }], "monitors": ["standard_output"], "results": ["fermi_energy", "band_gaps"] }, "pw_relax": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_relax.in" }], "monitors": ["standard_output", "convergence_electronic", "convergence_ionic"], "results": ["total_energy", "fermi_energy", "pressure", "atomic_forces", "total_force", "stress_tensor", "final_structure"] }, "pw_scf": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf.in" }], "isDefault": true, "monitors": ["standard_output", "convergence_electronic"], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"] }, "pw_scf_bands_hse": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_bands_hse.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"] }, "pw_scf_dft_u": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_dft_u.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "supportedApplicationVersions": ["7.2", "7.3"] }, "pw_scf_dft_u+j": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_dft_j.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "supportedApplicationVersions": ["7.2", "7.3"] }, "pw_scf_dft_u+j_magn": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_dft_j_magn.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "supportedApplicationVersions": ["7.2", "7.3"] }, "pw_scf_dft_u+v": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_dft_v.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "supportedApplicationVersions": ["7.2", "7.3"] }, "pw_scf_dft_u+v_magn": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_dft_v_magn.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "supportedApplicationVersions": ["7.2", "7.3"] }, "pw_scf_dft_u_legacy": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_dft_u_legacy.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "supportedApplicationVersions": ["6.3", "6.4.1", "6.5.0", "6.6.0", "6.7.0", "6.8.0", "7.0"] }, "pw_scf_dft_u_magn": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_dft_u_magn.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "supportedApplicationVersions": ["7.2", "7.3"] }, "pw_scf_dft_u_magn_legacy": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_dft_u_magn_legacy.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "supportedApplicationVersions": ["6.3", "6.4.1", "6.5.0", "6.6.0", "6.7.0", "6.8.0", "7.0"] }, "pw_scf_dft_u_soc": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_dft_u_soc.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "supportedApplicationVersions": ["7.2", "7.3"] }, "pw_scf_dft_u_soc_legacy": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_dft_u_soc_legacy.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "supportedApplicationVersions": ["6.3", "6.4.1", "6.5.0", "6.6.0", "6.7.0", "6.8.0", "7.0"] }, "pw_scf_hse": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_hse.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"] }, "pw_scf_kpt_conv": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_kpt_conv.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["total_energy", "fermi_energy", "pressure", "atomic_forces", "total_force", "stress_tensor"] }, "pw_scf_magn": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_magn.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"] }, "pw_scf_soc": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_soc.in" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"] }, "pw_vc-relax": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_vc_relax.in" }], "monitors": ["standard_output", "convergence_electronic", "convergence_ionic"], "results": ["total_energy", "fermi_energy", "pressure", "atomic_forces", "total_force", "stress_tensor", "final_structure"] } }, "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "postProcessors": ["remove_non_zero_weight_kpoints"], "results": ["atomic_forces", "band_gaps", "band_structure", "charge_density_profile", "density_of_states", "fermi_energy", "final_structure", "magnetic_moments", "potential_profile", "pressure", "reaction_energy_barrier", "reaction_energy_profile", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"] }, "pw4gww.x": { "flavors": { "pw4gww_simple": { "applicationName": "espresso", "executableName": "pw4gww.x", "input": [{ "name": "pw4gww_simple.in" }], "monitors": ["standard_output"], "results": [] } }, "monitors": ["standard_output"], "results": [] }, "q2r.x": { "flavors": { "q2r": { "applicationName": "espresso", "executableName": "q2r.x", "input": [{ "name": "q2r.in" }], "monitors": ["standard_output"], "results": [] } }, "monitors": ["standard_output"], "results": [] }, "simple.x": { "flavors": { "simple": { "applicationName": "espresso", "executableName": "simple.x", "input": [{ "name": "simple.in" }], "monitors": ["standard_output"], "results": [] } }, "monitors": ["standard_output"], "results": [] }, "simple_bse.x": { "flavors": { "simple_bse": { "applicationName": "espresso", "executableName": "simple_bse.x", "input": [{ "name": "simple_bse.in" }], "monitors": ["standard_output"], "results": [] } }, "monitors": ["standard_output"], "results": [] }, "simple_ip.x": { "flavors": { "simple_ip": { "applicationName": "espresso", "executableName": "simple_ip.x", "input": [{ "name": "simple_ip.in" }], "monitors": ["standard_output"], "results": [] } }, "monitors": ["standard_output"], "results": [] } }, "nwchem": { "nwchem": { "flavors": { "nwchem_total_energy": { "applicationName": "nwchem", "executableName": "nwchem", "input": [{ "name": "nwchem_total_energy.inp" }], "isDefault": true, "monitors": ["standard_output"], "results": ["total_energy", "total_energy_contributions"] } }, "hasAdvancedComputeOptions": false, "isDefault": true, "monitors": ["standard_output"], "postProcessors": ["error_handler"], "results": ["total_energy", "total_energy_contributions"] } }, "python": { "python": { "flavors": { "espresso_extract_kpoints": { "applicationName": "python", "executableName": "python", "input": [{ "name": "espresso_extract_kpoints.py" }, { "name": "requirements.txt", "templateName": "requirements_empty.txt" }], "monitors": ["standard_output"] }, "espresso_xml_get_qpt_irr": { "applicationName": "python", "executableName": "python", "input": [{ "name": "espresso_xml_get_qpt_irr.py" }], "monitors": ["standard_output"] }, "generic:post_processing:plot:matplotlib": { "applicationName": "python", "executableName": "python", "input": [{ "name": "plot.py", "templateName": "matplotlib_basic.py" }, { "name": "requirements.txt", "templateName": "processing_requirements.txt" }], "monitors": ["standard_output"] }, "generic:processing:find_extrema:scipy": { "applicationName": "python", "executableName": "python", "input": [{ "name": "find_extrema.py", "templateName": "find_extrema.py" }, { "name": "requirements.txt", "templateName": "processing_requirements.txt" }], "monitors": ["standard_output"] }, "hello_world": { "applicationName": "python", "executableName": "python", "input": [{ "name": "script.py", "templateName": "hello_world.py" }, { "name": "requirements.txt" }], "isDefault": true, "monitors": ["standard_output"] }, "pyml:custom": { "applicationName": "python", "executableName": "python", "input": [{ "name": "pyml_custom.py", "templateName": "pyml_custom.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"] }, "pyml:data_input:read_csv:pandas": { "applicationName": "python", "executableName": "python", "input": [{ "name": "data_input_read_csv_pandas.py", "templateName": "data_input_read_csv_pandas.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"] }, "pyml:data_input:train_test_split:sklearn": { "applicationName": "python", "executableName": "python", "input": [{ "name": "data_input_train_test_split_sklearn.py", "templateName": "data_input_train_test_split_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"] }, "pyml:model:adaboosted_trees_regression:sklearn": { "applicationName": "python", "executableName": "python", "input": [{ "name": "model_adaboosted_trees_regression_sklearn.py", "templateName": "model_adaboosted_trees_regression_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "results": ["workflow:pyml_predict"] }, "pyml:model:bagged_trees_regression:sklearn": { "applicationName": "python", "executableName": "python", "input": [{ "name": "model_bagged_trees_regression_sklearn.py", "templateName": "model_bagged_trees_regression_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "results": ["workflow:pyml_predict"] }, "pyml:model:extreme_gradboosted_trees_classification:sklearn": { "applicationName": "python", "executableName": "python", "input": [{ "name": "model_extreme_gradboosted_trees_classification_sklearn.py", "templateName": "model_extreme_gradboosted_trees_classification_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "results": ["workflow:pyml_predict"] }, "pyml:model:extreme_gradboosted_trees_regression:sklearn": { "applicationName": "python", "executableName": "python", "input": [{ "name": "model_extreme_gradboosted_trees_regression_sklearn.py", "templateName": "model_extreme_gradboosted_trees_regression_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "results": ["workflow:pyml_predict"] }, "pyml:model:gradboosted_trees_classification:sklearn": { "applicationName": "python", "executableName": "python", "input": [{ "name": "model_gradboosted_trees_classification_sklearn.py", "templateName": "model_gradboosted_trees_classification_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "results": ["workflow:pyml_predict"] }, "pyml:model:gradboosted_trees_regression:sklearn": { "applicationName": "python", "executableName": "python", "input": [{ "name": "model_gradboosted_trees_regression_sklearn.py", "templateName": "model_gradboosted_trees_regression_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "results": ["workflow:pyml_predict"] }, "pyml:model:k_means_clustering:sklearn": { "applicationName": "python", "executableName": "python", "input": [{ "name": "model_k_means_clustering_sklearn.py", "templateName": "model_k_means_clustering_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "results": ["workflow:pyml_predict"] }, "pyml:model:kernel_ridge_regression:sklearn": { "applicationName": "python", "executableName": "python", "input": [{ "name": "model_kernel_ridge_regression_sklearn.py", "templateName": "model_kernel_ridge_regression_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "results": ["workflow:pyml_predict"] }, "pyml:model:lasso_regression:sklearn": { "applicationName": "python", "executableName": "python", "input": [{ "name": "model_lasso_regression_sklearn.py", "templateName": "model_lasso_regression_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "results": ["workflow:pyml_predict"] }, "pyml:model:multilayer_perceptron:sklearn": { "applicationName": "python", "executableName": "python", "input": [{ "name": "model_mlp_sklearn.py", "templateName": "model_mlp_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "results": ["workflow:pyml_predict"] }, "pyml:model:random_forest_classification:sklearn": { "applicationName": "python", "executableName": "python", "input": [{ "name": "model_random_forest_classification_sklearn.py", "templateName": "model_random_forest_classification_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "results": ["workflow:pyml_predict"] }, "pyml:model:random_forest_regression:sklearn": { "applicationName": "python", "executableName": "python", "input": [{ "name": "model_random_forest_regression_sklearn.py", "templateName": "model_random_forest_regression_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "results": ["workflow:pyml_predict"] }, "pyml:model:ridge_regression:sklearn": { "applicationName": "python", "executableName": "python", "input": [{ "name": "model_ridge_regression_sklearn.py", "templateName": "model_ridge_regression_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "results": ["workflow:pyml_predict"] }, "pyml:post_processing:parity_plot:matplotlib": { "applicationName": "python", "executableName": "python", "input": [{ "name": "post_processing_parity_plot_matplotlib.py", "templateName": "post_processing_parity_plot_matplotlib.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "results": ["file_content"] }, "pyml:post_processing:pca_2d_clusters:matplotlib": { "applicationName": "python", "executableName": "python", "input": [{ "name": "post_processing_pca_2d_clusters_matplotlib.py", "templateName": "post_processing_pca_2d_clusters_matplotlib.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "results": ["file_content"] }, "pyml:post_processing:roc_curve:sklearn": { "applicationName": "python", "executableName": "python", "input": [{ "name": "post_processing_roc_curve_sklearn.py", "templateName": "post_processing_roc_curve_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "results": ["file_content"] }, "pyml:pre_processing:min_max_scaler:sklearn": { "applicationName": "python", "executableName": "python", "input": [{ "name": "pre_processing_min_max_sklearn.py", "templateName": "pre_processing_min_max_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"] }, "pyml:pre_processing:remove_duplicates:pandas": { "applicationName": "python", "executableName": "python", "input": [{ "name": "pre_processing_remove_duplicates_pandas.py", "templateName": "pre_processing_remove_duplicates_pandas.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"] }, "pyml:pre_processing:remove_missing:pandas": { "applicationName": "python", "executableName": "python", "input": [{ "name": "pre_processing_remove_missing_pandas.py", "templateName": "pre_processing_remove_missing_pandas.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"] }, "pyml:pre_processing:standardization:sklearn": { "applicationName": "python", "executableName": "python", "input": [{ "name": "pre_processing_standardization_sklearn.py", "templateName": "pre_processing_standardization_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"] }, "pyml:setup_variables_packages": { "applicationName": "python", "executableName": "python", "input": [{ "name": "settings.py", "templateName": "pyml_settings.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"] } }, "isDefault": true, "monitors": ["standard_output"], "results": ["file_content", "workflow:pyml_predict"] } }, "shell": { "sh": { "flavors": { "bash_vasp_prepare_neb_images": { "applicationName": "shell", "executableName": "sh", "input": [{ "name": "bash_vasp_prepare_neb_images.sh" }], "isMultiMaterial": true, "monitors": ["standard_output"] }, "espresso_collect_dynmat": { "applicationName": "shell", "executableName": "sh", "input": [{ "name": "espresso_collect_dynmat.sh" }], "monitors": ["standard_output"] }, "espresso_link_outdir_save": { "applicationName": "shell", "executableName": "sh", "input": [{ "name": "espresso_link_outdir_save.sh" }], "monitors": ["standard_output"] }, "hello_world": { "applicationName": "shell", "executableName": "sh", "input": [{ "name": "hello_world.sh" }], "isDefault": true, "monitors": ["standard_output"] }, "job_espresso_pw_scf": { "applicationName": "shell", "executableName": "sh", "input": [{ "name": "job_espresso_pw_scf.sh" }], "monitors": ["standard_output"] } }, "isDefault": true, "monitors": ["standard_output"], "results": ["atomic_forces", "band_gaps", "band_structure", "density_of_states", "fermi_energy", "phonon_dispersions", "phonon_dos", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "zero_point_energy", "final_structure", "magnetic_moments", "reaction_energy_barrier", "reaction_energy_profile", "potential_profile", "charge_density_profile"] } }, "vasp": { "vasp": { "flavors": { "vasp": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR" }, { "name": "KPOINTS" }, { "name": "POSCAR" }], "isDefault": true, "monitors": ["standard_output", "convergence_electronic"], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"] }, "vasp_bands": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_BANDS" }, { "name": "KPOINTS", "templateName": "KPOINTS_BANDS" }, { "name": "POSCAR", "templateName": "" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["band_structure"] }, "vasp_bands_hse": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_BANDS_HSE" }, { "name": "KPOINTS", "templateName": "KPOINTS_BANDS" }, { "name": "POSCAR", "templateName": "" }], "isDefault": false, "monitors": ["standard_output", "convergence_electronic"], "results": ["band_structure"] }, "vasp_hse": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_HSE" }, { "name": "KPOINTS" }, { "name": "POSCAR" }], "isDefault": false, "monitors": ["standard_output", "convergence_electronic"], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"] }, "vasp_kpt_conv": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR" }, { "name": "KPOINTS", "templateName": "KPOINTS_CONV" }, { "name": "POSCAR", "templateName": "POSCAR" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"] }, "vasp_neb": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_NEB" }, { "name": "KPOINTS", "templateName": "KPOINTS" }], "isMultiMaterial": true, "monitors": ["standard_output"], "results": ["reaction_energy_barrier", "reaction_energy_profile"] }, "vasp_neb_final": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_NEB_INITIAL_FINAL" }, { "name": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR_NEB_FINAL" }], "isMultiMaterial": true, "monitors": ["standard_output", "convergence_electronic"], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"] }, "vasp_neb_initial": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_NEB_INITIAL_FINAL" }, { "name": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR_NEB_INITIAL" }], "isMultiMaterial": true, "monitors": ["standard_output", "convergence_electronic"], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"] }, "vasp_nscf": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_BANDS" }, { "name": "KPOINTS", "templateName": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["band_gaps", "fermi_energy"] }, "vasp_nscf_hse": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_BANDS_HSE" }, { "name": "KPOINTS", "templateName": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR" }], "isDefault": false, "monitors": ["standard_output", "convergence_electronic"], "results": ["band_gaps", "fermi_energy"] }, "vasp_relax": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_RELAX" }, { "name": "KPOINTS", "templateName": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR" }], "monitors": ["standard_output", "convergence_electronic", "convergence_ionic"], "postProcessors": ["prepare_restart"], "results": ["total_energy", "atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_force", "final_structure"] }, "vasp_symprec": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_SYMPREC" }, { "name": "KPOINTS" }, { "name": "POSCAR" }], "monitors": ["standard_output", "convergence_electronic"], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"] }, "vasp_vc_relax": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_VC_RELAX" }, { "name": "KPOINTS", "templateName": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR" }], "monitors": ["standard_output", "convergence_electronic", "convergence_ionic"], "postProcessors": ["prepare_restart"], "results": ["total_energy", "atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_force", "final_structure"] }, "vasp_vc_relax_conv": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_VC_RELAX" }, { "name": "KPOINTS", "templateName": "KPOINTS_CONV" }, { "name": "POSCAR", "templateName": "POSCAR" }], "monitors": ["standard_output", "convergence_electronic", "convergence_ionic"], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"] }, "vasp_zpe": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_ZPE" }, { "name": "KPOINTS", "templateName": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR" }], "monitors": ["standard_output", "convergence_electronic", "convergence_ionic"], "results": ["total_energy", "fermi_energy", "pressure", "atomic_forces", "stress_tensor", "total_force", "zero_point_energy"] } }, "isDefault": true, "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "results": ["atomic_forces", "band_gaps", "band_structure", "density_of_states", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "zero_point_energy", "final_structure", "magnetic_moments", "reaction_energy_barrier", "reaction_energy_profile", "potential_profile", "charge_density_profile"] } } } +{"espresso":{"abcoeff_to_eps.x":{"flavors":{"abcoeff_to_eps_simple":{"applicationName":"espresso","executableName":"abcoeff_to_eps.x","input":[{"name":"abcoeff_to_eps_simple.in"}],"monitors":[{"name":"standard_output"}],"results":[]}},"monitors":[{"name":"standard_output"}],"results":[]},"average.x":{"flavors":{"average":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"results":[]},"average_potential":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"average_potential_profile"}]}},"monitors":[{"name":"standard_output"}],"results":[{"name":"average_potential_profile"}]},"bands.x":{"flavors":{"bands":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}]},"bands_spin_dn":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_dn.in"}],"monitors":[{"name":"standard_output"}]},"bands_spin_up":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_up.in"}],"monitors":[{"name":"standard_output"}]}},"monitors":[{"name":"standard_output"}],"results":[{"name":"band_structure"}]},"cp.x":{"flavors":{"cp":{"applicationName":"espresso","executableName":"cp.x","input":[{"name":"cp.in"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"results":[]},"cp_wf":{"applicationName":"espresso","executableName":"cp.x","input":[{"name":"cp_wf.in"}],"monitors":[{"name":"standard_output"}],"results":[]}},"monitors":[{"name":"standard_output"}],"results":[]},"dos.x":{"flavors":{"dos":{"applicationName":"espresso","executableName":"dos.x","input":[{"name":"dos.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"density_of_states"}]}},"monitors":[{"name":"standard_output"}],"results":[{"name":"density_of_states"}]},"dynmat.x":{"flavors":{"dynmat":{"applicationName":"espresso","executableName":"dynmat.x","input":[{"name":"dynmat_grid.in"}],"monitors":[{"name":"standard_output"}],"results":[]}},"monitors":[{"name":"standard_output"}],"results":[]},"epsilon.x":{"flavors":{"dielectric_tensor":{"applicationName":"espresso","executableName":"epsilon.x","input":[{"name":"epsilon.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"dielectric_tensor"}]}},"monitors":[{"name":"standard_output"}],"results":[{"name":"dielectric_tensor"}]},"gw.x":{"flavors":{"gw_bands_full_frequency":{"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_full_frequency.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}]},"gw_bands_plasmon_pole":{"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_plasmon_pole.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}]}},"monitors":[{"name":"standard_output"}],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}]},"gww.x":{"flavors":{"gww_simple":{"applicationName":"espresso","executableName":"gww.x","input":[{"name":"gww_simple.in"}],"monitors":[{"name":"standard_output"}],"results":[]}},"monitors":[{"name":"standard_output"}],"results":[]},"head.x":{"flavors":{"head_simple":{"applicationName":"espresso","executableName":"head.x","input":[{"name":"head_simple.in"}],"monitors":[{"name":"standard_output"}],"results":[]}},"monitors":[{"name":"standard_output"}],"results":[]},"hp.x":{"flavors":{"hp":{"applicationName":"espresso","executableName":"hp.x","input":[{"name":"hp.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"hubbard_u"},{"name":"hubbard_v_nn"},{"name":"hubbard_v"}]}},"monitors":[{"name":"standard_output"}],"results":[{"name":"hubbard_u"},{"name":"hubbard_v_nn"},{"name":"hubbard_v"}],"supportedApplicationVersions":["7.0","7.2","7.3"]},"matdyn.x":{"flavors":{"matdyn_grid":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"phonon_dos"}]},"matdyn_path":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"phonon_dispersions"}]}},"monitors":[{"name":"standard_output"}],"results":[{"name":"phonon_dos"},{"name":"phonon_dispersions"}]},"neb.x":{"flavors":{"neb":{"applicationName":"espresso","executableName":"neb.x","input":[{"name":"neb.in"}],"isMultiMaterial":true,"monitors":[{"name":"standard_output"}],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}]}},"monitors":[{"name":"standard_output"}],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}]},"ph.x":{"flavors":{"ph_gamma":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"zero_point_energy"}]},"ph_grid":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"phonon_dos"}]},"ph_grid_restart":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid_restart.in"}],"monitors":[{"name":"standard_output"}],"results":[]},"ph_init_qpoints":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_init_qpoints.in"}],"monitors":[{"name":"standard_output"}],"results":[]},"ph_path":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_path.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"phonon_dispersions"}]},"ph_single_irr_qpt":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_single_irr_qpt.in"}],"monitors":[{"name":"standard_output"}],"results":[]}},"monitors":[{"name":"standard_output"}],"results":[{"name":"phonon_dos"},{"name":"phonon_dispersions"},{"name":"zero_point_energy"}]},"pp.x":{"flavors":{"pp_density":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_density.in"}],"monitors":[{"name":"standard_output"}],"results":[]},"pp_electrostatic_potential":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":[{"name":"standard_output"}],"results":[]},"pp_wfn":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"wavefunction_amplitude"}]}},"monitors":[{"name":"standard_output"}],"results":[]},"projwfc.x":{"flavors":{"projwfc":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"density_of_states"}]}},"monitors":[{"name":"standard_output"}],"results":[{"name":"density_of_states"}]},"pw.x":{"flavors":{"pw_bands":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"band_structure"}]},"pw_bands_dft_u+j_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_dft_j_magn.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"band_structure"}],"supportedApplicationVersions":["7.2","7.3"]},"pw_bands_dft_u+v_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_dft_v_magn.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"band_structure"}],"supportedApplicationVersions":["7.2","7.3"]},"pw_bands_dft_u_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_dft_u_magn.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"band_structure"}],"supportedApplicationVersions":["7.2","7.3"]},"pw_bands_dft_u_magn_legacy":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_dft_u_magn_legacy.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"band_structure"}],"supportedApplicationVersions":["6.3","6.4.1","6.5.0","6.6.0","6.7.0","6.8.0","7.0"]},"pw_bands_dft_u_soc":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_dft_u_soc.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"band_structure"}],"supportedApplicationVersions":["7.2","7.3"]},"pw_bands_dft_u_soc_legacy":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_dft_u_soc_legacy.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"band_structure"}],"supportedApplicationVersions":["6.3","6.4.1","6.5.0","6.6.0","6.7.0","6.8.0","7.0"]},"pw_bands_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_magn.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"band_structure"}]},"pw_bands_soc":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_soc.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"band_structure"}]},"pw_esm":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}]},"pw_esm_relax":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}]},"pw_md":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_md.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}]},"pw_nscf":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}]},"pw_nscf_dft_u+j_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf_dft_j_magn.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"supportedApplicationVersions":["7.2","7.3"]},"pw_nscf_dft_u+v_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf_dft_v_magn.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"supportedApplicationVersions":["7.2","7.3"]},"pw_nscf_dft_u_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf_dft_u_magn.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"supportedApplicationVersions":["7.2","7.3"]},"pw_nscf_dft_u_magn_legacy":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf_dft_u_magn_legacy.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"supportedApplicationVersions":["6.3","6.4.1","6.5.0","6.6.0","6.7.0","6.8.0","7.0"]},"pw_nscf_dft_u_soc":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf_dft_u_soc.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"supportedApplicationVersions":["7.2","7.3"]},"pw_nscf_dft_u_soc_legacy":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf_dft_u_soc_legacy.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"supportedApplicationVersions":["6.3","6.4.1","6.5.0","6.6.0","6.7.0","6.8.0","7.0"]},"pw_nscf_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf_magn.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}]},"pw_nscf_soc":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf_soc.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}]},"pw_relax":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}]},"pw_scf":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}]},"pw_scf_bands_hse":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_bands_hse.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}]},"pw_scf_dft_u":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_dft_u.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"supportedApplicationVersions":["7.2","7.3"]},"pw_scf_dft_u+j":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_dft_j.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"supportedApplicationVersions":["7.2","7.3"]},"pw_scf_dft_u+j_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_dft_j_magn.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"supportedApplicationVersions":["7.2","7.3"]},"pw_scf_dft_u+v":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_dft_v.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"supportedApplicationVersions":["7.2","7.3"]},"pw_scf_dft_u+v_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_dft_v_magn.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"supportedApplicationVersions":["7.2","7.3"]},"pw_scf_dft_u_legacy":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_dft_u_legacy.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"supportedApplicationVersions":["6.3","6.4.1","6.5.0","6.6.0","6.7.0","6.8.0","7.0"]},"pw_scf_dft_u_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_dft_u_magn.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"supportedApplicationVersions":["7.2","7.3"]},"pw_scf_dft_u_magn_legacy":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_dft_u_magn_legacy.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"supportedApplicationVersions":["6.3","6.4.1","6.5.0","6.6.0","6.7.0","6.8.0","7.0"]},"pw_scf_dft_u_soc":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_dft_u_soc.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"supportedApplicationVersions":["7.2","7.3"]},"pw_scf_dft_u_soc_legacy":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_dft_u_soc_legacy.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"supportedApplicationVersions":["6.3","6.4.1","6.5.0","6.6.0","6.7.0","6.8.0","7.0"]},"pw_scf_hse":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_hse.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}]},"pw_scf_kpt_conv":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_kpt_conv.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}]},"pw_scf_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_magn.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}]},"pw_scf_soc":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_soc.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}]},"pw_vc-relax":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}]}},"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"band_structure"},{"name":"charge_density_profile"},{"name":"density_of_states"},{"name":"fermi_energy"},{"name":"final_structure"},{"name":"magnetic_moments"},{"name":"potential_profile"},{"name":"pressure"},{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}]},"pw4gww.x":{"flavors":{"pw4gww_simple":{"applicationName":"espresso","executableName":"pw4gww.x","input":[{"name":"pw4gww_simple.in"}],"monitors":[{"name":"standard_output"}],"results":[]}},"monitors":[{"name":"standard_output"}],"results":[]},"q2r.x":{"flavors":{"q2r":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"results":[]}},"monitors":[{"name":"standard_output"}],"results":[]},"simple.x":{"flavors":{"simple":{"applicationName":"espresso","executableName":"simple.x","input":[{"name":"simple.in"}],"monitors":[{"name":"standard_output"}],"results":[]}},"monitors":[{"name":"standard_output"}],"results":[]},"simple_bse.x":{"flavors":{"simple_bse":{"applicationName":"espresso","executableName":"simple_bse.x","input":[{"name":"simple_bse.in"}],"monitors":[{"name":"standard_output"}],"results":[]}},"monitors":[{"name":"standard_output"}],"results":[]},"simple_ip.x":{"flavors":{"simple_ip":{"applicationName":"espresso","executableName":"simple_ip.x","input":[{"name":"simple_ip.in"}],"monitors":[{"name":"standard_output"}],"results":[]}},"monitors":[{"name":"standard_output"}],"results":[]}},"nwchem":{"nwchem":{"flavors":{"nwchem_total_energy":{"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}]}},"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":[{"name":"standard_output"}],"postProcessors":[{"name":"error_handler"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}]}},"python":{"python":{"flavors":{"espresso_extract_kpoints":{"applicationName":"python","executableName":"python","input":[{"name":"espresso_extract_kpoints.py"},{"name":"requirements.txt","templateName":"requirements_empty.txt"}],"monitors":[{"name":"standard_output"}]},"espresso_xml_get_qpt_irr":{"applicationName":"python","executableName":"python","input":[{"name":"espresso_xml_get_qpt_irr.py"}],"monitors":[{"name":"standard_output"}]},"generic:post_processing:plot:matplotlib":{"applicationName":"python","executableName":"python","input":[{"name":"plot.py","templateName":"matplotlib_basic.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":[{"name":"standard_output"}]},"generic:processing:find_extrema:scipy":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":[{"name":"standard_output"}]},"hello_world":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":[{"name":"standard_output"}]},"plot_wavefunction":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"basename":"wf_r.png","filetype":"image","name":"file_content"}]},"pyml:custom":{"applicationName":"python","executableName":"python","input":[{"name":"pyml_custom.py","templateName":"pyml_custom.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}]},"pyml:data_input:read_csv:pandas":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}]},"pyml:data_input:train_test_split:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}]},"pyml:model:adaboosted_trees_regression:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_adaboosted_trees_regression_sklearn.py","templateName":"model_adaboosted_trees_regression_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"workflow:pyml_predict"}]},"pyml:model:bagged_trees_regression:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_bagged_trees_regression_sklearn.py","templateName":"model_bagged_trees_regression_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"workflow:pyml_predict"}]},"pyml:model:extreme_gradboosted_trees_classification:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_extreme_gradboosted_trees_classification_sklearn.py","templateName":"model_extreme_gradboosted_trees_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"workflow:pyml_predict"}]},"pyml:model:extreme_gradboosted_trees_regression:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_extreme_gradboosted_trees_regression_sklearn.py","templateName":"model_extreme_gradboosted_trees_regression_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"workflow:pyml_predict"}]},"pyml:model:gradboosted_trees_classification:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_gradboosted_trees_classification_sklearn.py","templateName":"model_gradboosted_trees_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"workflow:pyml_predict"}]},"pyml:model:gradboosted_trees_regression:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_gradboosted_trees_regression_sklearn.py","templateName":"model_gradboosted_trees_regression_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"workflow:pyml_predict"}]},"pyml:model:k_means_clustering:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_k_means_clustering_sklearn.py","templateName":"model_k_means_clustering_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"workflow:pyml_predict"}]},"pyml:model:kernel_ridge_regression:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_kernel_ridge_regression_sklearn.py","templateName":"model_kernel_ridge_regression_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"workflow:pyml_predict"}]},"pyml:model:lasso_regression:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_lasso_regression_sklearn.py","templateName":"model_lasso_regression_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"workflow:pyml_predict"}]},"pyml:model:multilayer_perceptron:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"workflow:pyml_predict"}]},"pyml:model:random_forest_classification:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"workflow:pyml_predict"}]},"pyml:model:random_forest_regression:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_regression_sklearn.py","templateName":"model_random_forest_regression_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"workflow:pyml_predict"}]},"pyml:model:ridge_regression:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_ridge_regression_sklearn.py","templateName":"model_ridge_regression_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"workflow:pyml_predict"}]},"pyml:post_processing:parity_plot:matplotlib":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"file_content"}]},"pyml:post_processing:pca_2d_clusters:matplotlib":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_pca_2d_clusters_matplotlib.py","templateName":"post_processing_pca_2d_clusters_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"file_content"}]},"pyml:post_processing:roc_curve:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"file_content"}]},"pyml:pre_processing:min_max_scaler:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_min_max_sklearn.py","templateName":"pre_processing_min_max_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}]},"pyml:pre_processing:remove_duplicates:pandas":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_remove_duplicates_pandas.py","templateName":"pre_processing_remove_duplicates_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}]},"pyml:pre_processing:remove_missing:pandas":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_remove_missing_pandas.py","templateName":"pre_processing_remove_missing_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}]},"pyml:pre_processing:standardization:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}]},"pyml:setup_variables_packages":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}]}},"isDefault":true,"monitors":[{"name":"standard_output"}],"results":[{"name":"file_content"},{"name":"workflow:pyml_predict"}]}},"shell":{"sh":{"flavors":{"bash_vasp_prepare_neb_images":{"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"isMultiMaterial":true,"monitors":[{"name":"standard_output"}]},"espresso_collect_dynmat":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_collect_dynmat.sh"}],"monitors":[{"name":"standard_output"}]},"espresso_link_outdir_save":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_link_outdir_save.sh"}],"monitors":[{"name":"standard_output"}]},"hello_world":{"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":[{"name":"standard_output"}]},"job_espresso_pw_scf":{"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"monitors":[{"name":"standard_output"}]}},"isDefault":true,"monitors":[{"name":"standard_output"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"band_structure"},{"name":"density_of_states"},{"name":"fermi_energy"},{"name":"phonon_dispersions"},{"name":"phonon_dos"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"},{"name":"zero_point_energy"},{"name":"final_structure"},{"name":"magnetic_moments"},{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"},{"name":"potential_profile"},{"name":"charge_density_profile"}]}},"vasp":{"vasp":{"flavors":{"vasp":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}]},"vasp_bands":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"band_structure"}]},"vasp_bands_hse":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS_HSE"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"band_structure"}]},"vasp_hse":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_HSE"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}]},"vasp_kpt_conv":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}]},"vasp_neb":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB"},{"name":"KPOINTS","templateName":"KPOINTS"}],"isMultiMaterial":true,"monitors":[{"name":"standard_output"}],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}]},"vasp_neb_final":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"isMultiMaterial":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}]},"vasp_neb_initial":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"isMultiMaterial":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}]},"vasp_nscf":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}]},"vasp_nscf_hse":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS_HSE"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}]},"vasp_relax":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"postProcessors":[{"name":"prepare_restart"}],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}]},"vasp_symprec":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_SYMPREC"},{"name":"KPOINTS"},{"name":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}]},"vasp_vc_relax":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_VC_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"postProcessors":[{"name":"prepare_restart"}],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}]},"vasp_vc_relax_conv":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_VC_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}]},"vasp_zpe":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_ZPE"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"zero_point_energy"}]}},"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"band_structure"},{"name":"density_of_states"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"},{"name":"zero_point_energy"},{"name":"final_structure"},{"name":"magnetic_moments"},{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"},{"name":"potential_profile"},{"name":"charge_density_profile"}]}}} diff --git a/dist/js/runtime_data/applications/modelMethodMapByApplication.json b/dist/js/runtime_data/applications/modelMethodMapByApplication.json index 222b9dfb..62cd193a 100644 --- a/dist/js/runtime_data/applications/modelMethodMapByApplication.json +++ b/dist/js/runtime_data/applications/modelMethodMapByApplication.json @@ -1 +1 @@ -{ "methods": { "espresso": { "6.3": { "GNU": { "pw.x": { "pw_scf": [{ "path": "/qm/wf/none/pw/none" }, { "path": "/qm/wf/none/smearing/gaussian" }, { "defaultPath": "/qm/wf/none/psp/us", "regex": "\\/qm\\/wf\\/none\\/psp\\/(nc|nc-fr|us|paw)" }, { "path": "/linalg/diag/none/davidson/none" }], "pw_scf_bands_hse": [{ "path": "/qm/wf/none/pw/none" }, { "path": "/qm/wf/none/smearing/gaussian" }, { "defaultPath": "/qm/wf/none/psp/us", "regex": "\\/qm\\/wf\\/none\\/psp\\/(nc|nc-fr|us|paw)" }, { "path": "/linalg/diag/none/davidson/none" }] } } } }, "nwchem": { "7.0.2": { "GNU": { "nwchem": { "nwchem_total_energy": [{ "path": "/qm/wf/none/ao/pople?basisSlug=6-31G" }] } } } }, "vasp": { "5.4.4": { "GNU": { "vasp": { "vasp": [{ "path": "/qm/wf/none/pw/none" }, { "path": "/qm/wf/none/psp/paw" }, { "path": "/linalg/diag/none/davidson/none" }, { "defaultPath": "/qm/wf/none/smearing/gaussian", "regex": "\\/qm\\/wf\\/none\\/smearing\\/(fermi-dirac|gaussian|methfessel-paxton)" }] } } } } }, "models": { "espresso": { "6.3": { "GNU": { "pw.x": { "pw_esm": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbesol" }], "pw_esm_relax": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbesol" }], "pw_nscf": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbesol" }], "pw_relax": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbesol" }], "pw_scf": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbesol" }], "pw_scf_bands_hse": [{ "path": "/pb/qm/dft/ksdft/hybrid?functional=hse06" }], "pw_vc-relax": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbesol" }] } } } }, "nwchem": { "7.0.2": { "GNU": { "nwchem": { "nwchem_total_energy": [{ "path": "/pb/qm/dft/ksdft/hybrid?functional=b3lyp" }] } } } }, "vasp": { "5.4.4": { "GNU": { "vasp": { "vasp": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_bands": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_bands_hse": [{ "path": "/pb/qm/dft/ksdft/hybrid?functional=hse06" }], "vasp_hse": [{ "path": "/pb/qm/dft/ksdft/hybrid?functional=hse06" }], "vasp_kpt_conv": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_ncsf": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_neb": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_neb_final": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_neb_initial": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_nscf_hse": [{ "path": "/pb/qm/dft/ksdft/hybrid?functional=hse06" }], "vasp_relax": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_vc_relax": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_vc_relax_conv": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_zpe": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }] } }, "Non-collinear": { "vasp": { "vasp": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_bands": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_bands_hse": [{ "path": "/pb/qm/dft/ksdft/hybrid?functional=hse06" }], "vasp_hse": [{ "path": "/pb/qm/dft/ksdft/hybrid?functional=hse06" }], "vasp_kpt_conv": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_ncsf": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_neb": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_neb_final": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_neb_initial": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_nscf_hse": [{ "path": "/pb/qm/dft/ksdft/hybrid?functional=hse06" }], "vasp_relax": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_vc_relax": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_vc_relax_conv": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_zpe": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }] } }, "VTST": { "vasp": { "vasp": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_bands": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_bands_hse": [{ "path": "/pb/qm/dft/ksdft/hybrid?functional=hse06" }], "vasp_hse": [{ "path": "/pb/qm/dft/ksdft/hybrid?functional=hse06" }], "vasp_kpt_conv": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_ncsf": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_neb": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_neb_final": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_neb_initial": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_nscf_hse": [{ "path": "/pb/qm/dft/ksdft/hybrid?functional=hse06" }], "vasp_relax": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_vc_relax": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_vc_relax_conv": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }], "vasp_zpe": [{ "path": "/pb/qm/dft/ksdft/lda?functional=pz" }, { "path": "/pb/qm/dft/ksdft/gga?functional=pbe" }] } } } } } } +{"methods":{"espresso":{"6.3":{"GNU":{"pw.x":{"pw_scf":[{"path":"/qm/wf/none/pw/none"},{"path":"/qm/wf/none/smearing/gaussian"},{"defaultPath":"/qm/wf/none/psp/us","regex":"\\/qm\\/wf\\/none\\/psp\\/(nc|nc-fr|us|paw)"},{"path":"/linalg/diag/none/davidson/none"}],"pw_scf_bands_hse":[{"path":"/qm/wf/none/pw/none"},{"path":"/qm/wf/none/smearing/gaussian"},{"defaultPath":"/qm/wf/none/psp/us","regex":"\\/qm\\/wf\\/none\\/psp\\/(nc|nc-fr|us|paw)"},{"path":"/linalg/diag/none/davidson/none"}]}}}},"nwchem":{"7.0.2":{"GNU":{"nwchem":{"nwchem_total_energy":[{"path":"/qm/wf/none/ao/pople?basisSlug=6-31G"}]}}}},"vasp":{"5.4.4":{"GNU":{"vasp":{"vasp":[{"path":"/qm/wf/none/pw/none"},{"path":"/qm/wf/none/psp/paw"},{"path":"/linalg/diag/none/davidson/none"},{"defaultPath":"/qm/wf/none/smearing/gaussian","regex":"\\/qm\\/wf\\/none\\/smearing\\/(fermi-dirac|gaussian|methfessel-paxton)"}]}}}}},"models":{"espresso":{"6.3":{"GNU":{"pw.x":{"pw_esm":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbesol"}],"pw_esm_relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbesol"}],"pw_nscf":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbesol"}],"pw_relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbesol"}],"pw_scf":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbesol"}],"pw_scf_bands_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"pw_vc-relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbesol"}]}}}},"nwchem":{"7.0.2":{"GNU":{"nwchem":{"nwchem_total_energy":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=b3lyp"}]}}}},"vasp":{"5.4.4":{"GNU":{"vasp":{"vasp":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_bands":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_bands_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_kpt_conv":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_ncsf":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb_final":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb_initial":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_nscf_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_vc_relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_vc_relax_conv":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_zpe":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}]}},"Non-collinear":{"vasp":{"vasp":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_bands":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_bands_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_kpt_conv":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_ncsf":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb_final":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb_initial":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_nscf_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_vc_relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_vc_relax_conv":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_zpe":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}]}},"VTST":{"vasp":{"vasp":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_bands":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_bands_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_kpt_conv":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_ncsf":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb_final":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb_initial":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_nscf_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_vc_relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_vc_relax_conv":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_zpe":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}]}}}}}} diff --git a/dist/js/runtime_data/applications/templatesList.json b/dist/js/runtime_data/applications/templatesList.json index f14c9cf3..14077163 100644 --- a/dist/js/runtime_data/applications/templatesList.json +++ b/dist/js/runtime_data/applications/templatesList.json @@ -1 +1 @@ -[{ "applicationName": "espresso", "content": "100 ! Total number of Lanczos steps\n100 ! Number of Lanczos steps to consider\n0. ! E_min (eV)\n5. ! E_max (eV)\n0.2 ! delta\n2000 ! number of energy steps\n1080.04 ! omega\n8 ! nk, number of k points\n2 ! nspin\n0.0 ! energy offset (eV)\n\n! Please see https://gitlab.com/QEF/q-e/-/blob/qe-7.3/GWW/util/abcoeff_to_eps.f90\n", "contextProviders": [], "executableName": "abcoeff_to_eps.x", "name": "abcoeff_to_eps_simple.in" }, { "applicationName": "espresso", "content": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", "contextProviders": [], "executableName": "average.x", "name": "average.in" }, { "applicationName": "espresso", "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", "contextProviders": [], "executableName": "bands.x", "name": "bands.in" }, { "applicationName": "espresso", "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_up.dat'{% endraw %}\n spin_component = 1\n no_overlap = .true.\n/\n", "contextProviders": [], "executableName": "bands.x", "name": "bands_spin_up.in" }, { "applicationName": "espresso", "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_dn.dat'{% endraw %}\n spin_component = 2\n no_overlap = .true.\n/\n", "contextProviders": [], "executableName": "bands.x", "name": "bands_spin_dn.in" }, { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'cp'\n restart_mode = '{{ input.RESTART_MODE }}'\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}'{% endraw %}\n prefix = 'cp'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n nstep = {{ dynamics.numberOfSteps }}\n iprint = 1\n dt = {{ dynamics.timeStep }}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n nr1b = 20\n nr2b = 20\n nr3b = 20\n/\n&ELECTRONS\n electron_dynamics = 'verlet'\n electron_velocities = 'zero'\n emass = {{ dynamics.electronMass }}\n!! consider the below parameters if orthogonalization fails\n! orthogonalization = 'ortho'\n! ortho_eps = 1d-11\n/\n&IONS\n ion_dynamics = 'verlet'\n ion_velocities = 'zero'\n tempw = {{ dynamics.temperature }}\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\n", "contextProviders": [{ "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "IonDynamicsContextProvider" }], "executableName": "cp.x", "name": "cp.in" }, { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'cp-wf'\n restart_mode = '{{ input.RESTART_MODE }}'\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}'{% endraw %}\n prefix = 'cp_wf'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n nstep = {{ dynamics.numberOfSteps }}\n iprint = 1\n dt = {{ dynamics.timeStep }}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n! TODO: figure out the runtime error when `ecutrho` is set.\n! In the meantime, using Norm-conserving pseudopotentials works.\n! ecutrho = {{ cutoffs.density }}\n nr1b = 20\n nr2b = 20\n nr3b = 20\n/\n&ELECTRONS\n electron_dynamics = 'verlet'\n electron_velocities = 'zero'\n emass = {{ dynamics.electronMass }}\n/\n&IONS\n ion_dynamics = 'verlet'\n ion_velocities = 'zero'\n tempw = {{ dynamics.temperature }}\n/\n&CELL\n/\n&WANNIER\n nit = 60,\n calwf = 3,\n tolw = 1.D-6,\n nsteps = 50,\n adapt = .FALSE.\n wfdt = 2.0D0,\n wf_q = 500.D0,\n wf_friction = 0.3d0,\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\n", "contextProviders": [{ "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "IonDynamicsContextProvider" }], "executableName": "cp.x", "name": "cp_wf.in" }, { "applicationName": "espresso", "content": "&DOS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n/\n", "contextProviders": [], "executableName": "dos.x", "name": "dos.in" }, { "applicationName": "espresso", "content": "&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n", "contextProviders": [{ "name": "IGridFormDataManager" }], "executableName": "dynmat.x", "name": "dynmat_grid.in" }, { "applicationName": "espresso", "content": "&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n", "contextProviders": [], "executableName": "epsilon.x", "name": "epsilon.in" }, { "applicationName": "espresso", "content": "&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QGridFormDataManager" }, { "name": "ExplicitKPath2PIBAFormDataManager" }], "executableName": "gw.x", "name": "gw_bands_plasmon_pole.in" }, { "applicationName": "espresso", "content": "&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QGridFormDataManager" }, { "name": "ExplicitKPath2PIBAFormDataManager" }], "executableName": "gw.x", "name": "gw_bands_full_frequency.in" }, { "applicationName": "espresso", "content": "&inputgww\n ggwin%prefix = '__prefix__'\n ggwin%outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n ggwin%n = 97,\n ggwin%n_fit = 120,\n ggwin%max_i = 32,\n ggwin%i_min = 1\n ggwin%i_max = 32\n ggwin%l_truncated_coulomb = .false.\n ggwin%grid_time = 3\n ggwin%grid_freq = 5\n ggwin%second_grid_i = 1\n ggwin%second_grid_n = 10\n ggwin%omega = 20\n ggwin%omega_fit = 20\n ggwin%n_grid_fit = 240\n ggwin%tau = 9.8\n ggwin%n_set_pola = 16\n/\n", "contextProviders": [], "executableName": "gww.x", "name": "gww_simple.in" }, { "applicationName": "espresso", "content": "calculation of head\n&inputph\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n trans = .false.\n l_head = .true.\n tr2_ph = 1.d-4\n omega_gauss = 20.0\n n_gauss = 97\n grid_type = 5\n second_grid_i = 1\n second_grid_n = 10\n niter_ph = 1\n nsteps_lanczos = 30\n/\n0.0 0.0 0.0\n", "contextProviders": [], "executableName": "head.x", "name": "head_simple.in" }, { "applicationName": "espresso", "content": "&inputhp\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n {%- for d in qgrid.dimensions %}\n nq{{ loop.index }} = {{ d }}\n {%- endfor %}\n/\n", "contextProviders": [{ "name": "QGridFormDataManager" }], "executableName": "hp.x", "name": "hp.in" }, { "applicationName": "espresso", "content": "&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n", "contextProviders": [{ "name": "IGridFormDataManager" }], "executableName": "matdyn.x", "name": "matdyn_grid.in" }, { "applicationName": "espresso", "content": "&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "contextProviders": [{ "name": "IPathFormDataManager" }], "executableName": "matdyn.x", "name": "matdyn_path.in" }, { "applicationName": "espresso", "content": "BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = {{ 2 + (input.INTERMEDIATE_IMAGES.length or neb.nImages) }},\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\n{{ input.FIRST_IMAGE }}\n{%- for IMAGE in input.INTERMEDIATE_IMAGES %}\nINTERMEDIATE_IMAGE\nATOMIC_POSITIONS crystal\n{{ IMAGE }}\n{%- endfor %}\nLAST_IMAGE\nATOMIC_POSITIONS crystal\n{{ input.LAST_IMAGE }}\nEND_POSITIONS\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nEND_ENGINE_INPUT\nEND\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "NEBFormDataManager" }, { "name": "QENEBInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "neb.x", "name": "neb.in" }, { "applicationName": "espresso", "content": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", "contextProviders": [{ "name": "QGridFormDataManager" }], "executableName": "ph.x", "name": "ph_grid.in" }, { "applicationName": "espresso", "content": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n{% for point in qpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor %}\n{% endfor %}\n", "contextProviders": [{ "name": "QPathFormDataManager" }], "executableName": "ph.x", "name": "ph_path.in" }, { "applicationName": "espresso", "content": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n", "contextProviders": [], "executableName": "ph.x", "name": "ph_gamma.in" }, { "applicationName": "espresso", "content": "&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", "contextProviders": [{ "name": "QGridFormDataManager" }], "executableName": "ph.x", "name": "ph_init_qpoints.in" }, { "applicationName": "espresso", "content": "&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", "contextProviders": [{ "name": "QGridFormDataManager" }], "executableName": "ph.x", "name": "ph_grid_restart.in" }, { "applicationName": "espresso", "content": "&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", "contextProviders": [{ "name": "QGridFormDataManager" }], "executableName": "ph.x", "name": "ph_single_irr_qpt.in" }, { "applicationName": "espresso", "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n", "contextProviders": [], "executableName": "pp.x", "name": "pp_density.in" }, { "applicationName": "espresso", "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", "contextProviders": [], "executableName": "pp.x", "name": "pp_electrostatic_potential.in" }, { "applicationName": "espresso", "content": "&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n", "contextProviders": [], "executableName": "projwfc.x", "name": "projwfc.in" }, { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_scf.in" }, { "applicationName": "espresso", "content": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n {% for d in qgrid.dimensions -%}\n nqx{{loop.index}} = {{d}}\n {% endfor %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal\n{{ '{{' }} {{ explicitKPath.length }} {% raw %} + KPOINTS|length {% endraw %} {{ '}}' }}\n{% raw %}\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n{% endraw %}\n{% for point in explicitKPath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}0.0000001\n{% endfor %}\n", "contextProviders": [{ "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "QGridFormDataManager" }, { "name": "ExplicitKPathFormDataManager" }], "executableName": "pw.x", "name": "pw_scf_bands_hse.in" }, { "applicationName": "espresso", "content": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "BoundaryConditionsFormDataManager" }], "executableName": "pw.x", "name": "pw_esm.in" }, { "applicationName": "espresso", "content": "&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "BoundaryConditionsFormDataManager" }], "executableName": "pw.x", "name": "pw_esm_relax.in" }, { "applicationName": "espresso", "content": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0{% endraw %}\n", "contextProviders": [{ "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_scf_kpt_conv.in" }, { "applicationName": "espresso", "content": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_nscf.in" }, { "applicationName": "espresso", "content": "&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_relax.in" }, { "applicationName": "espresso", "content": "&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_vc_relax.in" }, { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_bands.in" }, { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = {% if kgrid.dimensions[0]%2 == 0 %}{{kgrid.dimensions[0]/2}}{% else %}{{(kgrid.dimensions[0]+1)/2}}{% endif %}, nqx2 = {% if kgrid.dimensions[1]%2 == 0 %}{{kgrid.dimensions[1]/2}}{% else %}{{(kgrid.dimensions[1]+1)/2}}{% endif %}, nqx3 = {% if kgrid.dimensions[2]%2 == 0 %}{{kgrid.dimensions[2]/2}}{% else %}{{(kgrid.dimensions[2]+1)/2}}{% endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{% if d%2 == 0 %}{{d}} {% else %}{{d+1}} {% endif %}{% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_scf_hse.in" }, { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'fixed'\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_u -%}\nU {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.hubbardUValue }}\n{% endfor -%}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "HubbardUContextManager" }], "executableName": "pw.x", "name": "pw_scf_dft_u.in" }, { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'fixed'\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_u -%}\nU {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.hubbardUValue }}\n{% endfor -%}\n{% for row in hubbard_v -%}\nV {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.atomicSpecies2 }}-{{ row.atomicOrbital2 }} {{ row.siteIndex }} {{ row.siteIndex2 }} {{ row.hubbardVValue }}\n{% endfor -%}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "HubbardUContextManager" }, { "name": "HubbardVContextManager" }], "executableName": "pw.x", "name": "pw_scf_dft_v.in" }, { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'fixed'\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_j -%}\n{{ row.paramType }} {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.value }}\n{% endfor -%}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "HubbardJContextManager" }], "executableName": "pw.x", "name": "pw_scf_dft_j.in" }, { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'fixed'\n lda_plus_u = .true.\n lda_plus_u_kind = 0\n U_projection_type = 'ortho-atomic'\n {%- for row in hubbard_legacy %}\n Hubbard_U({{ row.atomicSpeciesIndex }}) = {{ row.hubbardUValue }}\n {%- endfor %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "HubbardContextManagerLegacy" }], "executableName": "pw.x", "name": "pw_scf_dft_u_legacy.in" }, { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_u -%}\nU {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.hubbardUValue }}\n{% endfor -%}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "HubbardUContextManager" }, { "name": "CollinearMagnetizationDataManager" }], "executableName": "pw.x", "name": "pw_scf_dft_u_magn.in" }, { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_u -%}\nU {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.hubbardUValue }}\n{% endfor -%}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "HubbardUContextManager" }, { "name": "NonCollinearMagnetizationDataManager" }], "executableName": "pw.x", "name": "pw_scf_dft_u_soc.in" }, { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_u -%}\nU {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.hubbardUValue }}\n{% endfor -%}\n{% for row in hubbard_v -%}\nV {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.atomicSpecies2 }}-{{ row.atomicOrbital2 }} {{ row.siteIndex }} {{ row.siteIndex2 }} {{ row.hubbardVValue }}\n{% endfor -%}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "HubbardUContextManager" }, { "name": "HubbardVContextManager" }, { "name": "CollinearMagnetizationDataManager" }], "executableName": "pw.x", "name": "pw_scf_dft_v_magn.in" }, { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_j -%}\n{{ row.paramType }} {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.value }}\n{% endfor -%}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "HubbardJContextManager" }, { "name": "CollinearMagnetizationDataManager" }], "executableName": "pw.x", "name": "pw_scf_dft_j_magn.in" }, { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n lda_plus_u = .true.\n lda_plus_u_kind = 0\n U_projection_type = 'ortho-atomic'\n{%- for row in hubbard_legacy %}\n Hubbard_U({{ row.atomicSpeciesIndex }}) = {{ row.hubbardUValue }}\n{%- endfor %}\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "HubbardContextManagerLegacy" }, { "name": "CollinearMagnetizationDataManager" }], "executableName": "pw.x", "name": "pw_scf_dft_u_magn_legacy.in" }, { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n lda_plus_u = .true.\n lda_plus_u_kind = 0\n U_projection_type = 'ortho-atomic'\n{%- for row in hubbard_legacy %}\n Hubbard_U({{ row.atomicSpeciesIndex }}) = {{ row.hubbardUValue }}\n{%- endfor %}\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "HubbardContextManagerLegacy" }, { "name": "NonCollinearMagnetizationDataManager" }], "executableName": "pw.x", "name": "pw_scf_dft_u_soc_legacy.in" }, { "applicationName": "espresso", "content": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_u -%}\nU {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.hubbardUValue }}\n{% endfor -%}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "HubbardUContextManager" }, { "name": "CollinearMagnetizationDataManager" }], "executableName": "pw.x", "name": "pw_nscf_dft_u_magn.in" }, { "applicationName": "espresso", "content": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_u -%}\nU {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.hubbardUValue }}\n{% endfor -%}\n{% for row in hubbard_v -%}\nV {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.atomicSpecies2 }}-{{ row.atomicOrbital2 }} {{ row.siteIndex }} {{ row.siteIndex2 }} {{ row.hubbardVValue }}\n{% endfor -%}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "HubbardUContextManager" }, { "name": "HubbardVContextManager" }, { "name": "CollinearMagnetizationDataManager" }], "executableName": "pw.x", "name": "pw_nscf_dft_v_magn.in" }, { "applicationName": "espresso", "content": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_j -%}\n{{ row.paramType }} {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.value }}\n{% endfor -%}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "HubbardJContextManager" }, { "name": "CollinearMagnetizationDataManager" }], "executableName": "pw.x", "name": "pw_nscf_dft_j_magn.in" }, { "applicationName": "espresso", "content": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n lda_plus_u = .true.\n lda_plus_u_kind = 0\n U_projection_type = 'ortho-atomic'\n {%- for row in hubbard_legacy %}\n Hubbard_U({{ row.atomicSpeciesIndex }}) = {{ row.hubbardUValue }}\n {%- endfor %}\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "HubbardContextManagerLegacy" }, { "name": "CollinearMagnetizationDataManager" }], "executableName": "pw.x", "name": "pw_nscf_dft_u_magn_legacy.in" }, { "applicationName": "espresso", "content": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_u -%}\nU {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.hubbardUValue }}\n{% endfor -%}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "HubbardUContextManager" }, { "name": "NonCollinearMagnetizationDataManager" }], "executableName": "pw.x", "name": "pw_nscf_dft_u_soc.in" }, { "applicationName": "espresso", "content": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n lda_plus_u = .true.\n lda_plus_u_kind = 0\n U_projection_type = 'ortho-atomic'\n {%- for row in hubbard_legacy %}\n Hubbard_U({{ row.atomicSpeciesIndex }}) = {{ row.hubbardUValue }}\n {%- endfor %}\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "HubbardContextManagerLegacy" }, { "name": "NonCollinearMagnetizationDataManager" }], "executableName": "pw.x", "name": "pw_nscf_dft_u_soc_legacy.in" }, { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_u -%}\nU {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.hubbardUValue }}\n{% endfor -%}\n", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "HubbardUContextManager" }, { "name": "CollinearMagnetizationDataManager" }], "executableName": "pw.x", "name": "pw_bands_dft_u_magn.in" }, { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_u -%}\nU {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.hubbardUValue }}\n{% endfor -%}\n{% for row in hubbard_v -%}\nV {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.atomicSpecies2 }}-{{ row.atomicOrbital2 }} {{ row.siteIndex }} {{ row.siteIndex2 }} {{ row.hubbardVValue }}\n{% endfor -%}\n", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "HubbardUContextManager" }, { "name": "HubbardVContextManager" }, { "name": "CollinearMagnetizationDataManager" }], "executableName": "pw.x", "name": "pw_bands_dft_v_magn.in" }, { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_j -%}\n{{ row.paramType }} {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.value }}\n{% endfor -%}\n", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "HubbardJContextManager" }, { "name": "CollinearMagnetizationDataManager" }], "executableName": "pw.x", "name": "pw_bands_dft_j_magn.in" }, { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n lda_plus_u = .true.\n lda_plus_u_kind = 0\n U_projection_type = 'ortho-atomic'\n {%- for row in hubbard_legacy %}\n Hubbard_U({{ row.atomicSpeciesIndex }}) = {{ row.hubbardUValue }}\n {%- endfor %}\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "HubbardContextManagerLegacy" }, { "name": "CollinearMagnetizationDataManager" }], "executableName": "pw.x", "name": "pw_bands_dft_u_magn_legacy.in" }, { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_u -%}\nU {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.hubbardUValue }}\n{% endfor -%}\n", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "HubbardUContextManager" }, { "name": "NonCollinearMagnetizationDataManager" }], "executableName": "pw.x", "name": "pw_bands_dft_u_soc.in" }, { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&control\n calculation = 'md'\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n! 1 a.u. = 0.048378 fs, 20 a.u. ~ 1 fs, dt unit is different in pw.x and cp.x\n dt = 20\n nstep = 100\n/\n\n&system\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n nosym = .true.\n/\n\n&electrons\n conv_thr = 1e-8\n/\n\n&ions\n pot_extrapolation = 'second-order'\n wfc_extrapolation = 'second-order'\n ion_temperature = 'initial'\n tempw = 300\n/\n\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\n\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\n\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\n\nK_POINTS gamma\n", "contextProviders": [{ "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_md.in" }, { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "CollinearMagnetizationDataManager" }], "executableName": "pw.x", "name": "pw_scf_magn.in" }, { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "NonCollinearMagnetizationDataManager" }], "executableName": "pw.x", "name": "pw_scf_soc.in" }, { "applicationName": "espresso", "content": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "CollinearMagnetizationDataManager" }], "executableName": "pw.x", "name": "pw_nscf_magn.in" }, { "applicationName": "espresso", "content": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "NonCollinearMagnetizationDataManager" }], "executableName": "pw.x", "name": "pw_nscf_soc.in" }, { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "CollinearMagnetizationDataManager" }], "executableName": "pw.x", "name": "pw_bands_magn.in" }, { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "NonCollinearMagnetizationDataManager" }], "executableName": "pw.x", "name": "pw_bands_soc.in" }, { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n lda_plus_u = .true.\n lda_plus_u_kind = 0\n U_projection_type = 'ortho-atomic'\n {%- for row in hubbard_legacy %}\n Hubbard_U({{ row.atomicSpeciesIndex }}) = {{ row.hubbardUValue }}\n {%- endfor %}\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "HubbardContextManagerLegacy" }, { "name": "NonCollinearMagnetizationDataManager" }], "executableName": "pw.x", "name": "pw_bands_dft_u_soc_legacy.in" }, { "applicationName": "espresso", "content": "&inputpw4gww\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n num_nbndv(1) = 16\n num_nbnds = 32\n l_truncated_coulomb = .false.\n numw_prod = 100\n pmat_cutoff = 3d0\n s_self_lanczos = 1d-8\n l_simple = .true.\n/\n", "contextProviders": [], "executableName": "pw4gww.x", "name": "pw4gww_simple.in" }, { "applicationName": "espresso", "content": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", "contextProviders": [], "executableName": "q2r.x", "name": "q2r.in" }, { "applicationName": "espresso", "content": "&inputsimple\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n calc_mode = 0\n num_nbndv = 16\n num_val = 16\n num_cond = 24\n s_bands = 0.1\n s_product = 1.0\n nkpoints(1) = 2\n nkpoints(2) = 2\n nkpoints(3) = 2\n w_type = 0\n l_truncated_coulomb = .false.\n numpw = 100\n/\n", "contextProviders": [], "executableName": "simple.x", "name": "simple.in" }, { "applicationName": "espresso", "content": "&inputsimple\n simple_in%prefix = '__prefix__'\n simple_in%outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n simple_in%scissor = 0.6\n simple_in%spin_state = 1\n simple_in%h_level = 3\n simple_in%task = 1\n simple_in%lanczos_step = 100\n/\n", "contextProviders": [], "executableName": "simple_bse.x", "name": "simple_bse.in" }, { "applicationName": "espresso", "content": "&inputsimpleip\n simpleip_in%prefix = '__prefix__'\n simpleip_in%outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n simpleip_in%interp_grid(1) = 20\n simpleip_in%interp_grid(2) = 20\n simpleip_in%interp_grid(3) = 20\n simpleip_in%fermi_degauss = 0.02205\n simpleip_in%fermi_ngauss = -1\n simpleip_in%drude_degauss = 0.0142\n simpleip_in%wmin = 0.0\n simpleip_in%wmax = 0.735\n simpleip_in%nw = 1000\n simpleip_in%inter_broadening = 0.0142\n simpleip_in%intra_broadening = 0.0142\n simpleip_in%nonlocal_commutator = .false.\n simpleip_in%nonlocal_interpolation = .true.\n/\n", "contextProviders": [], "executableName": "simple_ip.x", "name": "simple_ip.in" }, { "applicationName": "nwchem", "content": " start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n", "contextProviders": [{ "name": "NWChemInputDataManager" }], "executableName": "nwchem", "name": "nwchem_total_energy.inp" }, { "applicationName": "python", "content": "# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n", "contextProviders": [], "executableName": "python", "name": "hello_world.py" }, { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt" }, { "applicationName": "python", "content": "# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n", "contextProviders": [], "executableName": "python", "name": "requirements_empty.txt" }, { "applicationName": "python", "content": "# -------------------------------------------------------------------------------\n# This script contains a few helpful commands for basic plotting with matplotlib.\n# The commented out blocks are optional suggestions and included for convenience.\n# -------------------------------------------------------------------------------\nimport matplotlib.pyplot as plt\nimport matplotlib.ticker as ticker\nimport numpy as np\n\n# Plot Settings\n# -------------\nfigure_size = (6.4, 4.8) # width, height [inches]\ndpi = 100 # resolution [dots-per-inch]\nfont_size_title = 16 # font size of title\nfont_size_axis = 12 # font size of axis label\nfont_size_tick = 12 # font size of tick label\nfont_size_legend = 14 # font size of legend\nx_axis_label = None # label for x-axis\ny_axis_label = None # label for y-axis\ntitle = None # figure title\nshow_legend = False # whether to show legend\nsave_name = \"plot.pdf\" # output filename (with suffix), e.g. 'plot.pdf'\nx_view_limits = {\"left\": None, \"right\": None} # view limits for x-axis\ny_view_limits = {\"top\": None, \"bottom\": None} # view limits for y-axis\nx_tick_spacing = None # custom tick spacing for x-axis (optional)\ny_tick_spacing = None # custom tick spacing for y-axis (optional)\nx_tick_labels = None # custom tick labels for x-axis (optional)\ny_tick_labels = None # custom tick labels for y-axis (optional)\n\n\n# Figure & axes objects\n# ---------------------\nfig = plt.figure(figsize=figure_size, dpi=dpi)\nax = fig.add_subplot(111)\n\n# Example plot (REPLACE ACCORDINGLY)\n# ------------\nx = np.linspace(0, 7, num=100)\ny = np.sin(x)\nax.plot(x, y, \"g-\", zorder=3)\n\n\n# Help lines\n# ----------\n# ax.axhline(y=0, color=\"0.25\", linewidth=0.6, zorder=1)\n# ax.axvline(x=0, color=\"0.25\", linewidth=0.6, zorder=1)\n\n\n# View limits\n# -----------\nax.set_xlim(**x_view_limits)\nax.set_ylim(**y_view_limits)\n\n\n# Grid lines\n# ----------\n# grid_style = {\n# \"linestyle\" : \"dotted\",\n# \"linewidth\" : 0.6,\n# \"color\" : \"0.25\",\n# }\n# ax.grid(**grid_style)\n\n# Custom tick spacing\n# -------------------\n# ax.xaxis.set_major_locator(ticker.MultipleLocator(x_tick_spacing))\n# ax.yaxis.set_major_locator(ticker.MultipleLocator(y_tick_spacing))\n\n# Custom tick labels\n# ------------------\nif x_tick_labels is not None:\n ax.set_xticklabels(x_tick_labels, fontdict={\"fontsize\": font_size_tick}, minor=False)\nif y_tick_labels is not None:\n ax.set_yticklabels(y_tick_labels, fontdict={\"fontsize\": font_size_tick}, minor=False)\n\n# Other tick settings\n# -------------------\n# ax.tick_params(axis=\"both\", which=\"major\", labelsize=font_size_tick, direction=\"in\")\n# ax.tick_params(axis=\"x\", which=\"major\", pad=10)\n# ax.tick_params(axis=\"x\", which=\"minor\", bottom=False, top=False)\n\n\n# Axis labels\n# -----------\nif x_axis_label is not None:\n ax.set_xlabel(x_axis_label, size=font_size_axis)\nif y_axis_label is not None:\n ax.set_ylabel(y_axis_label, size=font_size_axis)\n\n# Figure title\n# ------------\nif title is not None:\n ax.set_title(title, fontsize=font_size_title)\n\n# Legend\n# ------\nif show_legend:\n ax.legend(prop={'size': font_size_legend})\n\n# Save figure\n# -----------\nif save_name is not None:\n save_format = save_name.split(\".\")[-1]\n fig.savefig(save_name, format=save_format, bbox_inches=\"tight\")\n", "contextProviders": [], "executableName": "python", "name": "matplotlib_basic.py" }, { "applicationName": "python", "content": "# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n{# JOB_WORK_DIR will be initialized at runtime => avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n", "contextProviders": [], "executableName": "python", "name": "espresso_xml_get_qpt_irr.py" }, { "applicationName": "python", "content": "import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n", "contextProviders": [], "executableName": "python", "name": "espresso_extract_kpoints.py" }, { "applicationName": "python", "content": "# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n", "contextProviders": [], "executableName": "python", "name": "find_extrema.py" }, { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n", "contextProviders": [], "executableName": "python", "name": "processing_requirements.txt" }, { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "pyml_requirements.txt" }, { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", "contextProviders": [{ "name": "MLSettingsDataManager" }], "executableName": "python", "name": "pyml_settings.py" }, { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Custom workflow unit template for the Exabyte.io platform #\n# #\n# This file imports a set of workflow-specific context variables #\n# from settings.py. It then uses a context manager to save and #\n# load Python objects. When saved, these objects can then be #\n# loaded either later in the same workflow, or by subsequent #\n# predict jobs. #\n# #\n# Any pickle-able Python object can be saved using #\n# settings.context. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport settings\n\n# The context manager exists to facilitate\n# saving and loading objects across Python units within a workflow.\n\n# To load an object, simply do to \\`context.load(\"name-of-the-saved-object\")\\`\n# To save an object, simply do \\`context.save(\"name-for-the-object\", object_here)\\`\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Do some transformations to the data here\n\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n descriptors = context.load(\"descriptors\")\n\n # Do some predictions or transformation to the data here\n", "contextProviders": [], "executableName": "python", "name": "pyml_custom.py" }, { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", "contextProviders": [], "executableName": "python", "name": "data_input_read_csv_pandas.py" }, { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "contextProviders": [{ "name": "MLTrainTestSplitDataManager" }], "executableName": "python", "name": "data_input_train_test_split_sklearn.py" }, { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Sklearn MinMax Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it is on interval #\n# [0,1]. It then saves the data for use further down #\n# the road in the workflow, for use in un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the min and max of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor MinMax Scaler\n scaler = sklearn.preprocessing.MinMaxScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", "contextProviders": [], "executableName": "python", "name": "pre_processing_min_max_sklearn.py" }, { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Pandas Remove Duplicates workflow unit #\n# #\n# This workflow unit drops all duplicate rows, if it is running #\n# in the \"train\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Drop duplicates from the training set\n df = pandas.DataFrame(train_target, columns=[\"target\"])\n df = df.join(pandas.DataFrame(train_descriptors))\n df = df.drop_duplicates()\n train_target = df.pop(\"target\").to_numpy()\n train_target = train_target.reshape(-1, 1)\n train_descriptors = df.to_numpy()\n\n # Drop duplicates from the testing set\n df = pandas.DataFrame(test_target, columns=[\"target\"])\n df = df.join(pandas.DataFrame(test_descriptors))\n df = df.drop_duplicates()\n test_target = df.pop(\"target\").to_numpy()\n test_target = test_target.reshape(-1, 1)\n test_descriptors = df.to_numpy()\n\n # Store the data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "contextProviders": [], "executableName": "python", "name": "pre_processing_remove_duplicates_pandas.py" }, { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Pandas Remove Missing Workflow Unit #\n# #\n# This workflow unit allows missing rows and/or columns to be #\n# dropped from the dataset by configuring the `to_drop` #\n# parameter. #\n# #\n# Valid values for `to_drop`: #\n# - \"rows\": rows with missing values will be removed #\n# - \"columns\": columns with missing values will be removed #\n# - \"both\": rows and columns with missing values will be removed #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\n\n# `to_drop` can either be \"rows\" or \"columns\"\n# If it is set to \"rows\" (by default), then all rows with missing values will be dropped.\n# If it is set to \"columns\", then all columns with missing values will be dropped.\n# If it is set to \"both\", then all rows and columns with missing values will be dropped.\nto_drop = \"rows\"\n\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Drop missing from the training set\n df = pandas.DataFrame(train_target, columns=[\"target\"])\n df = df.join(pandas.DataFrame(train_descriptors))\n\n directions = {\n \"rows\": (\"index\",),\n \"columns\": (\"columns\",),\n \"both\": (\"index\", \"columns\"),\n }[to_drop]\n for direction in directions:\n df = df.dropna(direction)\n\n train_target = df.pop(\"target\").to_numpy()\n train_target = train_target.reshape(-1, 1)\n train_descriptors = df.to_numpy()\n\n # Drop missing from the testing set\n df = pandas.DataFrame(test_target, columns=[\"target\"])\n df = df.join(pandas.DataFrame(test_descriptors))\n df = df.dropna()\n test_target = df.pop(\"target\").to_numpy()\n test_target = test_target.reshape(-1, 1)\n test_descriptors = df.to_numpy()\n\n # Store the data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "contextProviders": [], "executableName": "python", "name": "pre_processing_remove_missing_pandas.py" }, { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", "contextProviders": [], "executableName": "python", "name": "pre_processing_standardization_sklearn.py" }, { "applicationName": "python", "content": "# ------------------------------------------------------------ #\n# Workflow unit for a ridge-regression model in Scikit-Learn. #\n# Alpha is taken from Scikit-Learn's defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\nimport sklearn.tree\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Base Estimator\n base_estimator = sklearn.tree.DecisionTreeRegressor(\n criterion=\"mse\",\n splitter=\"best\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=None,\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n ccp_alpha=0.0,\n )\n\n # Initialize the Model\n model = sklearn.ensemble.AdaBoostRegressor(\n n_estimators=50,\n learning_rate=1,\n loss=\"linear\",\n base_estimator=base_estimator,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"adaboosted_trees\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"adaboosted_trees\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "contextProviders": [], "executableName": "python", "name": "model_adaboosted_trees_regression_sklearn.py" }, { "applicationName": "python", "content": "# ------------------------------------------------------------ #\n# Workflow unit for a bagged trees regression model with #\n# Scikit-Learn. Parameters for the estimator and ensemble are #\n# derived from Scikit-Learn's Defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\nimport sklearn.tree\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Base Estimator\n base_estimator = sklearn.tree.DecisionTreeRegressor(\n criterion=\"mse\",\n splitter=\"best\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=None,\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n ccp_alpha=0.0,\n )\n\n # Initialize the Model\n model = sklearn.ensemble.BaggingRegressor(\n n_estimators=10,\n max_samples=1.0,\n max_features=1.0,\n bootstrap=True,\n bootstrap_features=False,\n oob_score=False,\n verbose=0,\n base_estimator=base_estimator,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"bagged_trees\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"bagged_trees\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "contextProviders": [], "executableName": "python", "name": "model_bagged_trees_regression_sklearn.py" }, { "applicationName": "python", "content": "# ------------------------------------------------------------ #\n# Workflow unit for gradient-boosted tree regression with #\n# Scikit-Learn. Parameters for the estimator and ensemble are #\n# derived from Scikit-Learn's Defaults. Note: In the gradient- #\n# boosted trees ensemble used, the weak learners used as #\n# estimators cannot be tuned with the same level of fidelity #\n# allowed in the adaptive-boosted trees ensemble. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.GradientBoostingRegressor(\n loss=\"ls\",\n learning_rate=0.1,\n n_estimators=100,\n subsample=1.0,\n criterion=\"friedman_mse\",\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_depth=3,\n min_impurity_decrease=0.0,\n max_features=None,\n alpha=0.9,\n verbose=0,\n max_leaf_nodes=None,\n validation_fraction=0.1,\n n_iter_no_change=None,\n tol=0.0001,\n ccp_alpha=0.0,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"gradboosted_trees\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"gradboosted_trees\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "contextProviders": [], "executableName": "python", "name": "model_gradboosted_trees_regression_sklearn.py" }, { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow unit for eXtreme Gradient-Boosted trees regression #\n# with XGBoost's wrapper to Scikit-Learn. Parameters for the #\n# estimator and ensemble are derived from sklearn defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). #\n# #\n# When the workflow is run in Predict mode, the model is #\n# loaded, predictions are made, they are un-transformed using #\n# the trained scaler from the training run, and they are #\n# written to a filed named \"predictions.csv\" #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport xgboost\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the model\n model = xgboost.XGBRegressor(booster='gbtree',\n verbosity=1,\n learning_rate=0.3,\n min_split_loss=0,\n max_depth=6,\n min_child_weight=1,\n max_delta_step=0,\n colsample_bytree=1,\n reg_lambda=1,\n reg_alpha=0,\n scale_pos_weight=1,\n objective='reg:squarederror',\n eval_metric='rmse')\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"extreme_gradboosted_tree_regression\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"extreme_gradboosted_tree_regression\")\n\n # Make some predictions and unscale\n predictions = model.predict(descriptors)\n predictions = predictions.reshape(-1, 1)\n target_scaler = context.load(\"target_scaler\")\n\n predictions = target_scaler.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\")\n", "contextProviders": [], "executableName": "python", "name": "model_extreme_gradboosted_trees_regression_sklearn.py" }, { "applicationName": "python", "content": "# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "contextProviders": [], "executableName": "python", "name": "model_k_means_clustering_sklearn.py" }, { "applicationName": "python", "content": "# ------------------------------------------------------------ #\n# Workflow unit for a kernelized ridge-regression model with #\n# Scikit-Learn. Model parameters are derived from Scikit- #\n# Learn's defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.kernel_ridge\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.kernel_ridge.KernelRidge(\n alpha=1.0,\n kernel=\"linear\",\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"kernel_ridge\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"kernel_ridge\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "contextProviders": [], "executableName": "python", "name": "model_kernel_ridge_regression_sklearn.py" }, { "applicationName": "python", "content": "# ------------------------------------------------------------ #\n# Workflow unit for a LASSO-regression model with Scikit- #\n# Learn. Model parameters derived from Scikit-Learn's #\n# Defaults. Alpha has been lowered from the default of 1.0, to #\n# 0.1. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.linear_model\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.linear_model.Lasso(\n alpha=0.1,\n fit_intercept=True,\n normalize=False,\n precompute=False,\n tol=0.0001,\n positive=True,\n selection=\"cyclic\",\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"LASSO\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"LASSO\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "contextProviders": [], "executableName": "python", "name": "model_lasso_regression_sklearn.py" }, { "applicationName": "python", "content": "# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "contextProviders": [], "executableName": "python", "name": "model_mlp_sklearn.py" }, { "applicationName": "python", "content": "# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "contextProviders": [], "executableName": "python", "name": "model_random_forest_classification_sklearn.py" }, { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow unit for a gradient boosted classification model with #\n# Scikit-Learn. Parameters derived from sklearn's defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. #\n# #\n# When the workflow is run in Predict mode, the model is #\n# loaded, predictions are made, they are un-transformed using #\n# the trained scaler from the training run, and they are #\n# written to a filed named \"predictions.csv\" #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the model\n model = sklearn.ensemble.GradientBoostingClassifier(loss='deviance',\n learning_rate=0.1,\n n_estimators=100,\n subsample=1.0,\n criterion='friedman_mse',\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_depth=3,\n min_impurity_decrease=0.0,\n min_impurity_split=None,\n init=None,\n random_state=None,\n max_features=None,\n verbose=0,\n max_leaf_nodes=None,\n warm_start=False,\n validation_fraction=0.1,\n n_iter_no_change=None,\n tol=0.0001,\n ccp_alpha=0.0)\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"gradboosted_trees_classification\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target,\n test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n # Ensure predictions have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"gradboosted_trees_classification\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "contextProviders": [], "executableName": "python", "name": "model_gradboosted_trees_classification_sklearn.py" }, { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow unit for eXtreme Gradient-Boosted trees classification #\n# with XGBoost's wrapper to Scikit-Learn. Parameters for the #\n# estimator and ensemble are derived from sklearn defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. #\n# #\n# When the workflow is run in Predict mode, the model is #\n# loaded, predictions are made, they are un-transformed using #\n# the trained scaler from the training run, and they are #\n# written to a filed named \"predictions.csv\" #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport xgboost\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the model\n model = xgboost.XGBClassifier(booster='gbtree',\n verbosity=1,\n learning_rate=0.3,\n min_split_loss=0,\n max_depth=6,\n min_child_weight=1,\n max_delta_step=0,\n colsample_bytree=1,\n reg_lambda=1,\n reg_alpha=0,\n scale_pos_weight=1,\n objective='binary:logistic',\n eval_metric='logloss',\n use_label_encoder=False)\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"extreme_gradboosted_tree_classification\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target,\n test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n # Ensure predictions have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"extreme_gradboosted_tree_classification\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "contextProviders": [], "executableName": "python", "name": "model_extreme_gradboosted_trees_classification_sklearn.py" }, { "applicationName": "python", "content": "# ------------------------------------------------------------ #\n# Workflow for a random forest regression model with Scikit- #\n# Learn. Parameters are derived from Scikit-Learn's defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestRegressor(\n n_estimators=100,\n criterion=\"mse\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n max_samples=None,\n oob_score=False,\n ccp_alpha=0.0,\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "contextProviders": [], "executableName": "python", "name": "model_random_forest_regression_sklearn.py" }, { "applicationName": "python", "content": "# ------------------------------------------------------------ #\n# Workflow unit for a ridge regression model with Scikit- #\n# Learn. Alpha is taken from Scikit-Learn's default #\n# parameters. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.linear_model\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.linear_model.Ridge(\n alpha=1.0,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"ridge\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"ridge\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "contextProviders": [], "executableName": "python", "name": "model_ridge_regression_sklearn.py" }, { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "contextProviders": [], "executableName": "python", "name": "post_processing_parity_plot_matplotlib.py" }, { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "contextProviders": [], "executableName": "python", "name": "post_processing_pca_2d_clusters_matplotlib.py" }, { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "contextProviders": [], "executableName": "python", "name": "post_processing_roc_curve_sklearn.py" }, { "applicationName": "shell", "content": "#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n", "contextProviders": [], "executableName": "sh", "name": "hello_world.sh" }, { "applicationName": "shell", "content": "#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n", "contextProviders": [], "executableName": "sh", "name": "job_espresso_pw_scf.sh" }, { "applicationName": "shell", "content": "{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n", "contextProviders": [], "executableName": "sh", "name": "espresso_link_outdir_save.sh" }, { "applicationName": "shell", "content": "{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n", "contextProviders": [], "executableName": "sh", "name": "espresso_collect_dynmat.sh" }, { "applicationName": "shell", "content": "#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_xml_get_qpt_irr.py"},{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"plot_wavefunction.py"},{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements_plot_wavefunction.txt"},{"applicationName":"python","content":"import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_extract_kpoints.py"},{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"processing_requirements.txt"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"pyml_requirements.txt"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"pyml_settings.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Custom workflow unit template for the Exabyte.io platform #\n# #\n# This file imports a set of workflow-specific context variables #\n# from settings.py. It then uses a context manager to save and #\n# load Python objects. When saved, these objects can then be #\n# loaded either later in the same workflow, or by subsequent #\n# predict jobs. #\n# #\n# Any pickle-able Python object can be saved using #\n# settings.context. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport settings\n\n# The context manager exists to facilitate\n# saving and loading objects across Python units within a workflow.\n\n# To load an object, simply do to \\`context.load(\"name-of-the-saved-object\")\\`\n# To save an object, simply do \\`context.save(\"name-for-the-object\", object_here)\\`\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Do some transformations to the data here\n\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n descriptors = context.load(\"descriptors\")\n\n # Do some predictions or transformation to the data here\n","contextProviders":[],"executableName":"python","name":"pyml_custom.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn MinMax Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it is on interval #\n# [0,1]. It then saves the data for use further down #\n# the road in the workflow, for use in un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the min and max of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor MinMax Scaler\n scaler = sklearn.preprocessing.MinMaxScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_min_max_sklearn.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Pandas Remove Duplicates workflow unit #\n# #\n# This workflow unit drops all duplicate rows, if it is running #\n# in the \"train\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Drop duplicates from the training set\n df = pandas.DataFrame(train_target, columns=[\"target\"])\n df = df.join(pandas.DataFrame(train_descriptors))\n df = df.drop_duplicates()\n train_target = df.pop(\"target\").to_numpy()\n train_target = train_target.reshape(-1, 1)\n train_descriptors = df.to_numpy()\n\n # Drop duplicates from the testing set\n df = pandas.DataFrame(test_target, columns=[\"target\"])\n df = df.join(pandas.DataFrame(test_descriptors))\n df = df.drop_duplicates()\n test_target = df.pop(\"target\").to_numpy()\n test_target = test_target.reshape(-1, 1)\n test_descriptors = df.to_numpy()\n\n # Store the data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[],"executableName":"python","name":"pre_processing_remove_duplicates_pandas.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Pandas Remove Missing Workflow Unit #\n# #\n# This workflow unit allows missing rows and/or columns to be #\n# dropped from the dataset by configuring the `to_drop` #\n# parameter. #\n# #\n# Valid values for `to_drop`: #\n# - \"rows\": rows with missing values will be removed #\n# - \"columns\": columns with missing values will be removed #\n# - \"both\": rows and columns with missing values will be removed #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\n\n# `to_drop` can either be \"rows\" or \"columns\"\n# If it is set to \"rows\" (by default), then all rows with missing values will be dropped.\n# If it is set to \"columns\", then all columns with missing values will be dropped.\n# If it is set to \"both\", then all rows and columns with missing values will be dropped.\nto_drop = \"rows\"\n\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Drop missing from the training set\n df = pandas.DataFrame(train_target, columns=[\"target\"])\n df = df.join(pandas.DataFrame(train_descriptors))\n\n directions = {\n \"rows\": (\"index\",),\n \"columns\": (\"columns\",),\n \"both\": (\"index\", \"columns\"),\n }[to_drop]\n for direction in directions:\n df = df.dropna(direction)\n\n train_target = df.pop(\"target\").to_numpy()\n train_target = train_target.reshape(-1, 1)\n train_descriptors = df.to_numpy()\n\n # Drop missing from the testing set\n df = pandas.DataFrame(test_target, columns=[\"target\"])\n df = df.join(pandas.DataFrame(test_descriptors))\n df = df.dropna()\n test_target = df.pop(\"target\").to_numpy()\n test_target = test_target.reshape(-1, 1)\n test_descriptors = df.to_numpy()\n\n # Store the data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[],"executableName":"python","name":"pre_processing_remove_missing_pandas.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py"},{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a ridge-regression model in Scikit-Learn. #\n# Alpha is taken from Scikit-Learn's defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\nimport sklearn.tree\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Base Estimator\n base_estimator = sklearn.tree.DecisionTreeRegressor(\n criterion=\"mse\",\n splitter=\"best\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=None,\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n ccp_alpha=0.0,\n )\n\n # Initialize the Model\n model = sklearn.ensemble.AdaBoostRegressor(\n n_estimators=50,\n learning_rate=1,\n loss=\"linear\",\n base_estimator=base_estimator,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"adaboosted_trees\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"adaboosted_trees\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_adaboosted_trees_regression_sklearn.py"},{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a bagged trees regression model with #\n# Scikit-Learn. Parameters for the estimator and ensemble are #\n# derived from Scikit-Learn's Defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\nimport sklearn.tree\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Base Estimator\n base_estimator = sklearn.tree.DecisionTreeRegressor(\n criterion=\"mse\",\n splitter=\"best\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=None,\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n ccp_alpha=0.0,\n )\n\n # Initialize the Model\n model = sklearn.ensemble.BaggingRegressor(\n n_estimators=10,\n max_samples=1.0,\n max_features=1.0,\n bootstrap=True,\n bootstrap_features=False,\n oob_score=False,\n verbose=0,\n base_estimator=base_estimator,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"bagged_trees\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"bagged_trees\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_bagged_trees_regression_sklearn.py"},{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for gradient-boosted tree regression with #\n# Scikit-Learn. Parameters for the estimator and ensemble are #\n# derived from Scikit-Learn's Defaults. Note: In the gradient- #\n# boosted trees ensemble used, the weak learners used as #\n# estimators cannot be tuned with the same level of fidelity #\n# allowed in the adaptive-boosted trees ensemble. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.GradientBoostingRegressor(\n loss=\"ls\",\n learning_rate=0.1,\n n_estimators=100,\n subsample=1.0,\n criterion=\"friedman_mse\",\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_depth=3,\n min_impurity_decrease=0.0,\n max_features=None,\n alpha=0.9,\n verbose=0,\n max_leaf_nodes=None,\n validation_fraction=0.1,\n n_iter_no_change=None,\n tol=0.0001,\n ccp_alpha=0.0,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"gradboosted_trees\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"gradboosted_trees\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_gradboosted_trees_regression_sklearn.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow unit for eXtreme Gradient-Boosted trees regression #\n# with XGBoost's wrapper to Scikit-Learn. Parameters for the #\n# estimator and ensemble are derived from sklearn defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). #\n# #\n# When the workflow is run in Predict mode, the model is #\n# loaded, predictions are made, they are un-transformed using #\n# the trained scaler from the training run, and they are #\n# written to a filed named \"predictions.csv\" #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport xgboost\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the model\n model = xgboost.XGBRegressor(booster='gbtree',\n verbosity=1,\n learning_rate=0.3,\n min_split_loss=0,\n max_depth=6,\n min_child_weight=1,\n max_delta_step=0,\n colsample_bytree=1,\n reg_lambda=1,\n reg_alpha=0,\n scale_pos_weight=1,\n objective='reg:squarederror',\n eval_metric='rmse')\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"extreme_gradboosted_tree_regression\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"extreme_gradboosted_tree_regression\")\n\n # Make some predictions and unscale\n predictions = model.predict(descriptors)\n predictions = predictions.reshape(-1, 1)\n target_scaler = context.load(\"target_scaler\")\n\n predictions = target_scaler.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\")\n","contextProviders":[],"executableName":"python","name":"model_extreme_gradboosted_trees_regression_sklearn.py"},{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_k_means_clustering_sklearn.py"},{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a kernelized ridge-regression model with #\n# Scikit-Learn. Model parameters are derived from Scikit- #\n# Learn's defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.kernel_ridge\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.kernel_ridge.KernelRidge(\n alpha=1.0,\n kernel=\"linear\",\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"kernel_ridge\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"kernel_ridge\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_kernel_ridge_regression_sklearn.py"},{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a LASSO-regression model with Scikit- #\n# Learn. Model parameters derived from Scikit-Learn's #\n# Defaults. Alpha has been lowered from the default of 1.0, to #\n# 0.1. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.linear_model\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.linear_model.Lasso(\n alpha=0.1,\n fit_intercept=True,\n normalize=False,\n precompute=False,\n tol=0.0001,\n positive=True,\n selection=\"cyclic\",\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"LASSO\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"LASSO\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_lasso_regression_sklearn.py"},{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py"},{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow unit for a gradient boosted classification model with #\n# Scikit-Learn. Parameters derived from sklearn's defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. #\n# #\n# When the workflow is run in Predict mode, the model is #\n# loaded, predictions are made, they are un-transformed using #\n# the trained scaler from the training run, and they are #\n# written to a filed named \"predictions.csv\" #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the model\n model = sklearn.ensemble.GradientBoostingClassifier(loss='deviance',\n learning_rate=0.1,\n n_estimators=100,\n subsample=1.0,\n criterion='friedman_mse',\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_depth=3,\n min_impurity_decrease=0.0,\n min_impurity_split=None,\n init=None,\n random_state=None,\n max_features=None,\n verbose=0,\n max_leaf_nodes=None,\n warm_start=False,\n validation_fraction=0.1,\n n_iter_no_change=None,\n tol=0.0001,\n ccp_alpha=0.0)\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"gradboosted_trees_classification\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target,\n test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n # Ensure predictions have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"gradboosted_trees_classification\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_gradboosted_trees_classification_sklearn.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow unit for eXtreme Gradient-Boosted trees classification #\n# with XGBoost's wrapper to Scikit-Learn. Parameters for the #\n# estimator and ensemble are derived from sklearn defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. #\n# #\n# When the workflow is run in Predict mode, the model is #\n# loaded, predictions are made, they are un-transformed using #\n# the trained scaler from the training run, and they are #\n# written to a filed named \"predictions.csv\" #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport xgboost\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the model\n model = xgboost.XGBClassifier(booster='gbtree',\n verbosity=1,\n learning_rate=0.3,\n min_split_loss=0,\n max_depth=6,\n min_child_weight=1,\n max_delta_step=0,\n colsample_bytree=1,\n reg_lambda=1,\n reg_alpha=0,\n scale_pos_weight=1,\n objective='binary:logistic',\n eval_metric='logloss',\n use_label_encoder=False)\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"extreme_gradboosted_tree_classification\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target,\n test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n # Ensure predictions have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"extreme_gradboosted_tree_classification\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_extreme_gradboosted_trees_classification_sklearn.py"},{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow for a random forest regression model with Scikit- #\n# Learn. Parameters are derived from Scikit-Learn's defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestRegressor(\n n_estimators=100,\n criterion=\"mse\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n max_samples=None,\n oob_score=False,\n ccp_alpha=0.0,\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_regression_sklearn.py"},{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a ridge regression model with Scikit- #\n# Learn. Alpha is taken from Scikit-Learn's default #\n# parameters. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.linear_model\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.linear_model.Ridge(\n alpha=1.0,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"ridge\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"ridge\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_ridge_regression_sklearn.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_pca_2d_clusters_matplotlib.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py"},{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh"},{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh"},{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_link_outdir_save.sh"},{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_collect_dynmat.sh"},{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR <=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n", "schemaVersion": "2022.8.16" }], "next": "8fce780b-5555-5b73-b3d1-1bb24a4c759d" }, { "name": "Set Average ESP Value", "type": "assignment", "operand": "AVG_ESP_RIGHT", "value": "json.loads(STDOUT)['minima']", "input": [{ "name": "STDOUT", "scope": "python-find-extrema-right" }], "status": "idle", "statusTrack": [], "flowchartId": "8fce780b-5555-5b73-b3d1-1bb24a4c759d", "tags": [], "head": false, "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }] }, "espresso/average_electrostatic_potential_via_band_structure.json": { "isMultiMaterial": true, "_id": "aa611fe8-1e6a-5e5c-976a-f64bfaaaace9", "name": "BS + Avg ESP (interface right)", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "band_gaps", "average_potential_profile"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "name": "Set Material Index (Interface right)", "type": "assignment", "operand": "MATERIAL_INDEX", "value": "2", "input": [], "status": "idle", "statusTrack": [], "flowchartId": "a05809d1-cc0d-5a0b-bf5e-d43b90a6ac4b", "tags": [], "head": true, "next": "9fc7a088-5533-5f70-bb33-f676ec65f565", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "type": "execution", "name": "pw_scf", "head": false, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "pw-bands-calculate-band-gap-right" }, { "type": "execution", "name": "pw_bands", "head": false, "results": [{ "name": "band_gaps" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "pw-bands-calculate-band-gap-right", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_bands.in" }], "results": ["band_structure"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "pw_bands.in", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }], "next": "a667d9fd-35d5-5897-be0e-fa0247233649" }, { "name": "Select indirect band gap", "type": "assignment", "operand": "BAND_GAP_INDIRECT", "value": "[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]", "input": [{ "name": "band_gaps", "scope": "pw-bands-calculate-band-gap-right" }], "status": "idle", "statusTrack": [], "flowchartId": "a667d9fd-35d5-5897-be0e-fa0247233649", "tags": [], "head": false, "next": "08819369-b541-5b51-8a40-0ee135039482", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "name": "Set Valence Band Maximum", "type": "assignment", "operand": "VBM_RIGHT", "value": "BAND_GAP_INDIRECT['eigenvalueValence']", "input": [], "status": "idle", "statusTrack": [], "flowchartId": "08819369-b541-5b51-8a40-0ee135039482", "tags": [], "head": false, "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "type": "execution", "name": "bands", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "bands.in" }], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "bands.x", "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", "name": "bands.in", "contextProviders": [], "applicationName": "espresso", "executableName": "bands.x", "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n", "schemaVersion": "2022.8.16" }], "next": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde" }, { "type": "execution", "name": "Electrostatic Potential (ESP)", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "pp.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "pp_electrostatic_potential.in" }], "results": [], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pp.x", "name": "pp_electrostatic_potential", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", "name": "pp_electrostatic_potential.in", "contextProviders": [], "applicationName": "espresso", "executableName": "pp.x", "rendered": "&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", "schemaVersion": "2022.8.16" }], "next": "average-electrostatic-potential-right" }, { "type": "execution", "name": "average ESP", "head": false, "results": [{ "name": "average_potential_profile" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "average-electrostatic-potential-right", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "average.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "average.in" }], "results": ["average_potential_profile"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "average.x", "name": "average_potential", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", "name": "average.in", "contextProviders": [], "applicationName": "espresso", "executableName": "average.x", "rendered": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", "schemaVersion": "2022.8.16" }], "next": "c6c11873-91d7-5422-8302-3dcc1ce971e9" }, { "name": "Set Macroscopically Averaged ESP Data", "type": "assignment", "operand": "array_from_context", "value": "average_potential_profile['yDataSeries'][1]", "input": [{ "name": "average_potential_profile", "scope": "average-electrostatic-potential-right" }], "status": "idle", "statusTrack": [], "flowchartId": "c6c11873-91d7-5422-8302-3dcc1ce971e9", "tags": [], "head": false, "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }] }, "espresso/band_gap_hse_dos.json": { "_id": "f1341a29-777d-5ca3-8933-78a5e0d3f6f2", "name": "HSE Band Gap", "application": { "name": "espresso" }, "properties": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "density_of_states"], "model": { "type": "dft", "subtype": "hybrid", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "hse06" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf_hse", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "band_gaps" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "f494cdb2-304f-5da2-b979-ce3fbba3a6c4", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_scf_hse.in" }], "results": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf_hse", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = {% if kgrid.dimensions[0]%2 == 0 %}{{kgrid.dimensions[0]/2}}{% else %}{{(kgrid.dimensions[0]+1)/2}}{% endif %}, nqx2 = {% if kgrid.dimensions[1]%2 == 0 %}{{kgrid.dimensions[1]/2}}{% else %}{{(kgrid.dimensions[1]+1)/2}}{% endif %}, nqx3 = {% if kgrid.dimensions[2]%2 == 0 %}{{kgrid.dimensions[2]/2}}{% else %}{{(kgrid.dimensions[2]+1)/2}}{% endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{% if d%2 == 0 %}{{d}} {% else %}{{d+1}} {% endif %}{% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf_hse.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = 1, nqx2 = 1, nqx3 = 1\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651" }, { "type": "execution", "name": "projwfc", "head": false, "results": [{ "name": "density_of_states" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "projwfc.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "projwfc.in" }], "results": ["density_of_states"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "projwfc.x", "name": "projwfc", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n", "name": "projwfc.in", "contextProviders": [], "applicationName": "espresso", "executableName": "projwfc.x", "rendered": "&PROJWFC\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n degauss = 0.01\n deltaE = 0.05\n/\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/band_gap.json": { "_id": "233bb8cf-3b4a-5378-84d9-a6a95a2ab43d", "name": "Band Gap", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "fermi_energy", "band_gaps"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0" }, { "type": "execution", "name": "pw_nscf", "head": false, "results": [{ "name": "fermi_energy" }, { "name": "band_gaps" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_nscf.in" }], "results": ["fermi_energy", "band_gaps"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_nscf", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_nscf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }] }] }, "espresso/band_structure_dos.json": { "_id": "fa594399-6b98-5d79-986c-0713601dc06c", "name": "Band Structure + Density of States", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "band_structure", "fermi_energy", "band_gaps", "density_of_states"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "d618df45-5af3-5da5-8882-d74a27e00b04" }, { "type": "execution", "name": "pw_bands", "head": false, "results": [{ "name": "band_structure" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "d618df45-5af3-5da5-8882-d74a27e00b04", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_bands.in" }], "results": ["band_structure"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "pw_bands.in", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }], "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2" }, { "type": "execution", "name": "bands", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "bands.in" }], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "bands.x", "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", "name": "bands.in", "contextProviders": [], "applicationName": "espresso", "executableName": "bands.x", "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n", "schemaVersion": "2022.8.16" }], "next": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0" }, { "type": "execution", "name": "pw_nscf", "head": false, "results": [{ "name": "fermi_energy" }, { "name": "band_gaps" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_nscf.in" }], "results": ["fermi_energy", "band_gaps"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_nscf", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_nscf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651" }, { "type": "execution", "name": "projwfc", "head": false, "results": [{ "name": "density_of_states" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "projwfc.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "projwfc.in" }], "results": ["density_of_states"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "projwfc.x", "name": "projwfc", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n", "name": "projwfc.in", "contextProviders": [], "applicationName": "espresso", "executableName": "projwfc.x", "rendered": "&PROJWFC\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n degauss = 0.01\n deltaE = 0.05\n/\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/band_structure_hse.json": { "_id": "e47ca302-96f2-5726-9b4c-f34cdfaa7f72", "name": "Main HSE Run", "application": { "name": "espresso" }, "properties": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "model": { "type": "dft", "subtype": "hybrid", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "hse06" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf_bands_hse", "head": true, "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "08bd7e4a-2454-53b7-8cc9-9a95975f7e6f", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_scf_bands_hse.in" }], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf_bands_hse", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n {% for d in qgrid.dimensions -%}\n nqx{{loop.index}} = {{d}}\n {% endfor %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal\n{{ '{{' }} {{ explicitKPath.length }} {% raw %} + KPOINTS|length {% endraw %} {{ '}}' }}\n{% raw %}\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n{% endraw %}\n{% for point in explicitKPath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}0.0000001\n{% endfor %}\n", "name": "pw_scf_bands_hse.in", "contextProviders": [{ "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "QGridFormDataManager" }, { "name": "ExplicitKPathFormDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n nqx1 = 1\n nqx2 = 1\n nqx3 = 1\n \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal\n{{ 101 + KPOINTS|length }}\n\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n\n 0.000000000 0.000000000 0.000000000 0.0000001\n 0.050000000 0.000000000 0.050000000 0.0000001\n 0.100000000 0.000000000 0.100000000 0.0000001\n 0.150000000 0.000000000 0.150000000 0.0000001\n 0.200000000 0.000000000 0.200000000 0.0000001\n 0.250000000 0.000000000 0.250000000 0.0000001\n 0.300000000 0.000000000 0.300000000 0.0000001\n 0.350000000 0.000000000 0.350000000 0.0000001\n 0.400000000 0.000000000 0.400000000 0.0000001\n 0.450000000 0.000000000 0.450000000 0.0000001\n 0.500000000 0.000000000 0.500000000 0.0000001\n 0.500000000 0.025000000 0.525000000 0.0000001\n 0.500000000 0.050000000 0.550000000 0.0000001\n 0.500000000 0.075000000 0.575000000 0.0000001\n 0.500000000 0.100000000 0.600000000 0.0000001\n 0.500000000 0.125000000 0.625000000 0.0000001\n 0.500000000 0.150000000 0.650000000 0.0000001\n 0.500000000 0.175000000 0.675000000 0.0000001\n 0.500000000 0.200000000 0.700000000 0.0000001\n 0.500000000 0.225000000 0.725000000 0.0000001\n 0.500000000 0.250000000 0.750000000 0.0000001\n 0.487500000 0.262500000 0.750000000 0.0000001\n 0.475000000 0.275000000 0.750000000 0.0000001\n 0.462500000 0.287500000 0.750000000 0.0000001\n 0.450000000 0.300000000 0.750000000 0.0000001\n 0.437500000 0.312500000 0.750000000 0.0000001\n 0.425000000 0.325000000 0.750000000 0.0000001\n 0.412500000 0.337500000 0.750000000 0.0000001\n 0.400000000 0.350000000 0.750000000 0.0000001\n 0.387500000 0.362500000 0.750000000 0.0000001\n 0.375000000 0.375000000 0.750000000 0.0000001\n 0.337500000 0.337500000 0.675000000 0.0000001\n 0.300000000 0.300000000 0.600000000 0.0000001\n 0.262500000 0.262500000 0.525000000 0.0000001\n 0.225000000 0.225000000 0.450000000 0.0000001\n 0.187500000 0.187500000 0.375000000 0.0000001\n 0.150000000 0.150000000 0.300000000 0.0000001\n 0.112500000 0.112500000 0.225000000 0.0000001\n 0.075000000 0.075000000 0.150000000 0.0000001\n 0.037500000 0.037500000 0.075000000 0.0000001\n 0.000000000 0.000000000 0.000000000 0.0000001\n 0.050000000 0.050000000 0.050000000 0.0000001\n 0.100000000 0.100000000 0.100000000 0.0000001\n 0.150000000 0.150000000 0.150000000 0.0000001\n 0.200000000 0.200000000 0.200000000 0.0000001\n 0.250000000 0.250000000 0.250000000 0.0000001\n 0.300000000 0.300000000 0.300000000 0.0000001\n 0.350000000 0.350000000 0.350000000 0.0000001\n 0.400000000 0.400000000 0.400000000 0.0000001\n 0.450000000 0.450000000 0.450000000 0.0000001\n 0.500000000 0.500000000 0.500000000 0.0000001\n 0.512500000 0.475000000 0.512500000 0.0000001\n 0.525000000 0.450000000 0.525000000 0.0000001\n 0.537500000 0.425000000 0.537500000 0.0000001\n 0.550000000 0.400000000 0.550000000 0.0000001\n 0.562500000 0.375000000 0.562500000 0.0000001\n 0.575000000 0.350000000 0.575000000 0.0000001\n 0.587500000 0.325000000 0.587500000 0.0000001\n 0.600000000 0.300000000 0.600000000 0.0000001\n 0.612500000 0.275000000 0.612500000 0.0000001\n 0.625000000 0.250000000 0.625000000 0.0000001\n 0.612500000 0.250000000 0.637500000 0.0000001\n 0.600000000 0.250000000 0.650000000 0.0000001\n 0.587500000 0.250000000 0.662500000 0.0000001\n 0.575000000 0.250000000 0.675000000 0.0000001\n 0.562500000 0.250000000 0.687500000 0.0000001\n 0.550000000 0.250000000 0.700000000 0.0000001\n 0.537500000 0.250000000 0.712500000 0.0000001\n 0.525000000 0.250000000 0.725000000 0.0000001\n 0.512500000 0.250000000 0.737500000 0.0000001\n 0.500000000 0.250000000 0.750000000 0.0000001\n 0.500000000 0.275000000 0.725000000 0.0000001\n 0.500000000 0.300000000 0.700000000 0.0000001\n 0.500000000 0.325000000 0.675000000 0.0000001\n 0.500000000 0.350000000 0.650000000 0.0000001\n 0.500000000 0.375000000 0.625000000 0.0000001\n 0.500000000 0.400000000 0.600000000 0.0000001\n 0.500000000 0.425000000 0.575000000 0.0000001\n 0.500000000 0.450000000 0.550000000 0.0000001\n 0.500000000 0.475000000 0.525000000 0.0000001\n 0.500000000 0.500000000 0.500000000 0.0000001\n 0.512500000 0.475000000 0.512500000 0.0000001\n 0.525000000 0.450000000 0.525000000 0.0000001\n 0.537500000 0.425000000 0.537500000 0.0000001\n 0.550000000 0.400000000 0.550000000 0.0000001\n 0.562500000 0.375000000 0.562500000 0.0000001\n 0.575000000 0.350000000 0.575000000 0.0000001\n 0.587500000 0.325000000 0.587500000 0.0000001\n 0.600000000 0.300000000 0.600000000 0.0000001\n 0.612500000 0.275000000 0.612500000 0.0000001\n 0.625000000 0.250000000 0.625000000 0.0000001\n 0.612500000 0.225000000 0.612500000 0.0000001\n 0.600000000 0.200000000 0.600000000 0.0000001\n 0.587500000 0.175000000 0.587500000 0.0000001\n 0.575000000 0.150000000 0.575000000 0.0000001\n 0.562500000 0.125000000 0.562500000 0.0000001\n 0.550000000 0.100000000 0.550000000 0.0000001\n 0.537500000 0.075000000 0.537500000 0.0000001\n 0.525000000 0.050000000 0.525000000 0.0000001\n 0.512500000 0.025000000 0.512500000 0.0000001\n 0.500000000 0.000000000 0.500000000 0.0000001\n\n", "schemaVersion": "2022.8.16" }], "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2" }, { "type": "execution", "name": "bands", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "bands.in" }], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "bands.x", "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", "name": "bands.in", "contextProviders": [], "applicationName": "espresso", "executableName": "bands.x", "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/band_structure_magn.json": { "_id": "354942f1-9f3d-57a9-b5ae-6bdf5b3a60af", "name": "Bandstructure with spin magnetism", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "band_structure"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf_magn", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "c229d2a0-3c19-5f13-b3e0-ceb86cb9fbc1", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_scf_magn.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf_magn", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf_magn.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "CollinearMagnetizationDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n nspin = 2\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "ea06c333-0cc7-51d4-bd98-cc53fa0844d1" }, { "type": "execution", "name": "pw_bands_magn", "head": false, "results": [{ "name": "band_structure" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "ea06c333-0cc7-51d4-bd98-cc53fa0844d1", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_bands_magn.in" }], "results": ["band_structure"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_bands_magn", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "pw_bands_magn.in", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "CollinearMagnetizationDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n nspin = 2\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }], "next": "a8e4de4b-1f55-50e8-a712-ce0b37c04752" }, { "type": "execution", "name": "bands_spin_up", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "a8e4de4b-1f55-50e8-a712-ce0b37c04752", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "bands_spin_up.in" }], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "bands.x", "name": "bands_spin_up", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_up.dat'{% endraw %}\n spin_component = 1\n no_overlap = .true.\n/\n", "name": "bands_spin_up.in", "contextProviders": [], "applicationName": "espresso", "executableName": "bands.x", "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands_up.dat'\n spin_component = 1\n no_overlap = .true.\n/\n", "schemaVersion": "2022.8.16" }], "next": "fd937050-a3f3-5d4d-bb50-d150a93ea5e0" }, { "type": "execution", "name": "bands_spin_dn", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "fd937050-a3f3-5d4d-bb50-d150a93ea5e0", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "bands_spin_dn.in" }], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "bands.x", "name": "bands_spin_dn", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_dn.dat'{% endraw %}\n spin_component = 2\n no_overlap = .true.\n/\n", "name": "bands_spin_dn.in", "contextProviders": [], "applicationName": "espresso", "executableName": "bands.x", "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands_dn.dat'\n spin_component = 2\n no_overlap = .true.\n/\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/band_structure_soc.json": { "_id": "153b4a88-5d56-553f-b7d3-40df96968eb4", "name": "Bandstructure with SOC", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "band_structure"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "nc-fr", "data": { "searchText": "nc-fr" } }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf_soc", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "74ec024a-f247-5f15-9c21-cc169bcb62c7", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_scf_soc.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf_soc", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf_soc.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "NonCollinearMagnetizationDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "cee6ae30-cf34-5138-bdc5-5c57c2a6de5b" }, { "type": "execution", "name": "pw_bands_soc", "head": false, "results": [{ "name": "band_structure" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "cee6ae30-cf34-5138-bdc5-5c57c2a6de5b", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_bands_soc.in" }], "results": ["band_structure"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_bands_soc", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "pw_bands_soc.in", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "NonCollinearMagnetizationDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }], "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2" }, { "type": "execution", "name": "bands", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "bands.in" }], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "bands.x", "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", "name": "bands.in", "contextProviders": [], "applicationName": "espresso", "executableName": "bands.x", "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/band_structure.json": { "_id": "26d32e68-c2b5-50e9-8933-15f684fcc039", "name": "Band Structure", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "band_structure"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "d618df45-5af3-5da5-8882-d74a27e00b04" }, { "type": "execution", "name": "pw_bands", "head": false, "results": [{ "name": "band_structure" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "d618df45-5af3-5da5-8882-d74a27e00b04", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_bands.in" }], "results": ["band_structure"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "pw_bands.in", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }], "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2" }, { "type": "execution", "name": "bands", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "bands.in" }], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "bands.x", "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", "name": "bands.in", "contextProviders": [], "applicationName": "espresso", "executableName": "bands.x", "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/dielectric_tensor.json": { "_id": "38340b52-83ad-5862-bc18-c140bdc0cb72", "name": "Compute Dielectric Function", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "fermi_energy", "band_gaps", "dielectric_tensor"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "nc", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "3b230ec3-0791-52f7-a4db-625390b8718f" }, { "name": "Set No-Symmetry Flag", "type": "assignment", "operand": "NO_SYMMETRY_NO_INVERSION", "value": true, "input": [], "status": "idle", "statusTrack": [], "flowchartId": "3b230ec3-0791-52f7-a4db-625390b8718f", "tags": [], "head": false, "next": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "type": "execution", "name": "pw_nscf", "head": false, "results": [{ "name": "fermi_energy" }, { "name": "band_gaps" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_nscf.in" }], "results": ["fermi_energy", "band_gaps"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_nscf", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_nscf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb" }, { "type": "execution", "name": "Compute dielectric function", "head": false, "results": [{ "name": "dielectric_tensor" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "epsilon.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "epsilon.in" }], "results": ["dielectric_tensor"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "epsilon.x", "name": "dielectric_tensor", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n", "name": "epsilon.in", "contextProviders": [], "applicationName": "espresso", "executableName": "epsilon.x", "rendered": "&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/dos.json": { "_id": "2cf317f3-3306-5a96-bc9b-e9103ebcd5be", "name": "Density of States", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "fermi_energy", "band_gaps", "density_of_states"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0" }, { "type": "execution", "name": "pw_nscf", "head": false, "results": [{ "name": "fermi_energy" }, { "name": "band_gaps" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_nscf.in" }], "results": ["fermi_energy", "band_gaps"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_nscf", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_nscf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651" }, { "type": "execution", "name": "projwfc", "head": false, "results": [{ "name": "density_of_states" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "projwfc.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "projwfc.in" }], "results": ["density_of_states"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "projwfc.x", "name": "projwfc", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n", "name": "projwfc.in", "contextProviders": [], "applicationName": "espresso", "executableName": "projwfc.x", "rendered": "&PROJWFC\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n degauss = 0.01\n deltaE = 0.05\n/\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/electronic_density_mesh.json": { "_id": "e2749c5a-fcd9-589c-819b-8b88c5c90924", "name": "Electronic Density Mesh", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "e1a6e1e9-7994-5cd0-98d7-ae8909a10061" }, { "type": "execution", "name": "pp_density", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "e1a6e1e9-7994-5cd0-98d7-ae8909a10061", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "pp.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "pp_density.in" }], "results": [], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pp.x", "name": "pp_density", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n", "name": "pp_density.in", "contextProviders": [], "applicationName": "espresso", "executableName": "pp.x", "rendered": "&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/esm_relax.json": { "_id": "69728792-afeb-50aa-9b4e-6974a90f676a", "name": "Effective Screening Medium (ESM) Relax", "application": { "name": "espresso" }, "properties": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor", "potential_profile", "charge_density_profile"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_esm_relax", "head": true, "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }, { "name": "potential_profile" }, { "name": "charge_density_profile" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "a2bec506-1fdd-5125-a787-85f31cde20c1", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_esm_relax.in" }], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor", "potential_profile", "charge_density_profile"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_esm_relax", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_esm_relax.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "BoundaryConditionsFormDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = 'pbc'\n fcp_mu = 0\n esm_w = 0\n esm_efield = 0\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }] }] }, "espresso/esm.json": { "_id": "0de669f6-a455-5dae-b331-19dc85f7090f", "name": "Effective Screening Medium (ESM)", "application": { "name": "espresso" }, "properties": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor", "potential_profile", "charge_density_profile"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_esm", "head": true, "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }, { "name": "potential_profile" }, { "name": "charge_density_profile" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "2f487bc6-c237-53e4-bad5-be60369662cb", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_esm.in" }], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor", "potential_profile", "charge_density_profile"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_esm", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_esm.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "BoundaryConditionsFormDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = 'pbc'\n fcp_mu = 0\n esm_w = 0\n esm_efield = 0\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }] }] }, "espresso/espresso_extract_kpoints.json": { "_id": "a2785cc5-2427-5c7a-b30f-7077475b948c", "name": "Extract KPOINTS", "application": { "name": "espresso" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "Extract kpoints", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "a716b133-2d04-50b5-b497-100265e3fa24", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "espresso_extract_kpoints.py" }, { "name": "requirements.txt", "templateName": "requirements_empty.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "espresso_extract_kpoints", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n", "name": "espresso_extract_kpoints.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n", "schemaVersion": "2022.8.16" }, { "content": "# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/espresso_xml_get_qpt_irr.json": { "_id": "e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a", "name": "espresso-xml-get-qpt-irr", "application": { "name": "espresso" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "python", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "9b8a495e-1ac1-56a7-b2e0-af1b405a1219", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "espresso_xml_get_qpt_irr.py" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "espresso_xml_get_qpt_irr", "schemaVersion": "2022.8.16", "isDefault": false }, "next": "d0fd8654-2106-546b-8792-7bb46272befc", "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n{# JOB_WORK_DIR will be initialized at runtime => avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n", "name": "espresso_xml_get_qpt_irr.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n\n\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n", "schemaVersion": "2022.8.16" }] }, { "name": "assignment", "type": "assignment", "operand": "Q_POINTS", "value": "json.loads(STDOUT)", "input": [{ "scope": "9b8a495e-1ac1-56a7-b2e0-af1b405a1219", "name": "STDOUT" }], "status": "idle", "statusTrack": [], "flowchartId": "d0fd8654-2106-546b-8792-7bb46272befc", "tags": [], "head": false, "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }] }, "espresso/fixed_cell_relaxation.json": { "_id": "fb75e249-5489-5146-bd8a-786d33330d9c", "name": "Fixed-cell Relaxation", "application": { "name": "espresso" }, "properties": ["total_energy", "fermi_energy", "pressure", "atomic_forces", "total_force", "stress_tensor", "final_structure"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_relax", "head": true, "results": [{ "name": "total_energy" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }, { "name": "final_structure" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }, { "name": "convergence_ionic" }], "flowchartId": "c42871f6-ab79-5987-b228-c3bd80f16ffd", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_relax.in" }], "monitors": ["standard_output", "convergence_electronic", "convergence_ionic"], "results": ["total_energy", "fermi_energy", "pressure", "atomic_forces", "total_force", "stress_tensor", "final_structure"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_relax", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_relax.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }] }] }, "espresso/gw_band_structure_band_gap_full_frequency.json": { "_id": "46bcdcc8-628e-518e-b8c3-9bf38d7a2aef", "name": "Full Frequency GW Band Structure + Band Gap", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "band_structure", "fermi_energy", "band_gaps"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": { "searchText": ".*dojo-oncv.*" } }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "d82a9858-3f20-5fcd-baeb-0f1d65e9e22e" }, { "type": "execution", "name": "gw_bands_full_frequency", "head": false, "results": [{ "name": "band_structure" }, { "name": "fermi_energy" }, { "name": "band_gaps" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "d82a9858-3f20-5fcd-baeb-0f1d65e9e22e", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "gw.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "gw_bands_full_frequency.in" }], "results": ["band_structure", "fermi_energy", "band_gaps"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "gw.x", "name": "gw_bands_full_frequency", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n", "name": "gw_bands_full_frequency.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QGridFormDataManager" }, { "name": "ExplicitKPath2PIBAFormDataManager" }], "applicationName": "espresso", "executableName": "gw.x", "rendered": "&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n\n ! the grid used for the linear response\n kpt_grid = 2, 2, 2\n qpt_grid = 1, 1, 1\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n101\n 0.000000000 0.000000000 0.000000000\n 0.028867513 -0.040824829 0.050000000\n 0.057735027 -0.081649658 0.100000000\n 0.086602540 -0.122474487 0.150000000\n 0.115470054 -0.163299316 0.200000000\n 0.144337567 -0.204124145 0.250000000\n 0.173205081 -0.244948974 0.300000000\n 0.202072594 -0.285773803 0.350000000\n 0.230940108 -0.326598632 0.400000000\n 0.259807621 -0.367423461 0.450000000\n 0.288675135 -0.408248290 0.500000000\n 0.274241378 -0.387835876 0.525000000\n 0.259807621 -0.367423461 0.550000000\n 0.245373864 -0.347011047 0.575000000\n 0.230940108 -0.326598632 0.600000000\n 0.216506351 -0.306186218 0.625000000\n 0.202072594 -0.285773803 0.650000000\n 0.187638837 -0.265361389 0.675000000\n 0.173205081 -0.244948974 0.700000000\n 0.158771324 -0.224536560 0.725000000\n 0.144337567 -0.204124145 0.750000000\n 0.129903811 -0.183711731 0.750000000\n 0.115470054 -0.163299316 0.750000000\n 0.101036297 -0.142886902 0.750000000\n 0.086602540 -0.122474487 0.750000000\n 0.072168784 -0.102062073 0.750000000\n 0.057735027 -0.081649658 0.750000000\n 0.043301270 -0.061237244 0.750000000\n 0.028867513 -0.040824829 0.750000000\n 0.014433757 -0.020412415 0.750000000\n -0.000000000 -0.000000000 0.750000000\n -0.000000000 -0.000000000 0.675000000\n -0.000000000 -0.000000000 0.600000000\n -0.000000000 -0.000000000 0.525000000\n -0.000000000 -0.000000000 0.450000000\n -0.000000000 -0.000000000 0.375000000\n -0.000000000 -0.000000000 0.300000000\n -0.000000000 -0.000000000 0.225000000\n -0.000000000 -0.000000000 0.150000000\n -0.000000000 -0.000000000 0.075000000\n 0.000000000 0.000000000 0.000000000\n 0.028867513 0.020412415 0.050000000\n 0.057735027 0.040824829 0.100000000\n 0.086602540 0.061237244 0.150000000\n 0.115470054 0.081649658 0.200000000\n 0.144337567 0.102062073 0.250000000\n 0.173205081 0.122474487 0.300000000\n 0.202072594 0.142886902 0.350000000\n 0.230940108 0.163299316 0.400000000\n 0.259807621 0.183711731 0.450000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.339193283 -0.204124145 0.637500000\n 0.317542648 -0.204124145 0.650000000\n 0.295892013 -0.204124145 0.662500000\n 0.274241378 -0.204124145 0.675000000\n 0.252590743 -0.204124145 0.687500000\n 0.230940108 -0.204124145 0.700000000\n 0.209289473 -0.204124145 0.712500000\n 0.187638837 -0.204124145 0.725000000\n 0.165988202 -0.204124145 0.737500000\n 0.144337567 -0.204124145 0.750000000\n 0.158771324 -0.163299316 0.725000000\n 0.173205081 -0.122474487 0.700000000\n 0.187638837 -0.081649658 0.675000000\n 0.202072594 -0.040824829 0.650000000\n 0.216506351 -0.000000000 0.625000000\n 0.230940108 0.040824829 0.600000000\n 0.245373864 0.081649658 0.575000000\n 0.259807621 0.122474487 0.550000000\n 0.274241378 0.163299316 0.525000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.353627040 -0.224536560 0.612500000\n 0.346410162 -0.244948974 0.600000000\n 0.339193283 -0.265361389 0.587500000\n 0.331976405 -0.285773803 0.575000000\n 0.324759526 -0.306186218 0.562500000\n 0.317542648 -0.326598632 0.550000000\n 0.310325770 -0.347011047 0.537500000\n 0.303108891 -0.367423461 0.525000000\n 0.295892013 -0.387835876 0.512500000\n 0.288675135 -0.408248290 0.500000000\n\n/\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/gw_band_structure_band_gap_plasmon_pole.json": { "_id": "72b79a87-8eef-5fe2-9d6c-6c9c256dd56c", "name": "Plasmon-Pole GW Band Structure + Band Gap", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "band_structure", "fermi_energy", "band_gaps"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": { "searchText": ".*dojo-oncv.*" } }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "f9910952-eca9-5a5f-ae03-a0060ae2fc78" }, { "type": "execution", "name": "gw_bands_plasmon_pole", "head": false, "results": [{ "name": "band_structure" }, { "name": "fermi_energy" }, { "name": "band_gaps" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "f9910952-eca9-5a5f-ae03-a0060ae2fc78", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "gw.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "gw_bands_plasmon_pole.in" }], "results": ["band_structure", "fermi_energy", "band_gaps"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "gw.x", "name": "gw_bands_plasmon_pole", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n", "name": "gw_bands_plasmon_pole.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QGridFormDataManager" }, { "name": "ExplicitKPath2PIBAFormDataManager" }], "applicationName": "espresso", "executableName": "gw.x", "rendered": "&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n\n ! the grid used for the linear response\n kpt_grid = 2, 2, 2\n qpt_grid = 1, 1, 1\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n101\n 0.000000000 0.000000000 0.000000000\n 0.028867513 -0.040824829 0.050000000\n 0.057735027 -0.081649658 0.100000000\n 0.086602540 -0.122474487 0.150000000\n 0.115470054 -0.163299316 0.200000000\n 0.144337567 -0.204124145 0.250000000\n 0.173205081 -0.244948974 0.300000000\n 0.202072594 -0.285773803 0.350000000\n 0.230940108 -0.326598632 0.400000000\n 0.259807621 -0.367423461 0.450000000\n 0.288675135 -0.408248290 0.500000000\n 0.274241378 -0.387835876 0.525000000\n 0.259807621 -0.367423461 0.550000000\n 0.245373864 -0.347011047 0.575000000\n 0.230940108 -0.326598632 0.600000000\n 0.216506351 -0.306186218 0.625000000\n 0.202072594 -0.285773803 0.650000000\n 0.187638837 -0.265361389 0.675000000\n 0.173205081 -0.244948974 0.700000000\n 0.158771324 -0.224536560 0.725000000\n 0.144337567 -0.204124145 0.750000000\n 0.129903811 -0.183711731 0.750000000\n 0.115470054 -0.163299316 0.750000000\n 0.101036297 -0.142886902 0.750000000\n 0.086602540 -0.122474487 0.750000000\n 0.072168784 -0.102062073 0.750000000\n 0.057735027 -0.081649658 0.750000000\n 0.043301270 -0.061237244 0.750000000\n 0.028867513 -0.040824829 0.750000000\n 0.014433757 -0.020412415 0.750000000\n -0.000000000 -0.000000000 0.750000000\n -0.000000000 -0.000000000 0.675000000\n -0.000000000 -0.000000000 0.600000000\n -0.000000000 -0.000000000 0.525000000\n -0.000000000 -0.000000000 0.450000000\n -0.000000000 -0.000000000 0.375000000\n -0.000000000 -0.000000000 0.300000000\n -0.000000000 -0.000000000 0.225000000\n -0.000000000 -0.000000000 0.150000000\n -0.000000000 -0.000000000 0.075000000\n 0.000000000 0.000000000 0.000000000\n 0.028867513 0.020412415 0.050000000\n 0.057735027 0.040824829 0.100000000\n 0.086602540 0.061237244 0.150000000\n 0.115470054 0.081649658 0.200000000\n 0.144337567 0.102062073 0.250000000\n 0.173205081 0.122474487 0.300000000\n 0.202072594 0.142886902 0.350000000\n 0.230940108 0.163299316 0.400000000\n 0.259807621 0.183711731 0.450000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.339193283 -0.204124145 0.637500000\n 0.317542648 -0.204124145 0.650000000\n 0.295892013 -0.204124145 0.662500000\n 0.274241378 -0.204124145 0.675000000\n 0.252590743 -0.204124145 0.687500000\n 0.230940108 -0.204124145 0.700000000\n 0.209289473 -0.204124145 0.712500000\n 0.187638837 -0.204124145 0.725000000\n 0.165988202 -0.204124145 0.737500000\n 0.144337567 -0.204124145 0.750000000\n 0.158771324 -0.163299316 0.725000000\n 0.173205081 -0.122474487 0.700000000\n 0.187638837 -0.081649658 0.675000000\n 0.202072594 -0.040824829 0.650000000\n 0.216506351 -0.000000000 0.625000000\n 0.230940108 0.040824829 0.600000000\n 0.245373864 0.081649658 0.575000000\n 0.259807621 0.122474487 0.550000000\n 0.274241378 0.163299316 0.525000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.353627040 -0.224536560 0.612500000\n 0.346410162 -0.244948974 0.600000000\n 0.339193283 -0.265361389 0.587500000\n 0.331976405 -0.285773803 0.575000000\n 0.324759526 -0.306186218 0.562500000\n 0.317542648 -0.326598632 0.550000000\n 0.310325770 -0.347011047 0.537500000\n 0.303108891 -0.367423461 0.525000000\n 0.295892013 -0.387835876 0.512500000\n 0.288675135 -0.408248290 0.500000000\n\n/\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/kpoint_convergence.json": { "_id": "ff6a8fbc-2202-5786-9a26-67c843417d0b", "name": "K-point Convergence", "application": { "name": "espresso" }, "properties": ["total_energy", "fermi_energy", "pressure", "atomic_forces", "total_force", "stress_tensor"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "name": "Init tolerance", "type": "assignment", "operand": "TOL", "value": 0.00001, "input": [], "flowchartId": "init-tolerance", "status": "idle", "statusTrack": [], "tags": [], "head": true, "next": "init-increment", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "name": "Init increment", "type": "assignment", "operand": "INC", "value": 1, "input": [], "flowchartId": "init-increment", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "init-result", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "name": "Init result", "type": "assignment", "operand": "PREV_RESULT", "value": 0, "input": [], "flowchartId": "init-result", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "init-parameter", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "name": "Init parameter", "type": "assignment", "operand": "PARAMETER", "value": 1, "input": [], "flowchartId": "init-parameter", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "pwscf-kpoint-convergence", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "type": "execution", "name": "pw_scf_kpt_conv", "head": false, "results": [{ "name": "total_energy" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "pwscf-kpoint-convergence", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_scf_kpt_conv.in" }], "results": ["total_energy", "fermi_energy", "pressure", "atomic_forces", "total_force", "stress_tensor"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf_kpt_conv", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0{% endraw %}\n", "name": "pw_scf_kpt_conv.in", "contextProviders": [{ "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0\n", "schemaVersion": "2022.8.16" }], "next": "store-result" }, { "name": "store result", "type": "assignment", "operand": "RESULT", "value": "total_energy", "input": [{ "name": "total_energy", "scope": "pwscf-kpoint-convergence" }], "flowchartId": "store-result", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "check-convergence", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "name": "check convergence", "type": "condition", "input": [], "results": [], "preProcessors": [], "postProcessors": [], "then": "convergence-is-reached", "else": "update-result", "statement": "abs((PREV_RESULT-RESULT)/RESULT) < TOL", "maxOccurrences": 50, "flowchartId": "check-convergence", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "update-result", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "name": "update result", "type": "assignment", "operand": "PREV_RESULT", "value": "RESULT", "input": [{ "name": "RESULT", "scope": "global" }], "flowchartId": "update-result", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "increment-parameter", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "name": "increment parameter", "type": "assignment", "operand": "PREV_RESULT", "value": "PARAMETER+INC", "input": [{ "name": "INC", "scope": "global" }, { "name": "PARAMETER", "scope": "global" }], "flowchartId": "increment-parameter", "next": "pwscf-kpoint-convergence", "status": "idle", "statusTrack": [], "tags": [], "head": false, "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "name": "exit", "type": "assignment", "operand": "PARAMETER", "value": "PARAMETER", "input": [{ "name": "PARAMETER", "scope": "global" }], "flowchartId": "convergence-is-reached", "status": "idle", "statusTrack": [], "tags": [], "head": false, "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }] }, "espresso/neb.json": { "isMultiMaterial": true, "_id": "c9034468-df28-5357-8912-02226f919042", "name": "Nudged Elastic Band (NEB)", "application": { "name": "espresso" }, "properties": ["reaction_energy_barrier", "reaction_energy_profile"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "neb", "head": true, "results": [{ "name": "reaction_energy_barrier" }, { "name": "reaction_energy_profile" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "9f273ca0-d240-5b1f-89a9-64dd579304ac", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "neb.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "neb.in" }], "results": ["reaction_energy_barrier", "reaction_energy_profile"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "neb.x", "name": "neb", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = {{ 2 + (input.INTERMEDIATE_IMAGES.length or neb.nImages) }},\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\n{{ input.FIRST_IMAGE }}\n{%- for IMAGE in input.INTERMEDIATE_IMAGES %}\nINTERMEDIATE_IMAGE\nATOMIC_POSITIONS crystal\n{{ IMAGE }}\n{%- endfor %}\nLAST_IMAGE\nATOMIC_POSITIONS crystal\n{{ input.LAST_IMAGE }}\nEND_POSITIONS\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nEND_ENGINE_INPUT\nEND\n", "name": "neb.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "NEBFormDataManager" }, { "name": "QENEBInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "neb.x", "rendered": "BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = 3,\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\nSi 28.0855 \nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nLAST_IMAGE\nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nEND_POSITIONS\nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \nEND_ENGINE_INPUT\nEND\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/ph_init_qpoints.json": { "_id": "2f017bcb-f4ba-55b8-b939-1f780679a88e", "name": "ph-init-qpoints", "application": { "name": "espresso" }, "properties": [], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "ph_init_qpoints", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "b8ea6a33-38f3-5434-b17e-b5eae8fff9fc", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "ph_init_qpoints.in" }], "results": [], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "ph.x", "name": "ph_init_qpoints", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", "name": "ph_init_qpoints.in", "contextProviders": [{ "name": "QGridFormDataManager" }], "applicationName": "espresso", "executableName": "ph.x", "rendered": "&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/ph_single_irr_qpt.json": { "_id": "e68db280-8636-53e3-81a0-88396ba6147d", "name": "ph-single-irr-qpt", "application": { "name": "espresso" }, "properties": [], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "ph_single_irr_qpt", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "8db9af08-d935-57a0-a824-e7db6d936de8", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "ph_single_irr_qpt.in" }], "results": [], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "ph.x", "name": "ph_single_irr_qpt", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", "name": "ph_single_irr_qpt.in", "contextProviders": [{ "name": "QGridFormDataManager" }], "applicationName": "espresso", "executableName": "ph.x", "rendered": "&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n \n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n \n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = '{{ JOB_SCRATCH_DIR }}/outdir'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/phonon_dispersions.json": { "_id": "bfb69b48-8fbf-5a0d-8949-448f20754766", "name": "Phonon Dispersions", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "phonon_dos", "phonon_dispersions"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "13bcafce-56ef-5b47-b079-317495eb6933" }, { "type": "execution", "name": "ph_grid", "head": false, "results": [{ "name": "phonon_dos" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "13bcafce-56ef-5b47-b079-317495eb6933", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "ph_grid.in" }], "results": ["phonon_dos"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "ph.x", "name": "ph_grid", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", "name": "ph_grid.in", "contextProviders": [{ "name": "QGridFormDataManager" }], "applicationName": "espresso", "executableName": "ph.x", "rendered": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n ldisp = .true.\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n", "schemaVersion": "2022.8.16" }], "next": "3b4507a7-9244-540b-abe0-66bceab700f5" }, { "type": "execution", "name": "q2r", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "3b4507a7-9244-540b-abe0-66bceab700f5", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "q2r.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "q2r.in" }], "results": [], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "q2r.x", "name": "q2r", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", "name": "q2r.in", "contextProviders": [], "applicationName": "espresso", "executableName": "q2r.x", "rendered": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", "schemaVersion": "2022.8.16" }], "next": "a7fded20-889b-54fc-bbb0-456e82689ab1" }, { "type": "execution", "name": "matdyn_path", "head": false, "results": [{ "name": "phonon_dispersions" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "a7fded20-889b-54fc-bbb0-456e82689ab1", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "matdyn.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "matdyn_path.in" }], "monitors": ["standard_output"], "results": ["phonon_dispersions"], "applicationName": "espresso", "executableName": "matdyn.x", "name": "matdyn_path", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "matdyn_path.in", "contextProviders": [{ "name": "IPathFormDataManager" }], "applicationName": "espresso", "executableName": "matdyn.x", "rendered": "&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/phonon_dos_dispersion.json": { "_id": "291d25cd-378a-5be7-9d85-c8013a4b165b", "name": "Phonon Density of States + Dispersions", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "phonon_dos", "phonon_dispersions"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "13bcafce-56ef-5b47-b079-317495eb6933" }, { "type": "execution", "name": "ph_grid", "head": false, "results": [{ "name": "phonon_dos" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "13bcafce-56ef-5b47-b079-317495eb6933", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "ph_grid.in" }], "results": ["phonon_dos"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "ph.x", "name": "ph_grid", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", "name": "ph_grid.in", "contextProviders": [{ "name": "QGridFormDataManager" }], "applicationName": "espresso", "executableName": "ph.x", "rendered": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n ldisp = .true.\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n", "schemaVersion": "2022.8.16" }], "next": "3b4507a7-9244-540b-abe0-66bceab700f5" }, { "type": "execution", "name": "q2r", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "3b4507a7-9244-540b-abe0-66bceab700f5", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "q2r.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "q2r.in" }], "results": [], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "q2r.x", "name": "q2r", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", "name": "q2r.in", "contextProviders": [], "applicationName": "espresso", "executableName": "q2r.x", "rendered": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", "schemaVersion": "2022.8.16" }], "next": "8fe6a24b-c994-55a2-a448-88657292e8c2" }, { "type": "execution", "name": "matdyn_grid", "head": false, "results": [{ "name": "phonon_dos" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "8fe6a24b-c994-55a2-a448-88657292e8c2", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "matdyn.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "matdyn_grid.in" }], "monitors": ["standard_output"], "results": ["phonon_dos"], "applicationName": "espresso", "executableName": "matdyn.x", "name": "matdyn_grid", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n", "name": "matdyn_grid.in", "contextProviders": [{ "name": "IGridFormDataManager" }], "applicationName": "espresso", "executableName": "matdyn.x", "rendered": "&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n", "schemaVersion": "2022.8.16" }], "next": "a7fded20-889b-54fc-bbb0-456e82689ab1" }, { "type": "execution", "name": "matdyn_path", "head": false, "results": [{ "name": "phonon_dispersions" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "a7fded20-889b-54fc-bbb0-456e82689ab1", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "matdyn.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "matdyn_path.in" }], "monitors": ["standard_output"], "results": ["phonon_dispersions"], "applicationName": "espresso", "executableName": "matdyn.x", "name": "matdyn_path", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "matdyn_path.in", "contextProviders": [{ "name": "IPathFormDataManager" }], "applicationName": "espresso", "executableName": "matdyn.x", "rendered": "&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/phonon_dos.json": { "_id": "2232051b-9f2a-5a48-9b4d-6231eb6e8297", "name": "Phonon Density of States", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "phonon_dos"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "13bcafce-56ef-5b47-b079-317495eb6933" }, { "type": "execution", "name": "ph_grid", "head": false, "results": [{ "name": "phonon_dos" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "13bcafce-56ef-5b47-b079-317495eb6933", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "ph_grid.in" }], "results": ["phonon_dos"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "ph.x", "name": "ph_grid", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", "name": "ph_grid.in", "contextProviders": [{ "name": "QGridFormDataManager" }], "applicationName": "espresso", "executableName": "ph.x", "rendered": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n ldisp = .true.\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n", "schemaVersion": "2022.8.16" }], "next": "3b4507a7-9244-540b-abe0-66bceab700f5" }, { "type": "execution", "name": "q2r", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "3b4507a7-9244-540b-abe0-66bceab700f5", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "q2r.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "q2r.in" }], "results": [], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "q2r.x", "name": "q2r", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", "name": "q2r.in", "contextProviders": [], "applicationName": "espresso", "executableName": "q2r.x", "rendered": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", "schemaVersion": "2022.8.16" }], "next": "8fe6a24b-c994-55a2-a448-88657292e8c2" }, { "type": "execution", "name": "matdyn_grid", "head": false, "results": [{ "name": "phonon_dos" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "8fe6a24b-c994-55a2-a448-88657292e8c2", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "matdyn.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "matdyn_grid.in" }], "monitors": ["standard_output"], "results": ["phonon_dos"], "applicationName": "espresso", "executableName": "matdyn.x", "name": "matdyn_grid", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n", "name": "matdyn_grid.in", "contextProviders": [{ "name": "IGridFormDataManager" }], "applicationName": "espresso", "executableName": "matdyn.x", "rendered": "&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/phonon_reduce.json": { "_id": "545a66e2-dfbe-513e-acaf-d79d0d139b9c", "name": "reduce", "application": { "name": "espresso" }, "properties": ["phonon_dos", "phonon_dispersions"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "ph_grid_restart", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "cb206177-a4af-599a-81ba-6c88d24253b6", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "ph_grid_restart.in" }], "results": [], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "ph.x", "name": "ph_grid_restart", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", "name": "ph_grid_restart.in", "contextProviders": [{ "name": "QGridFormDataManager" }], "applicationName": "espresso", "executableName": "ph.x", "rendered": "&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n", "schemaVersion": "2022.8.16" }], "next": "3b4507a7-9244-540b-abe0-66bceab700f5" }, { "type": "execution", "name": "q2r", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "3b4507a7-9244-540b-abe0-66bceab700f5", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "q2r.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "q2r.in" }], "results": [], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "q2r.x", "name": "q2r", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", "name": "q2r.in", "contextProviders": [], "applicationName": "espresso", "executableName": "q2r.x", "rendered": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", "schemaVersion": "2022.8.16" }], "next": "8fe6a24b-c994-55a2-a448-88657292e8c2" }, { "type": "execution", "name": "matdyn_grid", "head": false, "results": [{ "name": "phonon_dos" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "8fe6a24b-c994-55a2-a448-88657292e8c2", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "matdyn.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "matdyn_grid.in" }], "monitors": ["standard_output"], "results": ["phonon_dos"], "applicationName": "espresso", "executableName": "matdyn.x", "name": "matdyn_grid", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n", "name": "matdyn_grid.in", "contextProviders": [{ "name": "IGridFormDataManager" }], "applicationName": "espresso", "executableName": "matdyn.x", "rendered": "&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n", "schemaVersion": "2022.8.16" }], "next": "a7fded20-889b-54fc-bbb0-456e82689ab1" }, { "type": "execution", "name": "matdyn_path", "head": false, "results": [{ "name": "phonon_dispersions" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "a7fded20-889b-54fc-bbb0-456e82689ab1", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "matdyn.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "matdyn_path.in" }], "monitors": ["standard_output"], "results": ["phonon_dispersions"], "applicationName": "espresso", "executableName": "matdyn.x", "name": "matdyn_path", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "matdyn_path.in", "contextProviders": [{ "name": "IPathFormDataManager" }], "applicationName": "espresso", "executableName": "matdyn.x", "rendered": "&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/post_processor.json": { "_id": "7239fc3a-b343-513f-af35-e8687e1829da", "name": "post-processor", "application": { "name": "espresso" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "shell", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "99304304-e873-5c89-ae83-91e61a7f629c", "preProcessors": [], "postProcessors": [], "application": { "name": "shell", "shortName": "sh", "summary": "Shell Script", "build": "GNU", "version": "5.1.8", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "espresso_collect_dynmat.sh" }], "monitors": ["standard_output"], "applicationName": "shell", "executableName": "sh", "name": "espresso_collect_dynmat", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n", "name": "espresso_collect_dynmat.sh", "contextProviders": [], "applicationName": "shell", "executableName": "sh", "rendered": "\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/pre_processor.json": { "_id": "03f3a8a3-1fd0-5007-925f-fba78be63a51", "name": "pre-processor", "application": { "name": "espresso" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "shell", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "99304304-e873-5c89-ae83-91e61a7f629c", "preProcessors": [], "postProcessors": [], "application": { "name": "shell", "shortName": "sh", "summary": "Shell Script", "build": "GNU", "version": "5.1.8", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "espresso_link_outdir_save.sh" }], "monitors": ["standard_output"], "applicationName": "shell", "executableName": "sh", "name": "espresso_link_outdir_save", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n", "name": "espresso_link_outdir_save.sh", "contextProviders": [], "applicationName": "shell", "executableName": "sh", "rendered": "\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/pw_scf.json": { "_id": "79f2cb6a-7994-5369-8c85-af07c55ad26f", "name": "Preliminary SCF Calculation", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }] }] }, "espresso/recalculate_bands.json": { "_id": "64551dfb-e529-5d8d-9092-ff268f4da134", "name": "Recalculate Bands", "application": { "name": "espresso" }, "properties": ["band_structure"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_bands", "head": true, "results": [{ "name": "band_structure" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "d618df45-5af3-5da5-8882-d74a27e00b04", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_bands.in" }], "results": ["band_structure"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "pw_bands.in", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }], "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2" }, { "type": "execution", "name": "bands", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "bands.in" }], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "bands.x", "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", "name": "bands.in", "contextProviders": [], "applicationName": "espresso", "executableName": "bands.x", "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n", "schemaVersion": "2022.8.16" }] }] }, "espresso/surface_energy.json": { "_id": "3e05a2b5-4171-54a2-9d2d-9e46118a56bf", "name": "Surface Energy", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "name": "io-slab", "type": "io", "subtype": "input", "head": true, "results": [], "monitors": [], "flowchartId": "e463ef46-a36e-5168-87dd-e21eb980dfb8", "preProcessors": [], "postProcessors": [], "source": "api", "input": [{ "endpoint": "materials", "endpoint_options": { "params": { "query": "{'_id': MATERIAL_ID}", "projection": "{}" } }, "name": "DATA" }], "next": "ee7abb4e-7848-5aeb-960d-0d441909e2d1", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "slab", "type": "assignment", "operand": "SLAB", "value": "DATA[0]", "input": [{ "name": "DATA", "scope": "e463ef46-a36e-5168-87dd-e21eb980dfb8" }], "head": false, "results": [], "monitors": [], "flowchartId": "ee7abb4e-7848-5aeb-960d-0d441909e2d1", "preProcessors": [], "postProcessors": [], "next": "44263820-0c80-5bd1-b854-9da8d198eac1", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "io-bulk", "type": "io", "subtype": "input", "head": false, "results": [], "monitors": [], "flowchartId": "44263820-0c80-5bd1-b854-9da8d198eac1", "preProcessors": [], "postProcessors": [], "source": "api", "input": [{ "endpoint": "materials", "endpoint_options": { "params": { "query": "{'_id': SLAB.metadata.bulkId}", "projection": "{}" } }, "name": "DATA" }], "next": "b70656f1-a394-57f4-b4de-00096969df4b", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "bulk", "type": "assignment", "operand": "BULK", "value": "DATA[0] if DATA else None", "input": [{ "name": "DATA", "scope": "44263820-0c80-5bd1-b854-9da8d198eac1" }], "head": false, "results": [], "monitors": [], "flowchartId": "b70656f1-a394-57f4-b4de-00096969df4b", "preProcessors": [], "postProcessors": [], "next": "6ca4006a-e3ae-56ea-91a1-06b9790b5f7e", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "assert-bulk", "type": "assertion", "statement": "BULK != None", "errorMessage": "Bulk material does not exist!", "head": false, "results": [], "monitors": [], "flowchartId": "6ca4006a-e3ae-56ea-91a1-06b9790b5f7e", "preProcessors": [], "postProcessors": [], "next": "490635e0-c593-5809-9eb2-c794b96cfed1", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "io-e-bulk", "type": "io", "subtype": "input", "head": false, "results": [], "monitors": [], "flowchartId": "490635e0-c593-5809-9eb2-c794b96cfed1", "preProcessors": [], "postProcessors": [], "source": "api", "input": [{ "endpoint": "refined-properties", "endpoint_options": { "params": { "query": "{ 'exabyteId': BULK.exabyteId, 'data.name': 'total_energy', 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} }", "projection": "{'sort': {'precision.value': -1}, 'limit': 1}" } }, "name": "DATA" }], "next": "bbe13b97-4243-5a85-8f61-a279d0b797aa", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "e-bulk", "type": "assignment", "operand": "E_BULK", "value": "DATA[0].data.value if DATA else None", "input": [{ "name": "DATA", "scope": "490635e0-c593-5809-9eb2-c794b96cfed1" }], "head": false, "results": [], "monitors": [], "flowchartId": "bbe13b97-4243-5a85-8f61-a279d0b797aa", "preProcessors": [], "postProcessors": [], "next": "a06c9f43-7670-5fd0-ac42-7028a472235a", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "assert-e-bulk", "type": "assertion", "statement": "E_BULK != None", "errorMessage": "E_BULK does not exist!", "head": false, "results": [], "monitors": [], "flowchartId": "a06c9f43-7670-5fd0-ac42-7028a472235a", "preProcessors": [], "postProcessors": [], "next": "cdf210be-26ed-585a-b4ac-d55795ba2975", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "surface", "type": "assignment", "operand": "A", "value": "np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))", "input": [], "head": false, "results": [], "monitors": [], "flowchartId": "cdf210be-26ed-585a-b4ac-d55795ba2975", "preProcessors": [], "postProcessors": [], "next": "ffa8e43d-096a-555b-b8d0-6d283365ef47", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "n-bulk", "type": "assignment", "operand": "N_BULK", "value": "len(BULK.basis.elements)", "input": [], "head": false, "results": [], "monitors": [], "flowchartId": "ffa8e43d-096a-555b-b8d0-6d283365ef47", "preProcessors": [], "postProcessors": [], "next": "a0336ec5-a6da-5e4c-bb48-82b70cf5245f", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "n-slab", "type": "assignment", "operand": "N_SLAB", "value": "len(SLAB.basis.elements)", "input": [], "head": false, "results": [], "monitors": [], "flowchartId": "a0336ec5-a6da-5e4c-bb48-82b70cf5245f", "preProcessors": [], "postProcessors": [], "next": "9fc7a088-5533-5f70-bb33-f676ec65f565", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "type": "execution", "name": "pw_scf", "head": false, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "fcd88119-817c-5ac1-a430-ba892ac743eb" }, { "name": "e-slab", "type": "assignment", "operand": "E_SLAB", "value": "total_energy", "input": [{ "name": "total_energy", "scope": "9fc7a088-5533-5f70-bb33-f676ec65f565" }], "head": false, "results": [], "monitors": [], "flowchartId": "fcd88119-817c-5ac1-a430-ba892ac743eb", "preProcessors": [], "postProcessors": [], "next": "542ea9ad-8a07-5a76-b233-f72fb27c4fc6", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "surface-energy", "type": "assignment", "operand": "SURFACE_ENERGY", "value": "1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))", "input": [], "head": false, "results": [{ "name": "surface_energy" }], "monitors": [], "flowchartId": "542ea9ad-8a07-5a76-b233-f72fb27c4fc6", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }] }, "espresso/total_energy.json": { "_id": "a16677f9-bb5b-54b5-9f97-c2af8c073184", "name": "Total Energy", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }] }], "tags": ["default"] }, "espresso/valence_band_offset_calc_from_previous_esp_vbm.json": { "_id": "1b70e606-a7ee-599e-89e0-91a7dc5faa4a", "name": "Calculate VBO", "application": { "name": "espresso" }, "properties": ["valence_band_offset"], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "name": "Difference of valence band maxima", "type": "assignment", "operand": "VBM_DIFF", "value": "VBM_LEFT - VBM_RIGHT", "input": [], "status": "idle", "statusTrack": [], "flowchartId": "bd4eaa98-b001-5694-87ef-ec77540502ab", "tags": [], "head": true, "next": "2626f7bb-d392-5fd4-ab71-329b508de347", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Difference of macroscopically averaged ESP in bulk", "type": "assignment", "operand": "AVG_ESP_DIFF", "value": "AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]", "input": [], "status": "idle", "statusTrack": [], "flowchartId": "2626f7bb-d392-5fd4-ab71-329b508de347", "tags": [], "head": false, "next": "b7307787-53e2-599b-ad12-d627b04074b4", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Lineup of macroscopically averaged ESP in interface", "type": "assignment", "operand": "ESP_LINEUP", "value": "np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])", "input": [], "status": "idle", "statusTrack": [], "flowchartId": "b7307787-53e2-599b-ad12-d627b04074b4", "tags": [], "head": false, "next": "197f4b4d-cb7b-57be-a885-d44cb1f61905", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Valence Band Offset", "type": "assignment", "operand": "VALENCE_BAND_OFFSET", "value": "abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))", "input": [], "results": [{ "name": "valence_band_offset" }], "status": "idle", "statusTrack": [], "flowchartId": "197f4b4d-cb7b-57be-a885-d44cb1f61905", "tags": [], "head": false, "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }] }, "espresso/variable_cell_relaxation.json": { "systemName": "espresso-variable-cell-relaxation", "_id": "58709c44-47f6-5fbf-bf2e-358b9d98f75d", "name": "Variable-cell Relaxation", "application": { "name": "espresso" }, "properties": ["total_energy", "fermi_energy", "pressure", "atomic_forces", "total_force", "stress_tensor", "final_structure"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_vc-relax", "head": true, "results": [{ "name": "total_energy" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }, { "name": "final_structure" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }, { "name": "convergence_ionic" }], "flowchartId": "e1bd0870-6245-5fc2-a50d-48cabc356ac8", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_vc_relax.in" }], "monitors": ["standard_output", "convergence_electronic", "convergence_ionic"], "results": ["total_energy", "fermi_energy", "pressure", "atomic_forces", "total_force", "stress_tensor", "final_structure"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_vc-relax", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_vc_relax.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }] }], "tags": ["variable-cell_relaxation"] }, "espresso/zero_point_energy.json": { "_id": "151538cc-9e71-5269-8b9e-cb5977151227", "name": "Zero Point Energy", "application": { "name": "espresso" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "zero_point_energy"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "107595d1-490f-53a2-8432-7f8a12f14d96" }, { "type": "execution", "name": "ph_zpe", "head": false, "results": [{ "name": "zero_point_energy" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "107595d1-490f-53a2-8432-7f8a12f14d96", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "ph_gamma.in" }], "results": ["zero_point_energy"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "ph.x", "name": "ph_gamma", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n", "name": "ph_gamma.in", "contextProviders": [], "applicationName": "espresso", "executableName": "ph.x", "rendered": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n/\n0 0 0\n", "schemaVersion": "2022.8.16" }] }] }, "nwchem/total_energy.json": { "_id": "9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13", "name": "Total Energy", "application": { "name": "nwchem" }, "properties": ["total_energy", "total_energy_contributions"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "localorbital", "subtype": "pople", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "nwchem_total_energy", "head": true, "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7", "preProcessors": [], "postProcessors": [], "application": { "name": "nwchem", "shortName": "nwchem", "summary": "NWChem", "build": "GNU", "version": "7.0.2", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": false, "postProcessors": ["error_handler"], "monitors": ["standard_output"], "name": "nwchem", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "nwchem_total_energy.inp" }], "results": ["total_energy", "total_energy_contributions"], "monitors": ["standard_output"], "applicationName": "nwchem", "executableName": "nwchem", "name": "nwchem_total_energy", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": " start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n", "name": "nwchem_total_energy.inp", "contextProviders": [{ "name": "NWChemInputDataManager" }], "applicationName": "nwchem", "executableName": "nwchem", "rendered": " start nwchem\n title \"Test\"\n charge 0\n geometry units au noautosym\n Si 0.000000000 0.000000000 0.000000000 \nSi 1.116306745 0.789348070 1.933500000 \n end\n basis\n * library 6-31G\n end\n dft\n xc B3LYP\n mult 1\n end\n task dft energy\n", "schemaVersion": "2022.8.16" }] }] }, "python/ml/classification_tail.json": { "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", "name": "Machine Learning", "application": { "name": "python" }, "properties": ["workflow:pyml_predict", "file_content"], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "Setup Variables and Packages", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "c3608488-0259-5ff4-8b90-11c6e60d6c85", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "settings.py", "templateName": "pyml_settings.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:setup_variables_packages", "schemaVersion": "2022.8.16", "isDefault": false }, "enableRender": true, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", "name": "settings.py", "contextProviders": [{ "name": "MLSettingsDataManager" }], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3" }, { "type": "execution", "name": "Data Input", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "data_input_read_csv_pandas.py", "templateName": "data_input_read_csv_pandas.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:data_input:read_csv:pandas", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", "name": "data_input_read_csv_pandas.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "7fff5212-6c6d-586b-9997-4d4485e09383" }, { "type": "execution", "name": "Train Test Split", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "7fff5212-6c6d-586b-9997-4d4485e09383", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "data_input_train_test_split_sklearn.py", "templateName": "data_input_train_test_split_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:data_input:train_test_split:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "name": "data_input_train_test_split_sklearn.py", "contextProviders": [{ "name": "MLTrainTestSplitDataManager" }], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "799de7dc-9394-571b-8e0d-3ff876a3df02" }, { "type": "execution", "name": "Data Standardize", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "799de7dc-9394-571b-8e0d-3ff876a3df02", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pre_processing_standardization_sklearn.py", "templateName": "pre_processing_standardization_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:pre_processing:standardization:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", "name": "pre_processing_standardization_sklearn.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "8dfc61c3-067d-5ea8-bd26-7296628d707a" }, { "type": "execution", "name": "Model Train and Predict", "head": false, "results": [{ "name": "workflow:pyml_predict" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "8dfc61c3-067d-5ea8-bd26-7296628d707a", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "model_random_forest_classification_sklearn.py", "templateName": "model_random_forest_classification_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "results": ["workflow:pyml_predict"], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:model:random_forest_classification:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "tags": ["remove-all-results", "creates-predictions-csv-during-predict-phase"], "status": "idle", "statusTrack": [], "input": [{ "content": "# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "name": "model_random_forest_classification_sklearn.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "35436b4a-cd9c-5089-ab42-665c4f9ba049" }, { "type": "execution", "name": "ROC Curve Plot", "head": false, "results": [{ "basename": "my_roc_plot.png", "filetype": "image", "name": "file_content" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "35436b4a-cd9c-5089-ab42-665c4f9ba049", "preProcessors": [], "postProcessors": [{ "name": "remove_virtual_environment" }], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "post_processing_roc_curve_sklearn.py", "templateName": "post_processing_roc_curve_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "results": ["file_content"], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:post_processing:roc_curve:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "tags": ["remove-all-results"], "status": "idle", "statusTrack": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "name": "post_processing_roc_curve_sklearn.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }] }] }, "python/ml/clustering_tail.json": { "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", "name": "Machine Learning", "application": { "name": "python" }, "properties": ["workflow:pyml_predict", "file_content"], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "Setup Variables and Packages", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "c3608488-0259-5ff4-8b90-11c6e60d6c85", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "settings.py", "templateName": "pyml_settings.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:setup_variables_packages", "schemaVersion": "2022.8.16", "isDefault": false }, "enableRender": true, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", "name": "settings.py", "contextProviders": [{ "name": "MLSettingsDataManager" }], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3" }, { "type": "execution", "name": "Data Input", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "data_input_read_csv_pandas.py", "templateName": "data_input_read_csv_pandas.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:data_input:read_csv:pandas", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", "name": "data_input_read_csv_pandas.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "7fff5212-6c6d-586b-9997-4d4485e09383" }, { "type": "execution", "name": "Train Test Split", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "7fff5212-6c6d-586b-9997-4d4485e09383", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "data_input_train_test_split_sklearn.py", "templateName": "data_input_train_test_split_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:data_input:train_test_split:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "name": "data_input_train_test_split_sklearn.py", "contextProviders": [{ "name": "MLTrainTestSplitDataManager" }], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "799de7dc-9394-571b-8e0d-3ff876a3df02" }, { "type": "execution", "name": "Data Standardize", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "799de7dc-9394-571b-8e0d-3ff876a3df02", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pre_processing_standardization_sklearn.py", "templateName": "pre_processing_standardization_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:pre_processing:standardization:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", "name": "pre_processing_standardization_sklearn.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "8dfc61c3-067d-5ea8-bd26-7296628d707a" }, { "type": "execution", "name": "Model Train and Predict", "head": false, "results": [{ "name": "workflow:pyml_predict" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "8dfc61c3-067d-5ea8-bd26-7296628d707a", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "model_k_means_clustering_sklearn.py", "templateName": "model_k_means_clustering_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "results": ["workflow:pyml_predict"], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:model:k_means_clustering:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "tags": ["remove-all-results", "creates-predictions-csv-during-predict-phase"], "status": "idle", "statusTrack": [], "input": [{ "content": "# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "name": "model_k_means_clustering_sklearn.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "9c95c27b-c8bd-5e8b-8829-d354611decef" }, { "type": "execution", "name": "2D PCA Clusters Plot", "head": false, "results": [{ "basename": "train_test_split.png", "filetype": "image", "name": "file_content" }, { "basename": "train_clusters.png", "filetype": "image", "name": "file_content" }, { "basename": "test_clusters.png", "filetype": "image", "name": "file_content" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "9c95c27b-c8bd-5e8b-8829-d354611decef", "preProcessors": [], "postProcessors": [{ "name": "remove_virtual_environment" }], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "post_processing_pca_2d_clusters_matplotlib.py", "templateName": "post_processing_pca_2d_clusters_matplotlib.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "results": ["file_content"], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:post_processing:pca_2d_clusters:matplotlib", "schemaVersion": "2022.8.16", "isDefault": false }, "tags": ["remove-all-results"], "status": "idle", "statusTrack": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "name": "post_processing_pca_2d_clusters_matplotlib.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }] }] }, "python/ml/regression_tail.json": { "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", "name": "Machine Learning", "application": { "name": "python" }, "properties": ["workflow:pyml_predict", "file_content"], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "Setup Variables and Packages", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "c3608488-0259-5ff4-8b90-11c6e60d6c85", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "settings.py", "templateName": "pyml_settings.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:setup_variables_packages", "schemaVersion": "2022.8.16", "isDefault": false }, "enableRender": true, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", "name": "settings.py", "contextProviders": [{ "name": "MLSettingsDataManager" }], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3" }, { "type": "execution", "name": "Data Input", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "data_input_read_csv_pandas.py", "templateName": "data_input_read_csv_pandas.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:data_input:read_csv:pandas", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", "name": "data_input_read_csv_pandas.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "7fff5212-6c6d-586b-9997-4d4485e09383" }, { "type": "execution", "name": "Train Test Split", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "7fff5212-6c6d-586b-9997-4d4485e09383", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "data_input_train_test_split_sklearn.py", "templateName": "data_input_train_test_split_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:data_input:train_test_split:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "name": "data_input_train_test_split_sklearn.py", "contextProviders": [{ "name": "MLTrainTestSplitDataManager" }], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "799de7dc-9394-571b-8e0d-3ff876a3df02" }, { "type": "execution", "name": "Data Standardize", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "799de7dc-9394-571b-8e0d-3ff876a3df02", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pre_processing_standardization_sklearn.py", "templateName": "pre_processing_standardization_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:pre_processing:standardization:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", "name": "pre_processing_standardization_sklearn.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "8dfc61c3-067d-5ea8-bd26-7296628d707a" }, { "type": "execution", "name": "Model Train and Predict", "head": false, "results": [{ "name": "workflow:pyml_predict" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "8dfc61c3-067d-5ea8-bd26-7296628d707a", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "model_mlp_sklearn.py", "templateName": "model_mlp_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "results": ["workflow:pyml_predict"], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:model:multilayer_perceptron:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "tags": ["remove-all-results", "creates-predictions-csv-during-predict-phase"], "status": "idle", "statusTrack": [], "input": [{ "content": "# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "name": "model_mlp_sklearn.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "1ca76a49-a3c7-5fa2-b693-538b599ecd7c" }, { "type": "execution", "name": "Parity Plot", "head": false, "results": [{ "basename": "my_parity_plot.png", "filetype": "image", "name": "file_content" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "1ca76a49-a3c7-5fa2-b693-538b599ecd7c", "preProcessors": [], "postProcessors": [{ "name": "remove_virtual_environment" }], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "post_processing_parity_plot_matplotlib.py", "templateName": "post_processing_parity_plot_matplotlib.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "results": ["file_content"], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:post_processing:parity_plot:matplotlib", "schemaVersion": "2022.8.16", "isDefault": false }, "tags": ["remove-all-results"], "status": "idle", "statusTrack": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "name": "post_processing_parity_plot_matplotlib.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }] }] }, "python/ml/train_head.json": { "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", "name": "Set Up the Job", "application": { "name": "python" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "name": "Set Workflow Mode", "type": "assignment", "operand": "IS_WORKFLOW_RUNNING_TO_PREDICT", "value": "False", "input": [], "flowchartId": "head-set-predict-status", "tags": ["pyml:workflow-type-setter"], "status": "idle", "statusTrack": [], "head": true, "next": "head-fetch-training-data", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Fetch Dataset", "type": "io", "subtype": "input", "enableRender": true, "flowchartId": "head-fetch-training-data", "input": [{ "basename": "{{DATASET_BASENAME}}", "objectData": { "CONTAINER": "", "NAME": "{{DATASET_FILEPATH}}", "PROVIDER": "", "REGION": "" } }], "source": "object_storage", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "head-branch-on-predict-status", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Train or Predict?", "type": "condition", "input": [{ "name": "IS_WORKFLOW_RUNNING_TO_PREDICT", "scope": "global" }], "results": [], "preProcessors": [], "postProcessors": [], "then": "head-fetch-trained-model", "else": "end-of-ml-train-head", "statement": "IS_WORKFLOW_RUNNING_TO_PREDICT", "maxOccurrences": 100, "flowchartId": "head-branch-on-predict-status", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "head-fetch-trained-model", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Fetch Trained Model as file", "type": "io", "subtype": "input", "enableRender": true, "flowchartId": "head-fetch-trained-model", "input": [{ "basename": "", "objectData": { "CONTAINER": "", "NAME": "", "PROVIDER": "", "REGION": "" } }], "source": "object_storage", "tags": ["set-io-unit-filenames"], "status": "idle", "statusTrack": [], "head": false, "next": "end-of-ml-train-head", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "End Setup", "type": "assignment", "operand": "IS_SETUP_COMPLETE", "value": "True", "input": [], "flowchartId": "end-of-ml-train-head", "status": "idle", "statusTrack": [], "tags": [], "head": false, "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }] }, "python/python_script.json": { "_id": "64a079ba-7a12-57b7-ac06-310b2bf8d354", "name": "Python Script", "application": { "name": "python" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "python", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "9b8a495e-1ac1-56a7-b2e0-af1b405a1219", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "script.py", "templateName": "hello_world.py" }, { "name": "requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "hello_world", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n", "name": "script.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n", "schemaVersion": "2022.8.16" }] }] }, "shell/batch_espresso_pwscf.json": { "_id": "f0775c7b-214a-5245-b921-5b4eb53d15a9", "name": "Shell Batch Job (Espresso PWSCF)", "application": { "name": "shell" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "shell", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "99304304-e873-5c89-ae83-91e61a7f629c", "preProcessors": [], "postProcessors": [], "application": { "name": "shell", "shortName": "sh", "summary": "Shell Script", "build": "GNU", "version": "5.1.8", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "job_espresso_pw_scf.sh" }], "monitors": ["standard_output"], "applicationName": "shell", "executableName": "sh", "name": "job_espresso_pw_scf", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n", "name": "job_espresso_pw_scf.sh", "contextProviders": [], "applicationName": "shell", "executableName": "sh", "rendered": "#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n", "schemaVersion": "2022.8.16" }] }] }, "shell/hello_world.json": { "_id": "ce33d4cf-e0d2-5020-854d-9ea1fe5c8512", "name": "Shell Hello World", "application": { "name": "shell" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "shell", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "99304304-e873-5c89-ae83-91e61a7f629c", "preProcessors": [], "postProcessors": [], "application": { "name": "shell", "shortName": "sh", "summary": "Shell Script", "build": "GNU", "version": "5.1.8", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "hello_world.sh" }], "monitors": ["standard_output"], "applicationName": "shell", "executableName": "sh", "name": "hello_world", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n", "name": "hello_world.sh", "contextProviders": [], "applicationName": "shell", "executableName": "sh", "rendered": "#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n", "schemaVersion": "2022.8.16" }] }] }, "vasp/band_gap.json": { "_id": "e65f2461-5f5c-5a51-8c48-88ad37bff100", "name": "Band Gap", "application": { "name": "vasp" }, "properties": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor", "band_gaps", "fermi_energy"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "paw", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "vasp", "head": true, "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9cb87769-bf20-56bf-a8b3-5a164e3bf541", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "INCAR" }, { "name": "KPOINTS" }, { "name": "POSCAR" }], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }], "next": "f0d65517-9592-5bc8-948e-a0851a766cbb" }, { "type": "execution", "name": "vasp_nscf", "head": false, "results": [{ "name": "band_gaps" }, { "name": "fermi_energy" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "f0d65517-9592-5bc8-948e-a0851a766cbb", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "INCAR", "templateName": "INCAR_BANDS" }, { "name": "KPOINTS", "templateName": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR" }], "results": ["band_gaps", "fermi_energy"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp_nscf", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }] }] }, "vasp/band_structure_dos.json": { "_id": "d38fea11-9781-5151-8dae-d705381498be", "name": "Band Structure + Density of States", "application": { "name": "vasp" }, "properties": ["density_of_states", "total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor", "band_structure"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "paw", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "vasp", "head": true, "results": [{ "name": "density_of_states" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9cb87769-bf20-56bf-a8b3-5a164e3bf541", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "INCAR" }, { "name": "KPOINTS" }, { "name": "POSCAR" }], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }], "next": "1e1de3be-f6e4-513e-afe2-c84e567a8108" }, { "type": "execution", "name": "vasp_bands", "head": false, "results": [{ "name": "band_structure" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "1e1de3be-f6e4-513e-afe2-c84e567a8108", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "INCAR", "templateName": "INCAR_BANDS" }, { "name": "KPOINTS", "templateName": "KPOINTS_BANDS" }, { "name": "POSCAR", "templateName": "" }], "results": ["band_structure"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp_bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", "schemaVersion": "2022.8.16" }, { "content": "kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }] }] }, "vasp/band_structure.json": { "_id": "cd6e3d59-5544-56ac-878b-fd8716a09768", "name": "Band Structure", "application": { "name": "vasp" }, "properties": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor", "band_structure"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "paw", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "vasp", "head": true, "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9cb87769-bf20-56bf-a8b3-5a164e3bf541", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "INCAR" }, { "name": "KPOINTS" }, { "name": "POSCAR" }], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }], "next": "1e1de3be-f6e4-513e-afe2-c84e567a8108" }, { "type": "execution", "name": "vasp_bands", "head": false, "results": [{ "name": "band_structure" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "1e1de3be-f6e4-513e-afe2-c84e567a8108", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "INCAR", "templateName": "INCAR_BANDS" }, { "name": "KPOINTS", "templateName": "KPOINTS_BANDS" }, { "name": "POSCAR", "templateName": "" }], "results": ["band_structure"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp_bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", "schemaVersion": "2022.8.16" }, { "content": "kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }] }] }, "vasp/dos.json": { "_id": "4897ca33-b023-5a8d-9a5d-9e74df0f00ad", "name": "Density of States", "application": { "name": "vasp" }, "properties": ["density_of_states", "total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "paw", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "vasp", "head": true, "results": [{ "name": "density_of_states" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9cb87769-bf20-56bf-a8b3-5a164e3bf541", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "INCAR" }, { "name": "KPOINTS" }, { "name": "POSCAR" }], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }] }] }, "vasp/fixed_cell_relaxation.json": { "_id": "db6cc94b-2f26-5688-ba97-80b11567b549", "name": "Fixed-cell Relaxation", "application": { "name": "vasp" }, "properties": ["total_energy", "atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_force", "final_structure"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "paw", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "vasp_relax", "head": true, "results": [{ "name": "total_energy" }, { "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_force" }, { "name": "final_structure" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }, { "name": "convergence_ionic" }], "flowchartId": "2f718a3d-5800-57e2-b707-075c1f1755c6", "preProcessors": [], "postProcessors": [{ "name": "prepare_restart" }], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "INCAR", "templateName": "INCAR_RELAX" }, { "name": "KPOINTS", "templateName": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR" }], "results": ["total_energy", "atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_force", "final_structure"], "monitors": ["standard_output", "convergence_electronic", "convergence_ionic"], "postProcessors": ["prepare_restart"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp_relax", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }] }] }, "vasp/initial_final_total_energies.json": { "isMultiMaterial": true, "_id": "792e8c42-86ce-5f01-812a-66378ec4f379", "name": "Initial/Final Total Energies", "application": { "name": "vasp" }, "properties": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor", "total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "paw", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "vasp_neb_initial", "head": true, "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "f969f010-9dae-5085-9ac5-86150ef78897", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "INCAR", "templateName": "INCAR_NEB_INITIAL_FINAL" }, { "name": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR_NEB_INITIAL" }], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp_neb_initial", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISTART = 0\nENCUT = 500\nISPIN = 2\n", "name": "INCAR", "contextProviders": [{ "name": "NEBFormDataManager" }, { "name": "VASPNEBInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISTART = 0\nENCUT = 500\nISPIN = 2\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.FIRST_IMAGE }}\n", "name": "POSCAR", "contextProviders": [{ "name": "NEBFormDataManager" }, { "name": "VASPNEBInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }], "next": "e65a17ce-10c8-5710-ad4d-fb3d42434091" }, { "type": "execution", "name": "vasp_neb_final", "head": false, "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "e65a17ce-10c8-5710-ad4d-fb3d42434091", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "INCAR", "templateName": "INCAR_NEB_INITIAL_FINAL" }, { "name": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR_NEB_FINAL" }], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp_neb_final", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISTART = 0\nENCUT = 500\nISPIN = 2\n", "name": "INCAR", "contextProviders": [{ "name": "NEBFormDataManager" }, { "name": "VASPNEBInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISTART = 0\nENCUT = 500\nISPIN = 2\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.LAST_IMAGE }}\n", "name": "POSCAR", "contextProviders": [{ "name": "NEBFormDataManager" }, { "name": "VASPNEBInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }] }] }, "vasp/kpoint_convergence.json": { "_id": "5d736d84-d616-538f-a09b-81a32ac0777c", "name": "K-point Convergence", "application": { "name": "vasp" }, "properties": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "paw", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "name": "Init tolerance", "type": "assignment", "operand": "TOL", "value": 0.00001, "input": [], "flowchartId": "init-tolerance", "status": "idle", "statusTrack": [], "tags": [], "head": true, "next": "init-increment", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Init increment", "type": "assignment", "operand": "INC", "value": 1, "input": [], "flowchartId": "init-increment", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "init-result", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Init result", "type": "assignment", "operand": "PREV_RESULT", "value": 0, "input": [], "flowchartId": "init-result", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "init-parameter", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Init parameter", "type": "assignment", "operand": "PARAMETER", "value": 1, "input": [], "flowchartId": "init-parameter", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "vasp-kpoint-convergence", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "type": "execution", "name": "vasp_kpt_conv", "head": false, "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "vasp-kpoint-convergence", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "INCAR", "templateName": "INCAR" }, { "name": "KPOINTS", "templateName": "KPOINTS_CONV" }, { "name": "POSCAR", "templateName": "POSCAR" }], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp_kpt_conv", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic Mesh\n0\nGamma\n{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}\n0 0 0\n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }], "next": "store-result" }, { "name": "store result", "type": "assignment", "operand": "RESULT", "value": "total_energy", "input": [{ "name": "total_energy", "scope": "vasp-kpoint-convergence" }], "flowchartId": "store-result", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "check-convergence", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "check convergence", "type": "condition", "input": [], "results": [], "preProcessors": [], "postProcessors": [], "then": "convergence-is-reached", "else": "update-result", "statement": "abs((PREV_RESULT-RESULT)/RESULT) < TOL", "maxOccurrences": 50, "flowchartId": "check-convergence", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "update-result", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "update result", "type": "assignment", "operand": "PREV_RESULT", "value": "RESULT", "input": [{ "name": "RESULT", "scope": "global" }], "flowchartId": "update-result", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "increment-parameter", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "increment parameter", "type": "assignment", "operand": "PREV_RESULT", "value": "PARAMETER+INC", "input": [{ "name": "INC", "scope": "global" }, { "name": "PARAMETER", "scope": "global" }], "flowchartId": "increment-parameter", "next": "vasp-kpoint-convergence", "status": "idle", "statusTrack": [], "tags": [], "head": false, "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "exit", "type": "assignment", "operand": "PARAMETER", "value": "PARAMETER", "input": [{ "name": "PARAMETER", "scope": "global" }], "flowchartId": "convergence-is-reached", "status": "idle", "statusTrack": [], "tags": [], "head": false, "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }] }, "vasp/neb_subworkflow.json": { "isMultiMaterial": true, "_id": "e6215fb9-e60c-541b-b73e-b077d64b3a95", "name": "Nudged Elastic Band (NEB)", "application": { "name": "vasp" }, "properties": ["reaction_energy_barrier", "reaction_energy_profile"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "paw", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "vasp_neb", "head": true, "results": [{ "name": "reaction_energy_barrier" }, { "name": "reaction_energy_profile" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "9a1660ab-8067-5fad-9fb8-7c039f634636", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "INCAR", "templateName": "INCAR_NEB" }, { "name": "KPOINTS", "templateName": "KPOINTS" }], "results": ["reaction_energy_barrier", "reaction_energy_profile"], "monitors": ["standard_output"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp_neb", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISTART = 0\nIBRION = 1\nEDIFFG = -0.001\nENCUT = 500\nNELM = 100\nNSW = 100\nIMAGES = {{ input.INTERMEDIATE_IMAGES.length or neb.nImages }}\nSPRING = -5\nISPIN = 2\n", "name": "INCAR", "contextProviders": [{ "name": "NEBFormDataManager" }, { "name": "VASPNEBInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISTART = 0\nIBRION = 1\nEDIFFG = -0.001\nENCUT = 500\nNELM = 100\nNSW = 100\nIMAGES = 1\nSPRING = -5\nISPIN = 2\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", "schemaVersion": "2022.8.16" }] }] }, "vasp/prepare_images.json": { "isMultiMaterial": true, "_id": "c9b7ad2a-5207-5e41-9b66-28474a8921f8", "name": "Prepare Directories", "application": { "name": "vasp" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "prepare-neb-images", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "dc397ead-54ad-513b-992e-aedd54576409", "preProcessors": [], "postProcessors": [], "application": { "name": "shell", "shortName": "sh", "summary": "Shell Script", "build": "GNU", "version": "5.1.8", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "bash_vasp_prepare_neb_images.sh" }], "monitors": ["standard_output"], "applicationName": "shell", "executableName": "sh", "name": "bash_vasp_prepare_neb_images", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < 00/POSCAR < 01/POSCAR <=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema"}],"isDefault":false,"monitors":[],"name":"Set Average ESP Value","operand":"AVG_ESP","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},"espresso/average_electrostatic_potential_via_band_structure.json":{"_id":"09f5f4ff-7dbd-59ae-ad27-5af1bdfc2bd0","application":{"name":"espresso"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure + average ESP","properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"2d360607-c739-54ad-97a0-8a83f0971f2c","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Material Index","next":"9fc7a088-5533-5f70-bb33-f676ec65f565","operand":"MATERIAL_INDEX","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap"}],"isDefault":false,"monitors":[],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Set Valence Band Maximum","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","operand":"VBM","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average_potential","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential"}],"isDefault":false,"monitors":[],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},"espresso/band_gap.json":{"_id":"233bb8cf-3b4a-5378-84d9-a6a95a2ab43d","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Gap","properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16"},"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_gap_hse_dos.json":{"_id":"f1341a29-777d-5ca3-8933-78a5e0d3f6f2","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"hse06","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"hybrid","type":"dft"},"name":"HSE Band Gap","properties":["atomic_forces","band_gaps","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_hse.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_hse","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"f494cdb2-304f-5da2-b979-ce3fbba3a6c4","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = {% if kgrid.dimensions[0]%2 == 0 %}{{kgrid.dimensions[0]/2}}{% else %}{{(kgrid.dimensions[0]+1)/2}}{% endif %}, nqx2 = {% if kgrid.dimensions[1]%2 == 0 %}{{kgrid.dimensions[1]/2}}{% else %}{{(kgrid.dimensions[1]+1)/2}}{% endif %}, nqx3 = {% if kgrid.dimensions[2]%2 == 0 %}{{kgrid.dimensions[2]/2}}{% else %}{{(kgrid.dimensions[2]+1)/2}}{% endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{% if d%2 == 0 %}{{d}} {% else %}{{d+1}} {% endif %}{% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_hse.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_hse","next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"schemaVersion":"2022.8.16"},"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure.json":{"_id":"26d32e68-c2b5-50e9-8933-15f684fcc039","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"d618df45-5af3-5da5-8882-d74a27e00b04","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure_dos.json":{"_id":"fa594399-6b98-5d79-986c-0713601dc06c","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure + Density of States","properties":["atomic_forces","band_gaps","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"d618df45-5af3-5da5-8882-d74a27e00b04","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16"},"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"schemaVersion":"2022.8.16"},"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure_hse.json":{"_id":"ef3089f3-7460-56f2-9aa2-172d5339d3be","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"hse06","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"hybrid","type":"dft"},"name":"Band Structure - HSE","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_bands_hse.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_bands_hse","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"08bd7e4a-2454-53b7-8cc9-9a95975f7e6f","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n {% for d in qgrid.dimensions -%}\n nqx{{loop.index}} = {{d}}\n {% endfor %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal\n{{ '{{' }} {{ explicitKPath.length }} {% raw %} + KPOINTS|length {% endraw %} {{ '}}' }}\n{% raw %}\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n{% endraw %}\n{% for point in explicitKPath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}0.0000001\n{% endfor %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPathFormDataManager"}],"executableName":"pw.x","name":"pw_scf_bands_hse.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_bands_hse","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure_magn.json":{"_id":"4a7dced1-224e-57d7-a616-cbad99062c7b","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Spin magnetic bandstructure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_magn.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_magn","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"c229d2a0-3c19-5f13-b3e0-ceb86cb9fbc1","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_magn.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_magn","next":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_magn.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands_magn","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_magn.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands_magn","next":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_up.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands_spin_up","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_up.dat'{% endraw %}\n spin_component = 1\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_up.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands_spin_up","next":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_dn.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands_spin_dn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_dn.dat'{% endraw %}\n spin_component = 2\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_dn.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands_spin_dn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure_soc.json":{"_id":"51e6fb82-538a-58ee-8d4e-991c8446f657","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{"searchText":"nc-fr"},"subtype":"nc-fr","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Spin orbit coupling bandstructure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_soc.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_soc","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"74ec024a-f247-5f15-9c21-cc169bcb62c7","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_soc.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_soc","next":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_soc.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands_soc","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_soc.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands_soc","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/dielectric_tensor.json":{"_id":"38340b52-83ad-5862-bc18-c140bdc0cb72","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"nc","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Compute Dielectric Function","properties":["atomic_forces","band_gaps","dielectric_tensor","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"3b230ec3-0791-52f7-a4db-625390b8718f","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"3b230ec3-0791-52f7-a4db-625390b8718f","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Set No-Symmetry Flag","next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","operand":"NO_SYMMETRY_NO_INVERSION","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":true},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16"},"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","next":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"epsilon.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"epsilon.x","input":[{"name":"epsilon.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"dielectric_tensor","postProcessors":[],"preProcessors":[],"results":[{"name":"dielectric_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n","contextProviders":[],"executableName":"epsilon.x","name":"epsilon.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Compute dielectric function","postProcessors":[],"preProcessors":[],"results":[{"name":"dielectric_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/dos.json":{"_id":"2cf317f3-3306-5a96-bc9b-e9103ebcd5be","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Density of States","properties":["atomic_forces","band_gaps","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16"},"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"schemaVersion":"2022.8.16"},"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/electronic_density_mesh.json":{"_id":"e2749c5a-fcd9-589c-819b-8b88c5c90924","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Electronic Density Mesh","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_density.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_density","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_density.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_density","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/esm.json":{"_id":"0de669f6-a455-5dae-b331-19dc85f7090f","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Effective Screening Medium (ESM)","properties":["atomic_forces","charge_density_profile","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_esm","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"2f487bc6-c237-53e4-bad5-be60369662cb","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_esm","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/esm_relax.json":{"_id":"69728792-afeb-50aa-9b4e-6974a90f676a","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Effective Screening Medium (ESM) Relax","properties":["atomic_forces","charge_density_profile","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm_relax.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_esm_relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"a2bec506-1fdd-5125-a787-85f31cde20c1","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm_relax.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_esm_relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/espresso_extract_kpoints.json":{"_id":"a2785cc5-2427-5c7a-b30f-7077475b948c","application":{"name":"espresso"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Extract KPOINTS","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"espresso_extract_kpoints.py"},{"name":"requirements.txt","templateName":"requirements_empty.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"espresso_extract_kpoints","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"a716b133-2d04-50b5-b497-100265e3fa24","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_extract_kpoints.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Extract kpoints","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/espresso_xml_get_qpt_irr.json":{"_id":"e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a","application":{"name":"espresso"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"espresso-xml-get-qpt-irr","properties":[],"schemaVersion":"2022.8.16","units":[]},"espresso/fixed_cell_relaxation.json":{"_id":"fb75e249-5489-5146-bd8a-786d33330d9c","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Fixed-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_relax.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"c42871f6-ab79-5987-b228-c3bd80f16ffd","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_relax.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/gw_band_structure_band_gap_full_frequency.json":{"_id":"46bcdcc8-628e-518e-b8c3-9bf38d7a2aef","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{"searchText":".*dojo-oncv.*"},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Full Frequency GW Band Structure + Band Gap","properties":["atomic_forces","band_gaps","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"gw.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_full_frequency.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"gw_bands_full_frequency","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16"},"flowchartId":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_full_frequency.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"gw_bands_full_frequency","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/gw_band_structure_band_gap_plasmon_pole.json":{"_id":"72b79a87-8eef-5fe2-9d6c-6c9c256dd56c","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{"searchText":".*dojo-oncv.*"},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Plasmon-Pole GW Band Structure + Band Gap","properties":["atomic_forces","band_gaps","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"gw.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_plasmon_pole.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"gw_bands_plasmon_pole","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16"},"flowchartId":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_plasmon_pole.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"gw_bands_plasmon_pole","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/kpoint_convergence.json":{"_id":"ff6a8fbc-2202-5786-9a26-67c843417d0b","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"K-point Convergence","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"init-tolerance","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Init tolerance","next":"init-increment","operand":"TOL","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0.00001},{"flowchartId":"init-increment","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init increment","next":"init-result","operand":"INC","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"flowchartId":"init-result","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init result","next":"init-parameter","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0},{"flowchartId":"init-parameter","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init parameter","next":"pwscf-kpoint-convergence","operand":"PARAMETER","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_kpt_conv.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_kpt_conv","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"pwscf-kpoint-convergence","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0{% endraw %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_kpt_conv.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_kpt_conv","next":"store-result","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"store-result","head":false,"input":[{"name":"total_energy","scope":"pwscf-kpoint-convergence"}],"isDefault":false,"monitors":[],"name":"store result","next":"check-convergence","operand":"RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"else":"update-result","flowchartId":"check-convergence","head":false,"input":[],"isDefault":false,"maxOccurrences":50,"monitors":[],"name":"check convergence","next":"update-result","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","status":"idle","statusTrack":[],"tags":[],"then":"convergence-is-reached","type":"condition"},{"flowchartId":"update-result","head":false,"input":[{"name":"RESULT","scope":"global"}],"isDefault":false,"monitors":[],"name":"update result","next":"increment-parameter","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"RESULT"},{"flowchartId":"increment-parameter","head":false,"input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"isDefault":false,"monitors":[],"name":"increment parameter","next":"pwscf-kpoint-convergence","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER+INC"},{"flowchartId":"convergence-is-reached","head":false,"input":[{"name":"PARAMETER","scope":"global"}],"isDefault":false,"monitors":[],"name":"exit","operand":"PARAMETER","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER"}]},"espresso/neb.json":{"_id":"c9034468-df28-5357-8912-02226f919042","application":{"name":"espresso"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Nudged Elastic Band (NEB)","properties":["reaction_energy_barrier","reaction_energy_profile"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"neb.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"neb.x","input":[{"name":"neb.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"neb","postProcessors":[],"preProcessors":[],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"9f273ca0-d240-5b1f-89a9-64dd579304ac","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = {{ 2 + (input.INTERMEDIATE_IMAGES.length or neb.nImages) }},\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_first = false %}\n{%- for position in input.FIRST_IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_first = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.FIRST_IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_first %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n{%- for IMAGE in input.INTERMEDIATE_IMAGES %}\nINTERMEDIATE_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_intermediate = false %}\n{%- for position in IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_intermediate = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_intermediate %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n{%- endfor %}\nLAST_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_last = false %}\n{%- for position in input.LAST_IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_last = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.LAST_IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_last %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nEND_POSITIONS\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nEND_ENGINE_INPUT\nEND\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"NEBFormDataManager"},{"name":"QENEBInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"neb.x","name":"neb.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"neb","postProcessors":[],"preProcessors":[],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/ph_init_qpoints.json":{"_id":"2f017bcb-f4ba-55b8-b939-1f780679a88e","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"ph-init-qpoints","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_init_qpoints.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_init_qpoints","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"b8ea6a33-38f3-5434-b17e-b5eae8fff9fc","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_init_qpoints.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_init_qpoints","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/ph_single_irr_qpt.json":{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"ph-single-irr-qpt","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_single_irr_qpt.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_single_irr_qpt","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"8db9af08-d935-57a0-a824-e7db6d936de8","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_single_irr_qpt.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_single_irr_qpt","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/phonon_dispersions.json":{"_id":"bfb69b48-8fbf-5a0d-8949-448f20754766","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Phonon Dispersions","properties":["atomic_forces","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"13bcafce-56ef-5b47-b079-317495eb6933","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16"},"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","next":"a7fded20-889b-54fc-bbb0-456e82689ab1","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"schemaVersion":"2022.8.16"},"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/phonon_dos.json":{"_id":"2232051b-9f2a-5a48-9b4d-6231eb6e8297","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Phonon Density of States","properties":["atomic_forces","fermi_energy","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"13bcafce-56ef-5b47-b079-317495eb6933","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16"},"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","next":"8fe6a24b-c994-55a2-a448-88657292e8c2","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16"},"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/phonon_dos_dispersion.json":{"_id":"291d25cd-378a-5be7-9d85-c8013a4b165b","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Phonon Density of States + Dispersions","properties":["atomic_forces","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"13bcafce-56ef-5b47-b079-317495eb6933","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16"},"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","next":"8fe6a24b-c994-55a2-a448-88657292e8c2","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16"},"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","next":"a7fded20-889b-54fc-bbb0-456e82689ab1","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"schemaVersion":"2022.8.16"},"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/phonon_reduce.json":{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"reduce","properties":["phonon_dispersions","phonon_dos"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid_restart.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid_restart","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb206177-a4af-599a-81ba-6c88d24253b6","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid_restart.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid_restart","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","next":"8fe6a24b-c994-55a2-a448-88657292e8c2","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16"},"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","next":"a7fded20-889b-54fc-bbb0-456e82689ab1","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"schemaVersion":"2022.8.16"},"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/plot_wavefunction.json":{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","application":{"name":"espresso"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Plot Wavefunction","properties":["file_content"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"plot_wavefunction","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"57fca898-8e8b-5ef2-81a5-9d2b612bc18d","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"plot WFN","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/post_processor.json":{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","application":{"name":"espresso"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"post-processor","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_collect_dynmat.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"espresso_collect_dynmat","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_collect_dynmat.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/pre_processor.json":{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","application":{"name":"espresso"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"pre-processor","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_link_outdir_save.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"espresso_link_outdir_save","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_link_outdir_save.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/pw_scf.json":{"_id":"f52b8039-83d0-5485-a1f1-0bc37cb01ed3","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"pw-scf","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/recalculate_bands.json":{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Recalculate Bands","properties":["band_structure"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/surface_energy.json":{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Surface Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/total_energy.json":{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Total Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","tags":["default"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/valence_band_offset_calc_from_previous_esp_vbm.json":{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","application":{"name":"espresso"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Calculate VBO","properties":["valence_band_offset"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Difference of valence band maxima","next":"2626f7bb-d392-5fd4-ab71-329b508de347","operand":"VBM_DIFF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"VBM_LEFT - VBM_RIGHT"},{"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Difference of macroscopically averaged ESP in bulk","next":"b7307787-53e2-599b-ad12-d627b04074b4","operand":"AVG_ESP_DIFF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]"},{"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Lineup of macroscopically averaged ESP in interface","next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","operand":"ESP_LINEUP","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])"},{"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Valence Band Offset","operand":"VALENCE_BAND_OFFSET","postProcessors":[],"preProcessors":[],"results":[{"name":"valence_band_offset"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))"}]},"espresso/variable_cell_relaxation.json":{"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Variable-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","systemName":"espresso-variable-cell-relaxation","tags":["variable-cell_relaxation"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/wavefunction_amplitude.json":{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Wavefunction Amplitude","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"schemaVersion":"2022.8.16","tags":["wfn","wfn_plot"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-scf","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"extract-band-energies","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"band_structure"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"extract-band-energies","head":false,"input":[{"name":"band_structure","scope":"pw-scf"}],"isDefault":false,"monitors":[],"name":"Extract Band Energies","next":"indices-below-fermi","operand":"band_energies","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]"},{"flowchartId":"indices-below-fermi","head":false,"input":[{"name":"fermi_energy","scope":"pw-scf"}],"isDefault":false,"monitors":[],"name":"Find Indices Below Fermi","next":"8771dc7f-878e-5f13-a840-a3a416854f1e","operand":"indices_below_fermi","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]"},{"flowchartId":"8771dc7f-878e-5f13-a840-a3a416854f1e","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Store Band Below EF","next":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","operand":"KBAND_VALUE_BELOW_EF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1"},{"flowchartId":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Select Band","next":"pp-wfn","operand":"KBAND_VALUE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"KBAND_VALUE_BELOW_EF"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_wfn","postProcessors":[],"preProcessors":[],"results":[{"name":"wavefunction_amplitude"}],"schemaVersion":"2022.8.16"},"flowchartId":"pp-wfn","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_wfn.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_wfn","postProcessors":[],"preProcessors":[],"results":[{"name":"wavefunction_amplitude"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/zero_point_energy.json":{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Zero Point Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"107595d1-490f-53a2-8432-7f8a12f14d96","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_gamma","postProcessors":[],"preProcessors":[],"results":[{"name":"zero_point_energy"}],"schemaVersion":"2022.8.16"},"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_zpe","postProcessors":[],"preProcessors":[],"results":[{"name":"zero_point_energy"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"nwchem/total_energy.json":{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","application":{"name":"nwchem"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"pople","type":"localorbital"},"subtype":"gga","type":"dft"},"name":"Total Energy","properties":["total_energy","total_energy_contributions"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"nwchem","schemaVersion":"2022.8.16","shortName":"nwchem","summary":"NWChem","version":"7.0.2"},"context":[],"executable":{"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem","postProcessors":[{"name":"error_handler"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"schemaVersion":"2022.8.16"},"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"python/ml/classification_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"name":"python"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:random_forest_classification:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:roc_curve:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ROC Curve Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]},"python/ml/clustering_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"name":"python"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_k_means_clustering_sklearn.py","templateName":"model_k_means_clustering_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:k_means_clustering:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_k_means_clustering_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"9c95c27b-c8bd-5e8b-8829-d354611decef","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_pca_2d_clusters_matplotlib.py","templateName":"post_processing_pca_2d_clusters_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:pca_2d_clusters:matplotlib","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"9c95c27b-c8bd-5e8b-8829-d354611decef","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_pca_2d_clusters_matplotlib.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"2D PCA Clusters Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"},{"name":"file_content"},{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]},"python/ml/regression_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"name":"python"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:multilayer_perceptron:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:parity_plot:matplotlib","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Parity Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]},"python/ml/train_head.json":{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"name":"python"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"schemaVersion":"2022.8.16","units":[{"flowchartId":"head-set-predict-status","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Dataset","next":"head-branch-on-predict-status","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"isDefault":false,"maxOccurrences":100,"monitors":[],"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"flowchartId":"end-of-ml-train-head","head":false,"input":[],"isDefault":false,"monitors":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},"python/python_script.json":{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","application":{"name":"python"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Python Script","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"shell/batch_espresso_pwscf.json":{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","application":{"name":"shell"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Batch Job (Espresso PWSCF)","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"job_espresso_pw_scf","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"shell/hello_world.json":{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","application":{"name":"shell"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Hello World","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/band_gap.json":{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","application":{"name":"vasp"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Gap","properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"f0d65517-9592-5bc8-948e-a0851a766cbb","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"schemaVersion":"2022.8.16"},"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/band_structure.json":{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","application":{"name":"vasp"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/band_structure_dos.json":{"_id":"d38fea11-9781-5151-8dae-d705381498be","application":{"name":"vasp"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure + Density of States","properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/dos.json":{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","application":{"name":"vasp"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Density of States","properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/fixed_cell_relaxation.json":{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","application":{"name":"vasp"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Fixed-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","postProcessors":[{"name":"prepare_restart"}],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","postProcessors":[{"name":"prepare_restart"}],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/initial_final_total_energies.json":{"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","application":{"name":"vasp"},"compute":{"arguments":{"nband":1,"ndiag":1,"nimage":1,"npools":1,"ntg":1},"cluster":{"fqdn":""},"isRestartable":true,"nodes":1,"notify":"n","ppn":1,"queue":"D","timeLimit":"01:00:00","timeLimitType":"per single attempt"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Initial/Final Total Energies","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","next":"e65a17ce-10c8-5710-ad4d-fb3d42434091","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/kpoint_convergence.json":{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","application":{"name":"vasp"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"K-point Convergence","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"init-tolerance","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Init tolerance","next":"init-increment","operand":"TOL","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0.00001},{"flowchartId":"init-increment","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init increment","next":"init-result","operand":"INC","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"flowchartId":"init-result","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init result","next":"init-parameter","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0},{"flowchartId":"init-parameter","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init parameter","next":"vasp-kpoint-convergence","operand":"PARAMETER","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"vasp-kpoint-convergence","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","next":"store-result","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"store-result","head":false,"input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"isDefault":false,"monitors":[],"name":"store result","next":"check-convergence","operand":"RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"else":"update-result","flowchartId":"check-convergence","head":false,"input":[],"isDefault":false,"maxOccurrences":50,"monitors":[],"name":"check convergence","next":"update-result","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","status":"idle","statusTrack":[],"tags":[],"then":"convergence-is-reached","type":"condition"},{"flowchartId":"update-result","head":false,"input":[{"name":"RESULT","scope":"global"}],"isDefault":false,"monitors":[],"name":"update result","next":"increment-parameter","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"RESULT"},{"flowchartId":"increment-parameter","head":false,"input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"isDefault":false,"monitors":[],"name":"increment parameter","next":"vasp-kpoint-convergence","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER+INC"},{"flowchartId":"convergence-is-reached","head":false,"input":[{"name":"PARAMETER","scope":"global"}],"isDefault":false,"monitors":[],"name":"exit","operand":"PARAMETER","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER"}]},"vasp/neb_subworkflow.json":{"_id":"e6215fb9-e60c-541b-b73e-b077d64b3a95","application":{"name":"vasp"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Nudged Elastic Band (NEB)","properties":["reaction_energy_barrier","reaction_energy_profile"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB"},{"name":"KPOINTS","templateName":"KPOINTS"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"vasp_neb","postProcessors":[],"preProcessors":[],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"9a1660ab-8067-5fad-9fb8-7c039f634636","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISTART = 0\nIBRION = 1\nEDIFFG = -0.001\nENCUT = 500\nNELM = 100\nNSW = 100\nIMAGES = {{ input.INTERMEDIATE_IMAGES.length or neb.nImages }}\nSPRING = -5\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"vasp_neb","postProcessors":[],"preProcessors":[],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/prepare_images.json":{"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","application":{"name":"vasp"},"isDraft":false,"isMultiMaterial":true,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Prepare Directories","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bash_vasp_prepare_neb_images","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n", "name": "espresso_xml_get_qpt_irr.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n\n\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n", "schemaVersion": "2022.8.16" }] }, { "name": "assignment", "type": "assignment", "operand": "Q_POINTS", "value": "json.loads(STDOUT)", "input": [{ "scope": "9b8a495e-1ac1-56a7-b2e0-af1b405a1219", "name": "STDOUT" }], "status": "idle", "statusTrack": [], "flowchartId": "d0fd8654-2106-546b-8792-7bb46272befc", "tags": [], "head": false, "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }] }, { "_id": "545a66e2-dfbe-513e-acaf-d79d0d139b9c", "name": "reduce", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "properties": ["phonon_dos", "phonon_dispersions"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "ph_grid_restart", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "cb206177-a4af-599a-81ba-6c88d24253b6", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "ph_grid_restart.in" }], "results": [], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "ph.x", "name": "ph_grid_restart", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", "name": "ph_grid_restart.in", "contextProviders": [{ "name": "QGridFormDataManager" }], "applicationName": "espresso", "executableName": "ph.x", "rendered": "&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n", "schemaVersion": "2022.8.16" }], "next": "3b4507a7-9244-540b-abe0-66bceab700f5" }, { "type": "execution", "name": "q2r", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "3b4507a7-9244-540b-abe0-66bceab700f5", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "q2r.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "q2r.in" }], "results": [], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "q2r.x", "name": "q2r", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", "name": "q2r.in", "contextProviders": [], "applicationName": "espresso", "executableName": "q2r.x", "rendered": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", "schemaVersion": "2022.8.16" }], "next": "8fe6a24b-c994-55a2-a448-88657292e8c2" }, { "type": "execution", "name": "matdyn_grid", "head": false, "results": [{ "name": "phonon_dos" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "8fe6a24b-c994-55a2-a448-88657292e8c2", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "matdyn.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "matdyn_grid.in" }], "monitors": ["standard_output"], "results": ["phonon_dos"], "applicationName": "espresso", "executableName": "matdyn.x", "name": "matdyn_grid", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n", "name": "matdyn_grid.in", "contextProviders": [{ "name": "IGridFormDataManager" }], "applicationName": "espresso", "executableName": "matdyn.x", "rendered": "&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n", "schemaVersion": "2022.8.16" }], "next": "a7fded20-889b-54fc-bbb0-456e82689ab1" }, { "type": "execution", "name": "matdyn_path", "head": false, "results": [{ "name": "phonon_dispersions" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "a7fded20-889b-54fc-bbb0-456e82689ab1", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "matdyn.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "matdyn_path.in" }], "monitors": ["standard_output"], "results": ["phonon_dispersions"], "applicationName": "espresso", "executableName": "matdyn.x", "name": "matdyn_path", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "matdyn_path.in", "contextProviders": [{ "name": "IPathFormDataManager" }], "applicationName": "espresso", "executableName": "matdyn.x", "rendered": "&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "Preliminary SCF Calculation", "type": "subworkflow", "_id": "79f2cb6a-7994-5369-8c85-af07c55ad26f", "status": "idle", "statusTrack": [], "flowchartId": "b6a2b27a-0fec-5e0e-8974-073ee9d2ad83", "tags": [], "head": true, "next": "4bb74dfb-46a6-5bf4-a477-5d374dc2e271" }, { "name": "ph-init-qpoints", "type": "subworkflow", "_id": "2f017bcb-f4ba-55b8-b939-1f780679a88e", "status": "idle", "statusTrack": [], "flowchartId": "4bb74dfb-46a6-5bf4-a477-5d374dc2e271", "tags": [], "head": false, "next": "9894b91f-6e97-5ee6-af02-0bef26bd62c0" }, { "name": "espresso-xml-get-qpt-irr", "type": "subworkflow", "_id": "e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a", "status": "idle", "statusTrack": [], "flowchartId": "9894b91f-6e97-5ee6-af02-0bef26bd62c0", "tags": [], "head": false, "next": "24e3c1f0-8090-512e-9727-8770071d17c8" }, { "name": "map", "type": "map", "workflowId": "731d3397-3278-516a-b28e-53626ef50f0a", "input": { "target": "MAP_DATA", "scope": "global", "name": "Q_POINTS", "values": [], "useValues": false }, "status": "idle", "statusTrack": [], "flowchartId": "24e3c1f0-8090-512e-9727-8770071d17c8", "tags": [], "head": false, "next": "55a9e9fb-3545-5c4b-a1bb-b64a899b78c6" }, { "name": "reduce", "type": "subworkflow", "_id": "545a66e2-dfbe-513e-acaf-d79d0d139b9c", "status": "idle", "statusTrack": [], "flowchartId": "55a9e9fb-3545-5c4b-a1bb-b64a899b78c6", "tags": [], "head": false }], "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "_id": "23b9058b-884c-52d4-82a8-ee162b9761e0", "workflows": [{ "name": "pre-processor", "subworkflows": [{ "_id": "03f3a8a3-1fd0-5007-925f-fba78be63a51", "name": "pre-processor", "application": { "name": "shell", "shortName": "sh", "summary": "Shell Script", "build": "GNU", "version": "5.1.8", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "shell", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "99304304-e873-5c89-ae83-91e61a7f629c", "preProcessors": [], "postProcessors": [], "application": { "name": "shell", "shortName": "sh", "summary": "Shell Script", "build": "GNU", "version": "5.1.8", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "espresso_link_outdir_save.sh" }], "monitors": ["standard_output"], "applicationName": "shell", "executableName": "sh", "name": "espresso_link_outdir_save", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n", "name": "espresso_link_outdir_save.sh", "contextProviders": [], "applicationName": "shell", "executableName": "sh", "rendered": "\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n\n", "schemaVersion": "2022.8.16" }] }] }, { "_id": "e68db280-8636-53e3-81a0-88396ba6147d", "name": "ph-single-irr-qpt", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "properties": [], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "ph_single_irr_qpt", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "8db9af08-d935-57a0-a824-e7db6d936de8", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "ph_single_irr_qpt.in" }], "results": [], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "ph.x", "name": "ph_single_irr_qpt", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", "name": "ph_single_irr_qpt.in", "contextProviders": [{ "name": "QGridFormDataManager" }], "applicationName": "espresso", "executableName": "ph.x", "rendered": "&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n \n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n \n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = '{{ JOB_SCRATCH_DIR }}/outdir'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n", "schemaVersion": "2022.8.16" }] }] }, { "_id": "7239fc3a-b343-513f-af35-e8687e1829da", "name": "post-processor", "application": { "name": "shell", "shortName": "sh", "summary": "Shell Script", "build": "GNU", "version": "5.1.8", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "shell", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "99304304-e873-5c89-ae83-91e61a7f629c", "preProcessors": [], "postProcessors": [], "application": { "name": "shell", "shortName": "sh", "summary": "Shell Script", "build": "GNU", "version": "5.1.8", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "espresso_collect_dynmat.sh" }], "monitors": ["standard_output"], "applicationName": "shell", "executableName": "sh", "name": "espresso_collect_dynmat", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n", "name": "espresso_collect_dynmat.sh", "contextProviders": [], "applicationName": "shell", "executableName": "sh", "rendered": "\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n\n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "pre-processor", "type": "subworkflow", "_id": "03f3a8a3-1fd0-5007-925f-fba78be63a51", "status": "idle", "statusTrack": [], "flowchartId": "e9a790f4-dec6-52c1-b951-014f0ff01cb4", "tags": [], "head": true, "next": "c2195045-7a5c-54d3-ab88-211c82de09f1" }, { "name": "ph-single-irr-qpt", "type": "subworkflow", "_id": "e68db280-8636-53e3-81a0-88396ba6147d", "status": "idle", "statusTrack": [], "flowchartId": "c2195045-7a5c-54d3-ab88-211c82de09f1", "tags": [], "head": false, "next": "e483c7fb-2a29-5e91-819a-7465ead70134" }, { "name": "post-processor", "type": "subworkflow", "_id": "7239fc3a-b343-513f-af35-e8687e1829da", "status": "idle", "statusTrack": [], "flowchartId": "e483c7fb-2a29-5e91-819a-7465ead70134", "tags": [], "head": false }], "properties": [], "_id": "731d3397-3278-516a-b28e-53626ef50f0a", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, "compute": { "ppn": 1, "nodes": 1, "queue": "D", "timeLimit": "01:00:00", "notify": "n", "cluster": { "fqdn": "" } } }], "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "espresso" } }, "espresso/recalculate_bands.json": { "name": "Recalculate Bands", "subworkflows": [{ "_id": "64551dfb-e529-5d8d-9092-ff268f4da134", "name": "Recalculate Bands", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "properties": ["band_structure"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_bands", "head": true, "results": [{ "name": "band_structure" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "d618df45-5af3-5da5-8882-d74a27e00b04", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_bands.in" }], "results": ["band_structure"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "pw_bands.in", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }], "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2" }, { "type": "execution", "name": "bands", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "bands.in" }], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "bands.x", "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", "name": "bands.in", "contextProviders": [], "applicationName": "espresso", "executableName": "bands.x", "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "Recalculate Bands", "type": "subworkflow", "_id": "64551dfb-e529-5d8d-9092-ff268f4da134", "status": "idle", "statusTrack": [], "flowchartId": "e8b72a45-765e-565f-ab17-c91a21aec09d", "tags": [], "head": true }], "properties": ["band_structure"], "_id": "42b2b964-8ccc-5b36-9e33-41a954abc2ba", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "espresso" } }, "espresso/surface_energy.json": { "name": "Surface Energy", "subworkflows": [{ "_id": "3e05a2b5-4171-54a2-9d2d-9e46118a56bf", "name": "Surface Energy", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "name": "io-slab", "type": "io", "subtype": "input", "head": true, "results": [], "monitors": [], "flowchartId": "e463ef46-a36e-5168-87dd-e21eb980dfb8", "preProcessors": [], "postProcessors": [], "source": "api", "input": [{ "endpoint": "materials", "endpoint_options": { "params": { "query": "{'_id': MATERIAL_ID}", "projection": "{}" } }, "name": "DATA" }], "next": "ee7abb4e-7848-5aeb-960d-0d441909e2d1", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "slab", "type": "assignment", "operand": "SLAB", "value": "DATA[0]", "input": [{ "name": "DATA", "scope": "e463ef46-a36e-5168-87dd-e21eb980dfb8" }], "head": false, "results": [], "monitors": [], "flowchartId": "ee7abb4e-7848-5aeb-960d-0d441909e2d1", "preProcessors": [], "postProcessors": [], "next": "44263820-0c80-5bd1-b854-9da8d198eac1", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "io-bulk", "type": "io", "subtype": "input", "head": false, "results": [], "monitors": [], "flowchartId": "44263820-0c80-5bd1-b854-9da8d198eac1", "preProcessors": [], "postProcessors": [], "source": "api", "input": [{ "endpoint": "materials", "endpoint_options": { "params": { "query": "{'_id': SLAB.metadata.bulkId}", "projection": "{}" } }, "name": "DATA" }], "next": "b70656f1-a394-57f4-b4de-00096969df4b", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "bulk", "type": "assignment", "operand": "BULK", "value": "DATA[0] if DATA else None", "input": [{ "name": "DATA", "scope": "44263820-0c80-5bd1-b854-9da8d198eac1" }], "head": false, "results": [], "monitors": [], "flowchartId": "b70656f1-a394-57f4-b4de-00096969df4b", "preProcessors": [], "postProcessors": [], "next": "6ca4006a-e3ae-56ea-91a1-06b9790b5f7e", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "assert-bulk", "type": "assertion", "statement": "BULK != None", "errorMessage": "Bulk material does not exist!", "head": false, "results": [], "monitors": [], "flowchartId": "6ca4006a-e3ae-56ea-91a1-06b9790b5f7e", "preProcessors": [], "postProcessors": [], "next": "490635e0-c593-5809-9eb2-c794b96cfed1", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "io-e-bulk", "type": "io", "subtype": "input", "head": false, "results": [], "monitors": [], "flowchartId": "490635e0-c593-5809-9eb2-c794b96cfed1", "preProcessors": [], "postProcessors": [], "source": "api", "input": [{ "endpoint": "refined-properties", "endpoint_options": { "params": { "query": "{ 'exabyteId': BULK.exabyteId, 'data.name': 'total_energy', 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} }", "projection": "{'sort': {'precision.value': -1}, 'limit': 1}" } }, "name": "DATA" }], "next": "bbe13b97-4243-5a85-8f61-a279d0b797aa", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "e-bulk", "type": "assignment", "operand": "E_BULK", "value": "DATA[0].data.value if DATA else None", "input": [{ "name": "DATA", "scope": "490635e0-c593-5809-9eb2-c794b96cfed1" }], "head": false, "results": [], "monitors": [], "flowchartId": "bbe13b97-4243-5a85-8f61-a279d0b797aa", "preProcessors": [], "postProcessors": [], "next": "a06c9f43-7670-5fd0-ac42-7028a472235a", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "assert-e-bulk", "type": "assertion", "statement": "E_BULK != None", "errorMessage": "E_BULK does not exist!", "head": false, "results": [], "monitors": [], "flowchartId": "a06c9f43-7670-5fd0-ac42-7028a472235a", "preProcessors": [], "postProcessors": [], "next": "cdf210be-26ed-585a-b4ac-d55795ba2975", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "surface", "type": "assignment", "operand": "A", "value": "np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))", "input": [], "head": false, "results": [], "monitors": [], "flowchartId": "cdf210be-26ed-585a-b4ac-d55795ba2975", "preProcessors": [], "postProcessors": [], "next": "ffa8e43d-096a-555b-b8d0-6d283365ef47", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "n-bulk", "type": "assignment", "operand": "N_BULK", "value": "len(BULK.basis.elements)", "input": [], "head": false, "results": [], "monitors": [], "flowchartId": "ffa8e43d-096a-555b-b8d0-6d283365ef47", "preProcessors": [], "postProcessors": [], "next": "a0336ec5-a6da-5e4c-bb48-82b70cf5245f", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "n-slab", "type": "assignment", "operand": "N_SLAB", "value": "len(SLAB.basis.elements)", "input": [], "head": false, "results": [], "monitors": [], "flowchartId": "a0336ec5-a6da-5e4c-bb48-82b70cf5245f", "preProcessors": [], "postProcessors": [], "next": "9fc7a088-5533-5f70-bb33-f676ec65f565", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "type": "execution", "name": "pw_scf", "head": false, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "fcd88119-817c-5ac1-a430-ba892ac743eb" }, { "name": "e-slab", "type": "assignment", "operand": "E_SLAB", "value": "total_energy", "input": [{ "name": "total_energy", "scope": "9fc7a088-5533-5f70-bb33-f676ec65f565" }], "head": false, "results": [], "monitors": [], "flowchartId": "fcd88119-817c-5ac1-a430-ba892ac743eb", "preProcessors": [], "postProcessors": [], "next": "542ea9ad-8a07-5a76-b233-f72fb27c4fc6", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }, { "name": "surface-energy", "type": "assignment", "operand": "SURFACE_ENERGY", "value": "1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))", "input": [], "head": false, "results": [{ "name": "surface_energy" }], "monitors": [], "flowchartId": "542ea9ad-8a07-5a76-b233-f72fb27c4fc6", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [] }] }], "units": [{ "name": "Surface Energy", "type": "subworkflow", "_id": "3e05a2b5-4171-54a2-9d2d-9e46118a56bf", "status": "idle", "statusTrack": [], "flowchartId": "d81dc9ce-bb50-5bc6-af1d-e5ede03bb0a6", "tags": [], "head": true }], "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "surface_energy", "total_energy", "total_energy_contributions", "total_force"], "_id": "68512987-de73-5614-bab2-0f8b575cffa3", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "espresso" } }, "espresso/total_energy.json": { "name": "Total Energy", "subworkflows": [{ "_id": "a16677f9-bb5b-54b5-9f97-c2af8c073184", "name": "Total Energy", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "Total Energy", "type": "subworkflow", "_id": "a16677f9-bb5b-54b5-9f97-c2af8c073184", "status": "idle", "statusTrack": [], "flowchartId": "6059d61a-6a92-5657-9130-02208639aff8", "tags": [], "head": true }], "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "_id": "4e36ca25-fa46-5628-a227-27d22dea8553", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, "tags": ["default"], "application": { "name": "espresso" } }, "espresso/valence_band_offset.json": { "name": "Valence Band Offset (2D)", "subworkflows": [{ "isMultiMaterial": true, "_id": "9c65d03e-6a30-58f3-947a-f174342be0c3", "name": "BS + Avg ESP (Interface)", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "band_gaps", "average_potential_profile"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "name": "Set Material Index (Interface)", "type": "assignment", "operand": "MATERIAL_INDEX", "value": "0", "input": [], "status": "idle", "statusTrack": [], "flowchartId": "0f21d8c4-ab32-53ba-b40d-fc9b6608e1b9", "tags": [], "head": true, "next": "9fc7a088-5533-5f70-bb33-f676ec65f565", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "type": "execution", "name": "pw_scf", "head": false, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "pw-bands-calculate-band-gap" }, { "type": "execution", "name": "pw_bands", "head": false, "results": [{ "name": "band_gaps" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "pw-bands-calculate-band-gap", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_bands.in" }], "results": ["band_structure"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "pw_bands.in", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }], "next": "a667d9fd-35d5-5897-be0e-fa0247233649" }, { "name": "Select indirect band gap", "type": "assignment", "operand": "BAND_GAP_INDIRECT", "value": "[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]", "input": [{ "name": "band_gaps", "scope": "pw-bands-calculate-band-gap" }], "status": "idle", "statusTrack": [], "flowchartId": "a667d9fd-35d5-5897-be0e-fa0247233649", "tags": [], "head": false, "next": "08819369-b541-5b51-8a40-0ee135039482", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "name": "Set Valence Band Maximum", "type": "assignment", "operand": "VBM", "value": "BAND_GAP_INDIRECT['eigenvalueValence']", "input": [], "status": "idle", "statusTrack": [], "flowchartId": "08819369-b541-5b51-8a40-0ee135039482", "tags": [], "head": false, "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "type": "execution", "name": "bands", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "bands.in" }], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "bands.x", "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", "name": "bands.in", "contextProviders": [], "applicationName": "espresso", "executableName": "bands.x", "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n", "schemaVersion": "2022.8.16" }], "next": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde" }, { "type": "execution", "name": "Electrostatic Potential (ESP)", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "pp.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "pp_electrostatic_potential.in" }], "results": [], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pp.x", "name": "pp_electrostatic_potential", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", "name": "pp_electrostatic_potential.in", "contextProviders": [], "applicationName": "espresso", "executableName": "pp.x", "rendered": "&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", "schemaVersion": "2022.8.16" }], "next": "average-electrostatic-potential" }, { "type": "execution", "name": "average ESP", "head": false, "results": [{ "name": "average_potential_profile" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "average-electrostatic-potential", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "average.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "average.in" }], "results": ["average_potential_profile"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "average.x", "name": "average_potential", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", "name": "average.in", "contextProviders": [], "applicationName": "espresso", "executableName": "average.x", "rendered": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", "schemaVersion": "2022.8.16" }], "next": "c6c11873-91d7-5422-8302-3dcc1ce971e9" }, { "name": "Set Macroscopically Averaged ESP Data", "type": "assignment", "operand": "array_from_context", "value": "average_potential_profile['yDataSeries'][1]", "input": [{ "name": "average_potential_profile", "scope": "average-electrostatic-potential" }], "status": "idle", "statusTrack": [], "flowchartId": "c6c11873-91d7-5422-8302-3dcc1ce971e9", "tags": [], "head": false, "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }] }, { "_id": "ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7", "name": "Find ESP Values (Interface)", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "Find Extrema", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "python-find-extrema", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "find_extrema.py", "templateName": "find_extrema.py" }, { "name": "requirements.txt", "templateName": "processing_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "generic:processing:find_extrema:scipy", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n", "name": "find_extrema.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\nY = np.array({{array_from_context}})\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n", "schemaVersion": "2022.8.16" }], "next": "8fce780b-5555-5b73-b3d1-1bb24a4c759d" }, { "name": "Set Average ESP Value", "type": "assignment", "operand": "AVG_ESP_INTERFACE", "value": "json.loads(STDOUT)['minima']", "input": [{ "name": "STDOUT", "scope": "python-find-extrema" }], "status": "idle", "statusTrack": [], "flowchartId": "8fce780b-5555-5b73-b3d1-1bb24a4c759d", "tags": [], "head": false, "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }] }, { "isMultiMaterial": true, "_id": "ba46d9b4-610f-537e-ae39-e39ce5240cda", "name": "BS + Avg ESP (interface left)", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "band_gaps", "average_potential_profile"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "name": "Set Material Index (Interface left)", "type": "assignment", "operand": "MATERIAL_INDEX", "value": "1", "input": [], "status": "idle", "statusTrack": [], "flowchartId": "0bd31760-f6e4-5826-b282-882c06c97f94", "tags": [], "head": true, "next": "9fc7a088-5533-5f70-bb33-f676ec65f565", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "type": "execution", "name": "pw_scf", "head": false, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "pw-bands-calculate-band-gap-left" }, { "type": "execution", "name": "pw_bands", "head": false, "results": [{ "name": "band_gaps" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "pw-bands-calculate-band-gap-left", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_bands.in" }], "results": ["band_structure"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "pw_bands.in", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }], "next": "a667d9fd-35d5-5897-be0e-fa0247233649" }, { "name": "Select indirect band gap", "type": "assignment", "operand": "BAND_GAP_INDIRECT", "value": "[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]", "input": [{ "name": "band_gaps", "scope": "pw-bands-calculate-band-gap-left" }], "status": "idle", "statusTrack": [], "flowchartId": "a667d9fd-35d5-5897-be0e-fa0247233649", "tags": [], "head": false, "next": "08819369-b541-5b51-8a40-0ee135039482", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "name": "Set Valence Band Maximum", "type": "assignment", "operand": "VBM_LEFT", "value": "BAND_GAP_INDIRECT['eigenvalueValence']", "input": [], "status": "idle", "statusTrack": [], "flowchartId": "08819369-b541-5b51-8a40-0ee135039482", "tags": [], "head": false, "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "type": "execution", "name": "bands", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "bands.in" }], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "bands.x", "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", "name": "bands.in", "contextProviders": [], "applicationName": "espresso", "executableName": "bands.x", "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n", "schemaVersion": "2022.8.16" }], "next": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde" }, { "type": "execution", "name": "Electrostatic Potential (ESP)", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "pp.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "pp_electrostatic_potential.in" }], "results": [], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pp.x", "name": "pp_electrostatic_potential", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", "name": "pp_electrostatic_potential.in", "contextProviders": [], "applicationName": "espresso", "executableName": "pp.x", "rendered": "&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", "schemaVersion": "2022.8.16" }], "next": "average-electrostatic-potential-left" }, { "type": "execution", "name": "average ESP", "head": false, "results": [{ "name": "average_potential_profile" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "average-electrostatic-potential-left", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "average.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "average.in" }], "results": ["average_potential_profile"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "average.x", "name": "average_potential", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", "name": "average.in", "contextProviders": [], "applicationName": "espresso", "executableName": "average.x", "rendered": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", "schemaVersion": "2022.8.16" }], "next": "c6c11873-91d7-5422-8302-3dcc1ce971e9" }, { "name": "Set Macroscopically Averaged ESP Data", "type": "assignment", "operand": "array_from_context", "value": "average_potential_profile['yDataSeries'][1]", "input": [{ "name": "average_potential_profile", "scope": "average-electrostatic-potential-left" }], "status": "idle", "statusTrack": [], "flowchartId": "c6c11873-91d7-5422-8302-3dcc1ce971e9", "tags": [], "head": false, "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }] }, { "_id": "6c303926-905c-5749-81d5-2d2964fdf09a", "name": "Find ESP Value (Interface left)", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "Find Extrema", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "python-find-extrema-left", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "find_extrema.py", "templateName": "find_extrema.py" }, { "name": "requirements.txt", "templateName": "processing_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "generic:processing:find_extrema:scipy", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n", "name": "find_extrema.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\nY = np.array({{array_from_context}})\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n", "schemaVersion": "2022.8.16" }], "next": "8fce780b-5555-5b73-b3d1-1bb24a4c759d" }, { "name": "Set Average ESP Value", "type": "assignment", "operand": "AVG_ESP_LEFT", "value": "json.loads(STDOUT)['minima']", "input": [{ "name": "STDOUT", "scope": "python-find-extrema-left" }], "status": "idle", "statusTrack": [], "flowchartId": "8fce780b-5555-5b73-b3d1-1bb24a4c759d", "tags": [], "head": false, "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }] }, { "isMultiMaterial": true, "_id": "aa611fe8-1e6a-5e5c-976a-f64bfaaaace9", "name": "BS + Avg ESP (interface right)", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "band_gaps", "average_potential_profile"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "name": "Set Material Index (Interface right)", "type": "assignment", "operand": "MATERIAL_INDEX", "value": "2", "input": [], "status": "idle", "statusTrack": [], "flowchartId": "a05809d1-cc0d-5a0b-bf5e-d43b90a6ac4b", "tags": [], "head": true, "next": "9fc7a088-5533-5f70-bb33-f676ec65f565", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "type": "execution", "name": "pw_scf", "head": false, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "pw-bands-calculate-band-gap-right" }, { "type": "execution", "name": "pw_bands", "head": false, "results": [{ "name": "band_gaps" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "pw-bands-calculate-band-gap-right", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_bands.in" }], "results": ["band_structure"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "pw_bands.in", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }], "next": "a667d9fd-35d5-5897-be0e-fa0247233649" }, { "name": "Select indirect band gap", "type": "assignment", "operand": "BAND_GAP_INDIRECT", "value": "[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]", "input": [{ "name": "band_gaps", "scope": "pw-bands-calculate-band-gap-right" }], "status": "idle", "statusTrack": [], "flowchartId": "a667d9fd-35d5-5897-be0e-fa0247233649", "tags": [], "head": false, "next": "08819369-b541-5b51-8a40-0ee135039482", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "name": "Set Valence Band Maximum", "type": "assignment", "operand": "VBM_RIGHT", "value": "BAND_GAP_INDIRECT['eigenvalueValence']", "input": [], "status": "idle", "statusTrack": [], "flowchartId": "08819369-b541-5b51-8a40-0ee135039482", "tags": [], "head": false, "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }, { "type": "execution", "name": "bands", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "bands.in" }], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "bands.x", "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", "name": "bands.in", "contextProviders": [], "applicationName": "espresso", "executableName": "bands.x", "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n", "schemaVersion": "2022.8.16" }], "next": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde" }, { "type": "execution", "name": "Electrostatic Potential (ESP)", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "pp.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "pp_electrostatic_potential.in" }], "results": [], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "pp.x", "name": "pp_electrostatic_potential", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", "name": "pp_electrostatic_potential.in", "contextProviders": [], "applicationName": "espresso", "executableName": "pp.x", "rendered": "&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", "schemaVersion": "2022.8.16" }], "next": "average-electrostatic-potential-right" }, { "type": "execution", "name": "average ESP", "head": false, "results": [{ "name": "average_potential_profile" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "average-electrostatic-potential-right", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "average.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "average.in" }], "results": ["average_potential_profile"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "average.x", "name": "average_potential", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", "name": "average.in", "contextProviders": [], "applicationName": "espresso", "executableName": "average.x", "rendered": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", "schemaVersion": "2022.8.16" }], "next": "c6c11873-91d7-5422-8302-3dcc1ce971e9" }, { "name": "Set Macroscopically Averaged ESP Data", "type": "assignment", "operand": "array_from_context", "value": "average_potential_profile['yDataSeries'][1]", "input": [{ "name": "average_potential_profile", "scope": "average-electrostatic-potential-right" }], "status": "idle", "statusTrack": [], "flowchartId": "c6c11873-91d7-5422-8302-3dcc1ce971e9", "tags": [], "head": false, "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" } }] }, { "_id": "736295e8-2ee0-5974-83bc-362061ac0688", "name": "Find ESP Value (Interface right)", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "Find Extrema", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "python-find-extrema-right", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "find_extrema.py", "templateName": "find_extrema.py" }, { "name": "requirements.txt", "templateName": "processing_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "generic:processing:find_extrema:scipy", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n", "name": "find_extrema.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\nY = np.array({{array_from_context}})\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n", "schemaVersion": "2022.8.16" }], "next": "8fce780b-5555-5b73-b3d1-1bb24a4c759d" }, { "name": "Set Average ESP Value", "type": "assignment", "operand": "AVG_ESP_RIGHT", "value": "json.loads(STDOUT)['minima']", "input": [{ "name": "STDOUT", "scope": "python-find-extrema-right" }], "status": "idle", "statusTrack": [], "flowchartId": "8fce780b-5555-5b73-b3d1-1bb24a4c759d", "tags": [], "head": false, "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }] }, { "_id": "1b70e606-a7ee-599e-89e0-91a7dc5faa4a", "name": "Calculate VBO", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": ["valence_band_offset"], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "name": "Difference of valence band maxima", "type": "assignment", "operand": "VBM_DIFF", "value": "VBM_LEFT - VBM_RIGHT", "input": [], "status": "idle", "statusTrack": [], "flowchartId": "bd4eaa98-b001-5694-87ef-ec77540502ab", "tags": [], "head": true, "next": "2626f7bb-d392-5fd4-ab71-329b508de347", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Difference of macroscopically averaged ESP in bulk", "type": "assignment", "operand": "AVG_ESP_DIFF", "value": "AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]", "input": [], "status": "idle", "statusTrack": [], "flowchartId": "2626f7bb-d392-5fd4-ab71-329b508de347", "tags": [], "head": false, "next": "b7307787-53e2-599b-ad12-d627b04074b4", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Lineup of macroscopically averaged ESP in interface", "type": "assignment", "operand": "ESP_LINEUP", "value": "np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])", "input": [], "status": "idle", "statusTrack": [], "flowchartId": "b7307787-53e2-599b-ad12-d627b04074b4", "tags": [], "head": false, "next": "197f4b4d-cb7b-57be-a885-d44cb1f61905", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Valence Band Offset", "type": "assignment", "operand": "VALENCE_BAND_OFFSET", "value": "abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))", "input": [], "results": [{ "name": "valence_band_offset" }], "status": "idle", "statusTrack": [], "flowchartId": "197f4b4d-cb7b-57be-a885-d44cb1f61905", "tags": [], "head": false, "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }] }], "units": [{ "name": "BS + Avg ESP (Interface)", "type": "subworkflow", "_id": "9c65d03e-6a30-58f3-947a-f174342be0c3", "status": "idle", "statusTrack": [], "flowchartId": "fd622b5c-5c02-594e-b582-b245c17ca9a4", "tags": [], "head": true, "next": "ad3b1e4c-5965-5605-a067-dd0c59907c4b" }, { "name": "Find ESP Values (Interface)", "type": "subworkflow", "_id": "ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7", "status": "idle", "statusTrack": [], "flowchartId": "ad3b1e4c-5965-5605-a067-dd0c59907c4b", "tags": [], "head": false, "next": "8d5b4734-edfd-55cc-ad80-aaa72487398d" }, { "name": "BS + Avg ESP (interface left)", "type": "subworkflow", "_id": "ba46d9b4-610f-537e-ae39-e39ce5240cda", "status": "idle", "statusTrack": [], "flowchartId": "8d5b4734-edfd-55cc-ad80-aaa72487398d", "tags": [], "head": false, "next": "102ec582-5b75-52f5-8b39-19ca725ed47a" }, { "name": "Find ESP Value (Interface left)", "type": "subworkflow", "_id": "6c303926-905c-5749-81d5-2d2964fdf09a", "status": "idle", "statusTrack": [], "flowchartId": "102ec582-5b75-52f5-8b39-19ca725ed47a", "tags": [], "head": false, "next": "603c45db-93aa-54ce-a7fe-6e9b65b0037d" }, { "name": "BS + Avg ESP (interface right)", "type": "subworkflow", "_id": "aa611fe8-1e6a-5e5c-976a-f64bfaaaace9", "status": "idle", "statusTrack": [], "flowchartId": "603c45db-93aa-54ce-a7fe-6e9b65b0037d", "tags": [], "head": false, "next": "e3444d35-cc41-59f5-8481-78d0c383b84e" }, { "name": "Find ESP Value (Interface right)", "type": "subworkflow", "_id": "736295e8-2ee0-5974-83bc-362061ac0688", "status": "idle", "statusTrack": [], "flowchartId": "e3444d35-cc41-59f5-8481-78d0c383b84e", "tags": [], "head": false, "next": "0e0b141a-39ca-52bc-9094-e5f96dc72f39" }, { "name": "Calculate VBO", "type": "subworkflow", "_id": "1b70e606-a7ee-599e-89e0-91a7dc5faa4a", "status": "idle", "statusTrack": [], "flowchartId": "0e0b141a-39ca-52bc-9094-e5f96dc72f39", "tags": [], "head": false }], "properties": ["atomic_forces", "average_potential_profile", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "_id": "d8e08cac-7747-50aa-b925-41f214d722c6", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "espresso" } }, "espresso/variable_cell_relaxation.json": { "name": "Variable-cell Relaxation", "subworkflows": [{ "systemName": "espresso-variable-cell-relaxation", "_id": "58709c44-47f6-5fbf-bf2e-358b9d98f75d", "name": "Variable-cell Relaxation", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "properties": ["total_energy", "fermi_energy", "pressure", "atomic_forces", "total_force", "stress_tensor", "final_structure"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_vc-relax", "head": true, "results": [{ "name": "total_energy" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }, { "name": "final_structure" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }, { "name": "convergence_ionic" }], "flowchartId": "e1bd0870-6245-5fc2-a50d-48cabc356ac8", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pw_vc_relax.in" }], "monitors": ["standard_output", "convergence_electronic", "convergence_ionic"], "results": ["total_energy", "fermi_energy", "pressure", "atomic_forces", "total_force", "stress_tensor", "final_structure"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_vc-relax", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_vc_relax.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "Variable-cell Relaxation", "type": "subworkflow", "_id": "58709c44-47f6-5fbf-bf2e-358b9d98f75d", "status": "idle", "statusTrack": [], "flowchartId": "8f6e9590-6a87-584b-abd7-1fb98253054c", "tags": [], "head": true }], "properties": ["atomic_forces", "fermi_energy", "final_structure", "pressure", "stress_tensor", "total_energy", "total_force"], "_id": "c45dcef1-d16b-59d1-9318-cedd0b1acf08", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, "tags": ["variable-cell_relaxation"], "application": { "name": "espresso" } }, "espresso/zero_point_energy.json": { "name": "Zero Point Energy", "subworkflows": [{ "_id": "151538cc-9e71-5269-8b9e-cb5977151227", "name": "Zero Point Energy", "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "zero_point_energy"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "us", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "pw_scf", "head": true, "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": true, "postProcessors": ["remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "pw_scf.in" }], "results": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "espresso", "executableName": "pw.x", "name": "pw_scf", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "pw_scf.in", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "applicationName": "espresso", "executableName": "pw.x", "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", "schemaVersion": "2022.8.16" }], "next": "107595d1-490f-53a2-8432-7f8a12f14d96" }, { "type": "execution", "name": "ph_zpe", "head": false, "results": [{ "name": "zero_point_energy" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "107595d1-490f-53a2-8432-7f8a12f14d96", "preProcessors": [], "postProcessors": [], "application": { "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "build": "GNU", "version": "6.3", "isDefault": true, "hasAdvancedComputeOptions": true, "schemaVersion": "2022.8.16" }, "executable": { "monitors": ["standard_output"], "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { "input": [{ "name": "ph_gamma.in" }], "results": ["zero_point_energy"], "monitors": ["standard_output"], "applicationName": "espresso", "executableName": "ph.x", "name": "ph_gamma", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n", "name": "ph_gamma.in", "contextProviders": [], "applicationName": "espresso", "executableName": "ph.x", "rendered": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n/\n0 0 0\n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "Zero Point Energy", "type": "subworkflow", "_id": "151538cc-9e71-5269-8b9e-cb5977151227", "status": "idle", "statusTrack": [], "flowchartId": "d906bd20-eb92-5a01-a0e2-c81a2d9b2a41", "tags": [], "head": true }], "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "zero_point_energy"], "_id": "3158c78d-58bb-5675-8c7f-6f2337061015", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "espresso" } }, "nwchem/total_energy.json": { "name": "Total Energy", "subworkflows": [{ "_id": "9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13", "name": "Total Energy", "application": { "name": "nwchem", "shortName": "nwchem", "summary": "NWChem", "build": "GNU", "version": "7.0.2", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": ["total_energy", "total_energy_contributions"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "localorbital", "subtype": "pople", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "nwchem_total_energy", "head": true, "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7", "preProcessors": [], "postProcessors": [], "application": { "name": "nwchem", "shortName": "nwchem", "summary": "NWChem", "build": "GNU", "version": "7.0.2", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "hasAdvancedComputeOptions": false, "postProcessors": ["error_handler"], "monitors": ["standard_output"], "name": "nwchem", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "nwchem_total_energy.inp" }], "results": ["total_energy", "total_energy_contributions"], "monitors": ["standard_output"], "applicationName": "nwchem", "executableName": "nwchem", "name": "nwchem_total_energy", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": " start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n", "name": "nwchem_total_energy.inp", "contextProviders": [{ "name": "NWChemInputDataManager" }], "applicationName": "nwchem", "executableName": "nwchem", "rendered": " start nwchem\n title \"Test\"\n charge 0\n geometry units au noautosym\n Si 0.000000000 0.000000000 0.000000000 \nSi 1.116306745 0.789348070 1.933500000 \n end\n basis\n * library 6-31G\n end\n dft\n xc B3LYP\n mult 1\n end\n task dft energy\n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "Total Energy", "type": "subworkflow", "_id": "9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13", "status": "idle", "statusTrack": [], "flowchartId": "6059d61a-6a92-5657-9130-02208639aff8", "tags": [], "head": true }], "properties": ["total_energy", "total_energy_contributions"], "_id": "937fbac8-2dec-5fb1-a46f-b8a0cc3d3d05", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "nwchem" } }, "python/ml/classification_workflow.json": { "name": "Python ML Train Classification", "subworkflows": [{ "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", "name": "Set Up the Job", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "name": "Set Workflow Mode", "type": "assignment", "operand": "IS_WORKFLOW_RUNNING_TO_PREDICT", "value": "False", "input": [], "flowchartId": "head-set-predict-status", "tags": ["pyml:workflow-type-setter"], "status": "idle", "statusTrack": [], "head": true, "next": "head-fetch-training-data", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Fetch Dataset", "type": "io", "subtype": "input", "enableRender": true, "flowchartId": "head-fetch-training-data", "input": [{ "basename": "{{DATASET_BASENAME}}", "objectData": { "CONTAINER": "", "NAME": "{{DATASET_FILEPATH}}", "PROVIDER": "", "REGION": "" } }], "source": "object_storage", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "head-branch-on-predict-status", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Train or Predict?", "type": "condition", "input": [{ "name": "IS_WORKFLOW_RUNNING_TO_PREDICT", "scope": "global" }], "results": [], "preProcessors": [], "postProcessors": [], "then": "head-fetch-trained-model", "else": "end-of-ml-train-head", "statement": "IS_WORKFLOW_RUNNING_TO_PREDICT", "maxOccurrences": 100, "flowchartId": "head-branch-on-predict-status", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "head-fetch-trained-model", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Fetch Trained Model as file", "type": "io", "subtype": "input", "enableRender": true, "flowchartId": "head-fetch-trained-model", "input": [{ "basename": "", "objectData": { "CONTAINER": "", "NAME": "", "PROVIDER": "", "REGION": "" } }], "source": "object_storage", "tags": ["set-io-unit-filenames"], "status": "idle", "statusTrack": [], "head": false, "next": "end-of-ml-train-head", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "End Setup", "type": "assignment", "operand": "IS_SETUP_COMPLETE", "value": "True", "input": [], "flowchartId": "end-of-ml-train-head", "status": "idle", "statusTrack": [], "tags": [], "head": false, "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }] }, { "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", "name": "Machine Learning", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": ["workflow:pyml_predict", "file_content"], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "Setup Variables and Packages", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "c3608488-0259-5ff4-8b90-11c6e60d6c85", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "settings.py", "templateName": "pyml_settings.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:setup_variables_packages", "schemaVersion": "2022.8.16", "isDefault": false }, "enableRender": true, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", "name": "settings.py", "contextProviders": [{ "name": "MLSettingsDataManager" }], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3" }, { "type": "execution", "name": "Data Input", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "data_input_read_csv_pandas.py", "templateName": "data_input_read_csv_pandas.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:data_input:read_csv:pandas", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", "name": "data_input_read_csv_pandas.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "7fff5212-6c6d-586b-9997-4d4485e09383" }, { "type": "execution", "name": "Train Test Split", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "7fff5212-6c6d-586b-9997-4d4485e09383", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "data_input_train_test_split_sklearn.py", "templateName": "data_input_train_test_split_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:data_input:train_test_split:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "name": "data_input_train_test_split_sklearn.py", "contextProviders": [{ "name": "MLTrainTestSplitDataManager" }], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "799de7dc-9394-571b-8e0d-3ff876a3df02" }, { "type": "execution", "name": "Data Standardize", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "799de7dc-9394-571b-8e0d-3ff876a3df02", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pre_processing_standardization_sklearn.py", "templateName": "pre_processing_standardization_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:pre_processing:standardization:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", "name": "pre_processing_standardization_sklearn.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "8dfc61c3-067d-5ea8-bd26-7296628d707a" }, { "type": "execution", "name": "Model Train and Predict", "head": false, "results": [{ "name": "workflow:pyml_predict" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "8dfc61c3-067d-5ea8-bd26-7296628d707a", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "model_random_forest_classification_sklearn.py", "templateName": "model_random_forest_classification_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "results": ["workflow:pyml_predict"], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:model:random_forest_classification:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "tags": ["remove-all-results", "creates-predictions-csv-during-predict-phase"], "status": "idle", "statusTrack": [], "input": [{ "content": "# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "name": "model_random_forest_classification_sklearn.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "35436b4a-cd9c-5089-ab42-665c4f9ba049" }, { "type": "execution", "name": "ROC Curve Plot", "head": false, "results": [{ "basename": "my_roc_plot.png", "filetype": "image", "name": "file_content" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "35436b4a-cd9c-5089-ab42-665c4f9ba049", "preProcessors": [], "postProcessors": [{ "name": "remove_virtual_environment" }], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "post_processing_roc_curve_sklearn.py", "templateName": "post_processing_roc_curve_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "results": ["file_content"], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:post_processing:roc_curve:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "tags": ["remove-all-results"], "status": "idle", "statusTrack": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "name": "post_processing_roc_curve_sklearn.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "Set Up the Job", "type": "subworkflow", "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", "status": "idle", "statusTrack": [], "flowchartId": "5b51df93-15dd-5440-90fd-a3ffa264b7d8", "tags": [], "head": true, "next": "90738aae-daac-599f-913f-29fb6acdff00" }, { "name": "Machine Learning", "type": "subworkflow", "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", "status": "idle", "statusTrack": [], "flowchartId": "90738aae-daac-599f-913f-29fb6acdff00", "tags": [], "head": false }], "properties": [], "_id": "f447c6df-3b7b-5b8e-a0cc-1a743847ceed", "workflows": [], "isUsingDataset": true, "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "python" } }, "python/ml/clustering_workflow.json": { "name": "Python ML Train Clustering", "subworkflows": [{ "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", "name": "Set Up the Job", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "name": "Set Workflow Mode", "type": "assignment", "operand": "IS_WORKFLOW_RUNNING_TO_PREDICT", "value": "False", "input": [], "flowchartId": "head-set-predict-status", "tags": ["pyml:workflow-type-setter"], "status": "idle", "statusTrack": [], "head": true, "next": "head-fetch-training-data", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Fetch Dataset", "type": "io", "subtype": "input", "enableRender": true, "flowchartId": "head-fetch-training-data", "input": [{ "basename": "{{DATASET_BASENAME}}", "objectData": { "CONTAINER": "", "NAME": "{{DATASET_FILEPATH}}", "PROVIDER": "", "REGION": "" } }], "source": "object_storage", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "head-branch-on-predict-status", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Train or Predict?", "type": "condition", "input": [{ "name": "IS_WORKFLOW_RUNNING_TO_PREDICT", "scope": "global" }], "results": [], "preProcessors": [], "postProcessors": [], "then": "head-fetch-trained-model", "else": "end-of-ml-train-head", "statement": "IS_WORKFLOW_RUNNING_TO_PREDICT", "maxOccurrences": 100, "flowchartId": "head-branch-on-predict-status", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "head-fetch-trained-model", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Fetch Trained Model as file", "type": "io", "subtype": "input", "enableRender": true, "flowchartId": "head-fetch-trained-model", "input": [{ "basename": "", "objectData": { "CONTAINER": "", "NAME": "", "PROVIDER": "", "REGION": "" } }], "source": "object_storage", "tags": ["set-io-unit-filenames"], "status": "idle", "statusTrack": [], "head": false, "next": "end-of-ml-train-head", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "End Setup", "type": "assignment", "operand": "IS_SETUP_COMPLETE", "value": "True", "input": [], "flowchartId": "end-of-ml-train-head", "status": "idle", "statusTrack": [], "tags": [], "head": false, "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }] }, { "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", "name": "Machine Learning", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": ["workflow:pyml_predict", "file_content"], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "Setup Variables and Packages", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "c3608488-0259-5ff4-8b90-11c6e60d6c85", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "settings.py", "templateName": "pyml_settings.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:setup_variables_packages", "schemaVersion": "2022.8.16", "isDefault": false }, "enableRender": true, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", "name": "settings.py", "contextProviders": [{ "name": "MLSettingsDataManager" }], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3" }, { "type": "execution", "name": "Data Input", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "data_input_read_csv_pandas.py", "templateName": "data_input_read_csv_pandas.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:data_input:read_csv:pandas", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", "name": "data_input_read_csv_pandas.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "7fff5212-6c6d-586b-9997-4d4485e09383" }, { "type": "execution", "name": "Train Test Split", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "7fff5212-6c6d-586b-9997-4d4485e09383", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "data_input_train_test_split_sklearn.py", "templateName": "data_input_train_test_split_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:data_input:train_test_split:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "name": "data_input_train_test_split_sklearn.py", "contextProviders": [{ "name": "MLTrainTestSplitDataManager" }], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "799de7dc-9394-571b-8e0d-3ff876a3df02" }, { "type": "execution", "name": "Data Standardize", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "799de7dc-9394-571b-8e0d-3ff876a3df02", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pre_processing_standardization_sklearn.py", "templateName": "pre_processing_standardization_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:pre_processing:standardization:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", "name": "pre_processing_standardization_sklearn.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "8dfc61c3-067d-5ea8-bd26-7296628d707a" }, { "type": "execution", "name": "Model Train and Predict", "head": false, "results": [{ "name": "workflow:pyml_predict" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "8dfc61c3-067d-5ea8-bd26-7296628d707a", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "model_random_forest_classification_sklearn.py", "templateName": "model_random_forest_classification_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "results": ["workflow:pyml_predict"], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:model:random_forest_classification:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "tags": ["remove-all-results", "creates-predictions-csv-during-predict-phase"], "status": "idle", "statusTrack": [], "input": [{ "content": "# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "name": "model_random_forest_classification_sklearn.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "35436b4a-cd9c-5089-ab42-665c4f9ba049" }, { "type": "execution", "name": "ROC Curve Plot", "head": false, "results": [{ "basename": "my_roc_plot.png", "filetype": "image", "name": "file_content" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "35436b4a-cd9c-5089-ab42-665c4f9ba049", "preProcessors": [], "postProcessors": [{ "name": "remove_virtual_environment" }], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "post_processing_roc_curve_sklearn.py", "templateName": "post_processing_roc_curve_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "results": ["file_content"], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:post_processing:roc_curve:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "tags": ["remove-all-results"], "status": "idle", "statusTrack": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "name": "post_processing_roc_curve_sklearn.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "Set Up the Job", "type": "subworkflow", "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", "status": "idle", "statusTrack": [], "flowchartId": "5b51df93-15dd-5440-90fd-a3ffa264b7d8", "tags": [], "head": true, "next": "90738aae-daac-599f-913f-29fb6acdff00" }, { "name": "Machine Learning", "type": "subworkflow", "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", "status": "idle", "statusTrack": [], "flowchartId": "90738aae-daac-599f-913f-29fb6acdff00", "tags": [], "head": false }], "properties": [], "_id": "f447c6df-3b7b-5b8e-a0cc-1a743847ceed", "workflows": [], "isUsingDataset": true, "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "python" } }, "python/ml/regression_workflow.json": { "name": "Python ML Train Regression", "subworkflows": [{ "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", "name": "Set Up the Job", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "name": "Set Workflow Mode", "type": "assignment", "operand": "IS_WORKFLOW_RUNNING_TO_PREDICT", "value": "False", "input": [], "flowchartId": "head-set-predict-status", "tags": ["pyml:workflow-type-setter"], "status": "idle", "statusTrack": [], "head": true, "next": "head-fetch-training-data", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Fetch Dataset", "type": "io", "subtype": "input", "enableRender": true, "flowchartId": "head-fetch-training-data", "input": [{ "basename": "{{DATASET_BASENAME}}", "objectData": { "CONTAINER": "", "NAME": "{{DATASET_FILEPATH}}", "PROVIDER": "", "REGION": "" } }], "source": "object_storage", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "head-branch-on-predict-status", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Train or Predict?", "type": "condition", "input": [{ "name": "IS_WORKFLOW_RUNNING_TO_PREDICT", "scope": "global" }], "results": [], "preProcessors": [], "postProcessors": [], "then": "head-fetch-trained-model", "else": "end-of-ml-train-head", "statement": "IS_WORKFLOW_RUNNING_TO_PREDICT", "maxOccurrences": 100, "flowchartId": "head-branch-on-predict-status", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "head-fetch-trained-model", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Fetch Trained Model as file", "type": "io", "subtype": "input", "enableRender": true, "flowchartId": "head-fetch-trained-model", "input": [{ "basename": "", "objectData": { "CONTAINER": "", "NAME": "", "PROVIDER": "", "REGION": "" } }], "source": "object_storage", "tags": ["set-io-unit-filenames"], "status": "idle", "statusTrack": [], "head": false, "next": "end-of-ml-train-head", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "End Setup", "type": "assignment", "operand": "IS_SETUP_COMPLETE", "value": "True", "input": [], "flowchartId": "end-of-ml-train-head", "status": "idle", "statusTrack": [], "tags": [], "head": false, "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" } }] }, { "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", "name": "Machine Learning", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": ["workflow:pyml_predict", "file_content"], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "Setup Variables and Packages", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "c3608488-0259-5ff4-8b90-11c6e60d6c85", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "settings.py", "templateName": "pyml_settings.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:setup_variables_packages", "schemaVersion": "2022.8.16", "isDefault": false }, "enableRender": true, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", "name": "settings.py", "contextProviders": [{ "name": "MLSettingsDataManager" }], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3" }, { "type": "execution", "name": "Data Input", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "data_input_read_csv_pandas.py", "templateName": "data_input_read_csv_pandas.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:data_input:read_csv:pandas", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", "name": "data_input_read_csv_pandas.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "7fff5212-6c6d-586b-9997-4d4485e09383" }, { "type": "execution", "name": "Train Test Split", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "7fff5212-6c6d-586b-9997-4d4485e09383", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "data_input_train_test_split_sklearn.py", "templateName": "data_input_train_test_split_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:data_input:train_test_split:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "name": "data_input_train_test_split_sklearn.py", "contextProviders": [{ "name": "MLTrainTestSplitDataManager" }], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "799de7dc-9394-571b-8e0d-3ff876a3df02" }, { "type": "execution", "name": "Data Standardize", "head": false, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "799de7dc-9394-571b-8e0d-3ff876a3df02", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "pre_processing_standardization_sklearn.py", "templateName": "pre_processing_standardization_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:pre_processing:standardization:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", "name": "pre_processing_standardization_sklearn.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "8dfc61c3-067d-5ea8-bd26-7296628d707a" }, { "type": "execution", "name": "Model Train and Predict", "head": false, "results": [{ "name": "workflow:pyml_predict" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "8dfc61c3-067d-5ea8-bd26-7296628d707a", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "model_mlp_sklearn.py", "templateName": "model_mlp_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "results": ["workflow:pyml_predict"], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:model:multilayer_perceptron:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, "tags": ["remove-all-results", "creates-predictions-csv-during-predict-phase"], "status": "idle", "statusTrack": [], "input": [{ "content": "# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "name": "model_mlp_sklearn.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }], "next": "1ca76a49-a3c7-5fa2-b693-538b599ecd7c" }, { "type": "execution", "name": "Parity Plot", "head": false, "results": [{ "basename": "my_parity_plot.png", "filetype": "image", "name": "file_content" }], "monitors": [{ "name": "standard_output" }], "flowchartId": "1ca76a49-a3c7-5fa2-b693-538b599ecd7c", "preProcessors": [], "postProcessors": [{ "name": "remove_virtual_environment" }], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "post_processing_parity_plot_matplotlib.py", "templateName": "post_processing_parity_plot_matplotlib.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "results": ["file_content"], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "pyml:post_processing:parity_plot:matplotlib", "schemaVersion": "2022.8.16", "isDefault": false }, "tags": ["remove-all-results"], "status": "idle", "statusTrack": [], "input": [{ "content": "# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "name": "post_processing_parity_plot_matplotlib.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "Set Up the Job", "type": "subworkflow", "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", "status": "idle", "statusTrack": [], "flowchartId": "5b51df93-15dd-5440-90fd-a3ffa264b7d8", "tags": [], "head": true, "next": "90738aae-daac-599f-913f-29fb6acdff00" }, { "name": "Machine Learning", "type": "subworkflow", "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", "status": "idle", "statusTrack": [], "flowchartId": "90738aae-daac-599f-913f-29fb6acdff00", "tags": [], "head": false }], "properties": [], "_id": "f447c6df-3b7b-5b8e-a0cc-1a743847ceed", "workflows": [], "isUsingDataset": true, "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "python" } }, "python/python_script.json": { "name": "Python Script", "subworkflows": [{ "_id": "64a079ba-7a12-57b7-ac06-310b2bf8d354", "name": "Python Script", "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "python", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "9b8a495e-1ac1-56a7-b2e0-af1b405a1219", "preProcessors": [], "postProcessors": [], "application": { "name": "python", "shortName": "py", "summary": "Python Script", "build": "GNU", "version": "3.10.13", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "script.py", "templateName": "hello_world.py" }, { "name": "requirements.txt" }], "monitors": ["standard_output"], "applicationName": "python", "executableName": "python", "name": "hello_world", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n", "name": "script.py", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n", "schemaVersion": "2022.8.16" }, { "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n", "name": "requirements.txt", "contextProviders": [], "applicationName": "python", "executableName": "python", "rendered": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "Python Script", "type": "subworkflow", "_id": "64a079ba-7a12-57b7-ac06-310b2bf8d354", "status": "idle", "statusTrack": [], "flowchartId": "c50e28b2-a0c5-5324-8b6f-e99b5a546bd8", "tags": [], "head": true }], "properties": [], "_id": "de816646-766b-5f97-b468-0937d4381440", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "python" } }, "shell/batch_espresso_pwscf.json": { "name": "Shell Batch Job (Espresso PWSCF)", "subworkflows": [{ "_id": "f0775c7b-214a-5245-b921-5b4eb53d15a9", "name": "Shell Batch Job (Espresso PWSCF)", "application": { "name": "shell", "shortName": "sh", "summary": "Shell Script", "build": "GNU", "version": "5.1.8", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "shell", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "99304304-e873-5c89-ae83-91e61a7f629c", "preProcessors": [], "postProcessors": [], "application": { "name": "shell", "shortName": "sh", "summary": "Shell Script", "build": "GNU", "version": "5.1.8", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "job_espresso_pw_scf.sh" }], "monitors": ["standard_output"], "applicationName": "shell", "executableName": "sh", "name": "job_espresso_pw_scf", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n", "name": "job_espresso_pw_scf.sh", "contextProviders": [], "applicationName": "shell", "executableName": "sh", "rendered": "#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "Shell Batch Job (Espresso PWSCF)", "type": "subworkflow", "_id": "f0775c7b-214a-5245-b921-5b4eb53d15a9", "status": "idle", "statusTrack": [], "flowchartId": "d884e8f7-7acf-5a03-bc9a-186903bdaa0e", "tags": [], "head": true }], "properties": [], "_id": "e0046fb4-37db-5732-bf81-c48e13081a4c", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "shell" } }, "shell/hello_world.json": { "name": "Shell Script", "subworkflows": [{ "_id": "ce33d4cf-e0d2-5020-854d-9ea1fe5c8512", "name": "Shell Hello World", "application": { "name": "shell", "shortName": "sh", "summary": "Shell Script", "build": "GNU", "version": "5.1.8", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "shell", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "99304304-e873-5c89-ae83-91e61a7f629c", "preProcessors": [], "postProcessors": [], "application": { "name": "shell", "shortName": "sh", "summary": "Shell Script", "build": "GNU", "version": "5.1.8", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "hello_world.sh" }], "monitors": ["standard_output"], "applicationName": "shell", "executableName": "sh", "name": "hello_world", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n", "name": "hello_world.sh", "contextProviders": [], "applicationName": "shell", "executableName": "sh", "rendered": "#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "Shell Hello World", "type": "subworkflow", "_id": "ce33d4cf-e0d2-5020-854d-9ea1fe5c8512", "status": "idle", "statusTrack": [], "flowchartId": "319307c2-bf22-5bf2-b4e9-a4cdf671b786", "tags": [], "head": true }], "properties": [], "_id": "d2fd444c-06b4-5d66-baeb-449c680ae1bf", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "shell" } }, "vasp/band_gap.json": { "name": "Band Gap", "subworkflows": [{ "_id": "e65f2461-5f5c-5a51-8c48-88ad37bff100", "name": "Band Gap", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor", "band_gaps", "fermi_energy"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "paw", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "vasp", "head": true, "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9cb87769-bf20-56bf-a8b3-5a164e3bf541", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "INCAR" }, { "name": "KPOINTS" }, { "name": "POSCAR" }], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }], "next": "f0d65517-9592-5bc8-948e-a0851a766cbb" }, { "type": "execution", "name": "vasp_nscf", "head": false, "results": [{ "name": "band_gaps" }, { "name": "fermi_energy" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "f0d65517-9592-5bc8-948e-a0851a766cbb", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "INCAR", "templateName": "INCAR_BANDS" }, { "name": "KPOINTS", "templateName": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR" }], "results": ["band_gaps", "fermi_energy"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp_nscf", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "Band Gap", "type": "subworkflow", "_id": "e65f2461-5f5c-5a51-8c48-88ad37bff100", "status": "idle", "statusTrack": [], "flowchartId": "db3b83ea-0ef5-594c-89a8-bde38dbc6105", "tags": [], "head": true }], "properties": ["atomic_forces", "band_gaps", "fermi_energy", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "_id": "16ca0232-a570-53d1-a4d3-32bbd6f3f0a2", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "vasp" } }, "vasp/band_structure_dos.json": { "name": "Band Structure + Density of States", "subworkflows": [{ "_id": "d38fea11-9781-5151-8dae-d705381498be", "name": "Band Structure + Density of States", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": ["density_of_states", "total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor", "band_structure"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "paw", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "vasp", "head": true, "results": [{ "name": "density_of_states" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9cb87769-bf20-56bf-a8b3-5a164e3bf541", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "INCAR" }, { "name": "KPOINTS" }, { "name": "POSCAR" }], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }], "next": "1e1de3be-f6e4-513e-afe2-c84e567a8108" }, { "type": "execution", "name": "vasp_bands", "head": false, "results": [{ "name": "band_structure" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "1e1de3be-f6e4-513e-afe2-c84e567a8108", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "INCAR", "templateName": "INCAR_BANDS" }, { "name": "KPOINTS", "templateName": "KPOINTS_BANDS" }, { "name": "POSCAR", "templateName": "" }], "results": ["band_structure"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp_bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", "schemaVersion": "2022.8.16" }, { "content": "kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "Band Structure + Density of States", "type": "subworkflow", "_id": "d38fea11-9781-5151-8dae-d705381498be", "status": "idle", "statusTrack": [], "flowchartId": "8a098bb9-73b1-5e84-bfc7-b783e02d0f53", "tags": [], "head": true }], "properties": ["atomic_forces", "band_structure", "density_of_states", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "_id": "c8338d40-3c6e-5581-b03c-d7fb5cbb8df5", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "vasp" } }, "vasp/band_structure.json": { "name": "Band Structure", "subworkflows": [{ "_id": "cd6e3d59-5544-56ac-878b-fd8716a09768", "name": "Band Structure", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor", "band_structure"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "paw", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "vasp", "head": true, "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9cb87769-bf20-56bf-a8b3-5a164e3bf541", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "INCAR" }, { "name": "KPOINTS" }, { "name": "POSCAR" }], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }], "next": "1e1de3be-f6e4-513e-afe2-c84e567a8108" }, { "type": "execution", "name": "vasp_bands", "head": false, "results": [{ "name": "band_structure" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "1e1de3be-f6e4-513e-afe2-c84e567a8108", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "INCAR", "templateName": "INCAR_BANDS" }, { "name": "KPOINTS", "templateName": "KPOINTS_BANDS" }, { "name": "POSCAR", "templateName": "" }], "results": ["band_structure"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp_bands", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", "schemaVersion": "2022.8.16" }, { "content": "kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "Band Structure", "type": "subworkflow", "_id": "cd6e3d59-5544-56ac-878b-fd8716a09768", "status": "idle", "statusTrack": [], "flowchartId": "c573187f-a8bb-5084-9fcf-1560bf4a7786", "tags": [], "head": true }], "properties": ["atomic_forces", "band_structure", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "_id": "25b0ad08-87bb-5400-bea4-acd5fe2163c0", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "vasp" } }, "vasp/dos.json": { "name": "Density of States", "subworkflows": [{ "_id": "4897ca33-b023-5a8d-9a5d-9e74df0f00ad", "name": "Density of States", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": ["density_of_states", "total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "paw", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "vasp", "head": true, "results": [{ "name": "density_of_states" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "9cb87769-bf20-56bf-a8b3-5a164e3bf541", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "isDefault": true, "input": [{ "name": "INCAR" }, { "name": "KPOINTS" }, { "name": "POSCAR" }], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp", "schemaVersion": "2022.8.16" }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "Density of States", "type": "subworkflow", "_id": "4897ca33-b023-5a8d-9a5d-9e74df0f00ad", "status": "idle", "statusTrack": [], "flowchartId": "3e64fdb4-ab5b-52a0-a1d5-51343c49481c", "tags": [], "head": true }], "properties": ["atomic_forces", "density_of_states", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "_id": "629a79fb-a03f-5e34-b2ce-9c735e8ef6c0", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "vasp" } }, "vasp/fixed_cell_relaxation.json": { "name": "Fixed-cell Relaxation", "subworkflows": [{ "_id": "db6cc94b-2f26-5688-ba97-80b11567b549", "name": "Fixed-cell Relaxation", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": ["total_energy", "atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_force", "final_structure"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "paw", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "vasp_relax", "head": true, "results": [{ "name": "total_energy" }, { "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_force" }, { "name": "final_structure" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }, { "name": "convergence_ionic" }], "flowchartId": "2f718a3d-5800-57e2-b707-075c1f1755c6", "preProcessors": [], "postProcessors": [{ "name": "prepare_restart" }], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "INCAR", "templateName": "INCAR_RELAX" }, { "name": "KPOINTS", "templateName": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR" }], "results": ["total_energy", "atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_force", "final_structure"], "monitors": ["standard_output", "convergence_electronic", "convergence_ionic"], "postProcessors": ["prepare_restart"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp_relax", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }] }] }], "units": [{ "name": "Fixed-cell Relaxation", "type": "subworkflow", "_id": "db6cc94b-2f26-5688-ba97-80b11567b549", "status": "idle", "statusTrack": [], "flowchartId": "0de8c4c8-b722-5cd2-ae68-b484262e0a01", "tags": [], "head": true }], "properties": ["atomic_forces", "fermi_energy", "final_structure", "pressure", "stress_tensor", "total_energy", "total_force"], "_id": "cb69418c-2f6c-551d-af81-0cf20ec1113d", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "vasp" } }, "vasp/kpoint_convergence.json": { "name": "K-point Convergence", "subworkflows": [{ "_id": "5d736d84-d616-538f-a09b-81a32ac0777c", "name": "K-point Convergence", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "paw", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "name": "Init tolerance", "type": "assignment", "operand": "TOL", "value": 0.00001, "input": [], "flowchartId": "init-tolerance", "status": "idle", "statusTrack": [], "tags": [], "head": true, "next": "init-increment", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Init increment", "type": "assignment", "operand": "INC", "value": 1, "input": [], "flowchartId": "init-increment", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "init-result", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Init result", "type": "assignment", "operand": "PREV_RESULT", "value": 0, "input": [], "flowchartId": "init-result", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "init-parameter", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "Init parameter", "type": "assignment", "operand": "PARAMETER", "value": 1, "input": [], "flowchartId": "init-parameter", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "vasp-kpoint-convergence", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "type": "execution", "name": "vasp_kpt_conv", "head": false, "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "vasp-kpoint-convergence", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "INCAR", "templateName": "INCAR" }, { "name": "KPOINTS", "templateName": "KPOINTS_CONV" }, { "name": "POSCAR", "templateName": "POSCAR" }], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp_kpt_conv", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "name": "INCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic Mesh\n0\nGamma\n{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}\n0 0 0\n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.POSCAR }}\n", "name": "POSCAR", "contextProviders": [{ "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }], "next": "store-result" }, { "name": "store result", "type": "assignment", "operand": "RESULT", "value": "total_energy", "input": [{ "name": "total_energy", "scope": "vasp-kpoint-convergence" }], "flowchartId": "store-result", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "check-convergence", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "check convergence", "type": "condition", "input": [], "results": [], "preProcessors": [], "postProcessors": [], "then": "convergence-is-reached", "else": "update-result", "statement": "abs((PREV_RESULT-RESULT)/RESULT) < TOL", "maxOccurrences": 50, "flowchartId": "check-convergence", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "update-result", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "update result", "type": "assignment", "operand": "PREV_RESULT", "value": "RESULT", "input": [{ "name": "RESULT", "scope": "global" }], "flowchartId": "update-result", "status": "idle", "statusTrack": [], "tags": [], "head": false, "next": "increment-parameter", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "increment parameter", "type": "assignment", "operand": "PREV_RESULT", "value": "PARAMETER+INC", "input": [{ "name": "INC", "scope": "global" }, { "name": "PARAMETER", "scope": "global" }], "flowchartId": "increment-parameter", "next": "vasp-kpoint-convergence", "status": "idle", "statusTrack": [], "tags": [], "head": false, "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }, { "name": "exit", "type": "assignment", "operand": "PARAMETER", "value": "PARAMETER", "input": [{ "name": "PARAMETER", "scope": "global" }], "flowchartId": "convergence-is-reached", "status": "idle", "statusTrack": [], "tags": [], "head": false, "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" } }] }], "units": [{ "name": "K-point Convergence", "type": "subworkflow", "_id": "5d736d84-d616-538f-a09b-81a32ac0777c", "status": "idle", "statusTrack": [], "flowchartId": "a34eec2c-cdb2-537d-88c0-ed1d7b205879", "tags": [], "head": true }], "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "_id": "fcf105f9-5ae7-5c32-a6b3-e3579cbdf39a", "workflows": [], "schemaVersion": "2022.8.16", "isDefault": false, "application": { "name": "vasp" } }, "vasp/neb.json": { "name": "Nudged Elastic Band (NEB)", "subworkflows": [{ "isMultiMaterial": true, "_id": "792e8c42-86ce-5f01-812a-66378ec4f379", "name": "Initial/Final Total Energies", "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor", "total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "model": { "type": "dft", "subtype": "gga", "method": { "type": "pseudopotential", "subtype": "paw", "data": {} }, "functional": { "slug": "pbe" }, "refiners": [], "modifiers": [] }, "units": [{ "type": "execution", "name": "vasp_neb_initial", "head": true, "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "f969f010-9dae-5085-9ac5-86150ef78897", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "INCAR", "templateName": "INCAR_NEB_INITIAL_FINAL" }, { "name": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR_NEB_INITIAL" }], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp_neb_initial", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISTART = 0\nENCUT = 500\nISPIN = 2\n", "name": "INCAR", "contextProviders": [{ "name": "NEBFormDataManager" }, { "name": "VASPNEBInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISTART = 0\nENCUT = 500\nISPIN = 2\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.FIRST_IMAGE }}\n", "name": "POSCAR", "contextProviders": [{ "name": "NEBFormDataManager" }, { "name": "VASPNEBInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }], "next": "e65a17ce-10c8-5710-ad4d-fb3d42434091" }, { "type": "execution", "name": "vasp_neb_final", "head": false, "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "flowchartId": "e65a17ce-10c8-5710-ad4d-fb3d42434091", "preProcessors": [], "postProcessors": [], "application": { "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "isLicensed": true, "build": "GNU", "version": "5.4.4", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "postProcessors": ["error_handler", "prepare_restart", "remove_non_zero_weight_kpoints"], "monitors": ["standard_output", "convergence_ionic", "convergence_electronic"], "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "INCAR", "templateName": "INCAR_NEB_INITIAL_FINAL" }, { "name": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR_NEB_FINAL" }], "results": ["total_energy", "total_energy_contributions", "pressure", "fermi_energy", "atomic_forces", "total_force", "stress_tensor"], "monitors": ["standard_output", "convergence_electronic"], "applicationName": "vasp", "executableName": "vasp", "name": "vasp_neb_final", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "ISTART = 0\nENCUT = 500\nISPIN = 2\n", "name": "INCAR", "contextProviders": [{ "name": "NEBFormDataManager" }, { "name": "VASPNEBInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "ISTART = 0\nENCUT = 500\nISPIN = 2\n", "schemaVersion": "2022.8.16" }, { "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "name": "KPOINTS", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n", "schemaVersion": "2022.8.16" }, { "content": "{{ input.LAST_IMAGE }}\n", "name": "POSCAR", "contextProviders": [{ "name": "NEBFormDataManager" }, { "name": "VASPNEBInputDataManager" }], "applicationName": "vasp", "executableName": "vasp", "rendered": "Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n", "schemaVersion": "2022.8.16" }] }] }, { "isMultiMaterial": true, "_id": "c9b7ad2a-5207-5e41-9b66-28474a8921f8", "name": "Prepare Directories", "application": { "name": "shell", "shortName": "sh", "summary": "Shell Script", "build": "GNU", "version": "5.1.8", "isDefault": true, "schemaVersion": "2022.8.16" }, "properties": [], "model": { "type": "unknown", "subtype": "unknown", "method": { "type": "unknown", "subtype": "unknown", "data": {} } }, "units": [{ "type": "execution", "name": "prepare-neb-images", "head": true, "results": [], "monitors": [{ "name": "standard_output" }], "flowchartId": "dc397ead-54ad-513b-992e-aedd54576409", "preProcessors": [], "postProcessors": [], "application": { "name": "shell", "shortName": "sh", "summary": "Shell Script", "build": "GNU", "version": "5.1.8", "isDefault": true, "schemaVersion": "2022.8.16" }, "executable": { "isDefault": true, "monitors": ["standard_output"], "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { "input": [{ "name": "bash_vasp_prepare_neb_images.sh" }], "monitors": ["standard_output"], "applicationName": "shell", "executableName": "sh", "name": "bash_vasp_prepare_neb_images", "schemaVersion": "2022.8.16", "isDefault": false }, "status": "idle", "statusTrack": [], "tags": [], "input": [{ "content": "#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < 00/POSCAR < 01/POSCAR <=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema"}],"isDefault":false,"monitors":[],"name":"Set Average ESP Value","operand":"AVG_ESP_INTERFACE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},{"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"BS + Avg ESP (interface left)","properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"0bd31760-f6e4-5826-b282-882c06c97f94","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Material Index (Interface left)","next":"3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08","operand":"MATERIAL_INDEX","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"1"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap-left","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap-left","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-left"}],"isDefault":false,"monitors":[],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Set Valence Band Maximum","next":"dfc4f1c5-5856-588a-99df-6d5fb46bb429","operand":"VBM_LEFT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"dfc4f1c5-5856-588a-99df-6d5fb46bb429","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","next":"b1bb2b3e-3197-5bcd-85b0-959cc357c8d3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"b1bb2b3e-3197-5bcd-85b0-959cc357c8d3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential-left","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average_potential","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential-left","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-left"}],"isDefault":false,"monitors":[],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},{"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Find ESP Value (Interface left)","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"generic:processing:find_extrema:scipy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"python-find-extrema-left","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema-left"}],"isDefault":false,"monitors":[],"name":"Set Average ESP Value","operand":"AVG_ESP_LEFT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},{"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"BS + Avg ESP (interface right)","properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"a05809d1-cc0d-5a0b-bf5e-d43b90a6ac4b","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Material Index (Interface right)","next":"b89d6348-3915-5c24-9fbb-350bc98ac708","operand":"MATERIAL_INDEX","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"2"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"b89d6348-3915-5c24-9fbb-350bc98ac708","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap-right","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap-right","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-right"}],"isDefault":false,"monitors":[],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Set Valence Band Maximum","next":"bc3f514c-4bed-521b-85a3-4e0edfdc3585","operand":"VBM_RIGHT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"bc3f514c-4bed-521b-85a3-4e0edfdc3585","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","next":"28bb682d-d287-5beb-8a67-826449c474ee","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"28bb682d-d287-5beb-8a67-826449c474ee","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential-right","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average_potential","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential-right","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-right"}],"isDefault":false,"monitors":[],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},{"_id":"736295e8-2ee0-5974-83bc-362061ac0688","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Find ESP Value (Interface right)","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"generic:processing:find_extrema:scipy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"python-find-extrema-right","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema-right"}],"isDefault":false,"monitors":[],"name":"Set Average ESP Value","operand":"AVG_ESP_RIGHT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Calculate VBO","properties":["valence_band_offset"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Difference of valence band maxima","next":"2626f7bb-d392-5fd4-ab71-329b508de347","operand":"VBM_DIFF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"VBM_LEFT - VBM_RIGHT"},{"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Difference of macroscopically averaged ESP in bulk","next":"b7307787-53e2-599b-ad12-d627b04074b4","operand":"AVG_ESP_DIFF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]"},{"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Lineup of macroscopically averaged ESP in interface","next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","operand":"ESP_LINEUP","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])"},{"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Valence Band Offset","operand":"VALENCE_BAND_OFFSET","postProcessors":[],"preProcessors":[],"results":[{"name":"valence_band_offset"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))"}]}],"units":[{"_id":"9c65d03e-6a30-58f3-947a-f174342be0c3","flowchartId":"fd622b5c-5c02-594e-b582-b245c17ca9a4","isDefault":false,"monitors":[],"name":"BS + Avg ESP (Interface)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"subworkflow"},{"_id":"ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7","flowchartId":"ad3b1e4c-5965-5605-a067-dd0c59907c4b","isDefault":false,"monitors":[],"name":"Find ESP Values (Interface)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","flowchartId":"8d5b4734-edfd-55cc-ad80-aaa72487398d","isDefault":false,"monitors":[],"name":"BS + Avg ESP (interface left)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","flowchartId":"102ec582-5b75-52f5-8b39-19ca725ed47a","isDefault":false,"monitors":[],"name":"Find ESP Value (Interface left)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","flowchartId":"603c45db-93aa-54ce-a7fe-6e9b65b0037d","isDefault":false,"monitors":[],"name":"BS + Avg ESP (interface right)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"736295e8-2ee0-5974-83bc-362061ac0688","flowchartId":"e3444d35-cc41-59f5-8481-78d0c383b84e","isDefault":false,"monitors":[],"name":"Find ESP Value (Interface right)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","flowchartId":"0e0b141a-39ca-52bc-9094-e5f96dc72f39","isDefault":false,"monitors":[],"name":"Calculate VBO","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/variable_cell_relaxation.json":{"_id":"c45dcef1-d16b-59d1-9318-cedd0b1acf08","application":{"name":"espresso"},"isDefault":false,"name":"Variable-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Variable-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","systemName":"espresso-variable-cell-relaxation","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"tags":["variable-cell_relaxation"],"units":[{"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","flowchartId":"8f6e9590-6a87-584b-abd7-1fb98253054c","isDefault":false,"monitors":[],"name":"Variable-cell Relaxation","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"subworkflow"}],"workflows":[]},"espresso/wavefunction_amplitude.json":{"_id":"196d364a-5a30-549b-a898-8b9704b50ff1","application":{"name":"espresso"},"isDefault":false,"name":"Wavefunction Amplitude","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Wavefunction Amplitude","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-scf","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"extract-band-energies","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"band_structure"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"extract-band-energies","head":false,"input":[{"name":"band_structure","scope":"pw-scf"}],"isDefault":false,"monitors":[],"name":"Extract Band Energies","next":"indices-below-fermi","operand":"band_energies","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]"},{"flowchartId":"indices-below-fermi","head":false,"input":[{"name":"fermi_energy","scope":"pw-scf"}],"isDefault":false,"monitors":[],"name":"Find Indices Below Fermi","next":"8771dc7f-878e-5f13-a840-a3a416854f1e","operand":"indices_below_fermi","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]"},{"flowchartId":"8771dc7f-878e-5f13-a840-a3a416854f1e","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Store Band Below EF","next":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","operand":"KBAND_VALUE_BELOW_EF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1"},{"flowchartId":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Select Band","next":"pp-wfn","operand":"KBAND_VALUE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"KBAND_VALUE_BELOW_EF"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_wfn","postProcessors":[],"preProcessors":[],"results":[{"name":"wavefunction_amplitude"}],"schemaVersion":"2022.8.16"},"flowchartId":"pp-wfn","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_wfn.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_wfn","postProcessors":[],"preProcessors":[],"results":[{"name":"wavefunction_amplitude"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Plot Wavefunction","properties":["file_content"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"plot_wavefunction","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"57fca898-8e8b-5ef2-81a5-9d2b612bc18d","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"plot WFN","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"tags":["wfn","wfn_plot"],"units":[{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","flowchartId":"36467db9-279f-52a3-a6ef-ffdc26d875ed","isDefault":false,"monitors":[],"name":"Wavefunction Amplitude","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"subworkflow"},{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","flowchartId":"4ce49281-e731-550e-af66-6d2408db8237","isDefault":false,"monitors":[],"name":"Plot Wavefunction","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/zero_point_energy.json":{"_id":"3158c78d-58bb-5675-8c7f-6f2337061015","application":{"name":"espresso"},"isDefault":false,"name":"Zero Point Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Zero Point Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"107595d1-490f-53a2-8432-7f8a12f14d96","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_gamma","postProcessors":[],"preProcessors":[],"results":[{"name":"zero_point_energy"}],"schemaVersion":"2022.8.16"},"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_zpe","postProcessors":[],"preProcessors":[],"results":[{"name":"zero_point_energy"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","flowchartId":"d906bd20-eb92-5a01-a0e2-c81a2d9b2a41","isDefault":false,"monitors":[],"name":"Zero Point Energy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"subworkflow"}],"workflows":[]},"nwchem/total_energy.json":{"_id":"937fbac8-2dec-5fb1-a46f-b8a0cc3d3d05","application":{"name":"nwchem"},"isDefault":false,"name":"Total Energy","properties":["total_energy","total_energy_contributions"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","application":{"build":"GNU","isDefault":true,"name":"nwchem","schemaVersion":"2022.8.16","shortName":"nwchem","summary":"NWChem","version":"7.0.2"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"pople","type":"localorbital"},"subtype":"gga","type":"dft"},"name":"Total Energy","properties":["total_energy","total_energy_contributions"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"nwchem","schemaVersion":"2022.8.16","shortName":"nwchem","summary":"NWChem","version":"7.0.2"},"context":[],"executable":{"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem","postProcessors":[{"name":"error_handler"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"schemaVersion":"2022.8.16"},"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","flowchartId":"6059d61a-6a92-5657-9130-02208639aff8","isDefault":false,"monitors":[],"name":"Total Energy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"subworkflow"}],"workflows":[]},"python/ml/classification_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","application":{"name":"python"},"isDefault":false,"name":"Python ML Train Classification","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"schemaVersion":"2022.8.16","units":[{"flowchartId":"head-set-predict-status","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Dataset","next":"head-branch-on-predict-status","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"isDefault":false,"maxOccurrences":100,"monitors":[],"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"flowchartId":"end-of-ml-train-head","head":false,"input":[],"isDefault":false,"monitors":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:random_forest_classification:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:roc_curve:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ROC Curve Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","isDefault":false,"monitors":[],"name":"Set Up the Job","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"subworkflow"},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","isDefault":false,"monitors":[],"name":"Machine Learning","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/ml/clustering_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","application":{"name":"python"},"isDefault":false,"name":"Python ML Train Clustering","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"schemaVersion":"2022.8.16","units":[{"flowchartId":"head-set-predict-status","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Dataset","next":"head-branch-on-predict-status","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"isDefault":false,"maxOccurrences":100,"monitors":[],"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"flowchartId":"end-of-ml-train-head","head":false,"input":[],"isDefault":false,"monitors":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:random_forest_classification:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:roc_curve:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ROC Curve Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","isDefault":false,"monitors":[],"name":"Set Up the Job","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"subworkflow"},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","isDefault":false,"monitors":[],"name":"Machine Learning","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/ml/regression_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","application":{"name":"python"},"isDefault":false,"name":"Python ML Train Regression","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"schemaVersion":"2022.8.16","units":[{"flowchartId":"head-set-predict-status","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Dataset","next":"head-branch-on-predict-status","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"isDefault":false,"maxOccurrences":100,"monitors":[],"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"flowchartId":"end-of-ml-train-head","head":false,"input":[],"isDefault":false,"monitors":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:multilayer_perceptron:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:parity_plot:matplotlib","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Parity Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","isDefault":false,"monitors":[],"name":"Set Up the Job","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"subworkflow"},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","isDefault":false,"monitors":[],"name":"Machine Learning","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/python_script.json":{"_id":"de816646-766b-5f97-b468-0937d4381440","application":{"name":"python"},"isDefault":false,"name":"Python Script","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Python Script","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","flowchartId":"c50e28b2-a0c5-5324-8b6f-e99b5a546bd8","isDefault":false,"monitors":[],"name":"Python Script","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"subworkflow"}],"workflows":[]},"shell/batch_espresso_pwscf.json":{"_id":"e0046fb4-37db-5732-bf81-c48e13081a4c","application":{"name":"shell"},"isDefault":false,"name":"Shell Batch Job (Espresso PWSCF)","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Batch Job (Espresso PWSCF)","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"job_espresso_pw_scf","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","flowchartId":"d884e8f7-7acf-5a03-bc9a-186903bdaa0e","isDefault":false,"monitors":[],"name":"Shell Batch Job (Espresso PWSCF)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"subworkflow"}],"workflows":[]},"shell/hello_world.json":{"_id":"d2fd444c-06b4-5d66-baeb-449c680ae1bf","application":{"name":"shell"},"isDefault":false,"name":"Shell Script","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Hello World","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","flowchartId":"319307c2-bf22-5bf2-b4e9-a4cdf671b786","isDefault":false,"monitors":[],"name":"Shell Hello World","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"subworkflow"}],"workflows":[]},"vasp/band_gap.json":{"_id":"1a358471-0a73-5fcb-ad3c-7a8079029c86","application":{"name":"vasp"},"isDefault":false,"name":"Band Gap","properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Gap","properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"f0d65517-9592-5bc8-948e-a0851a766cbb","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"schemaVersion":"2022.8.16"},"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","flowchartId":"db3b83ea-0ef5-594c-89a8-bde38dbc6105","isDefault":false,"monitors":[],"name":"Band Gap","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"subworkflow"}],"workflows":[]},"vasp/band_structure.json":{"_id":"25b0ad08-87bb-5400-bea4-acd5fe2163c0","application":{"name":"vasp"},"isDefault":false,"name":"Band Structure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","flowchartId":"c573187f-a8bb-5084-9fcf-1560bf4a7786","isDefault":false,"monitors":[],"name":"Band Structure","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"subworkflow"}],"workflows":[]},"vasp/band_structure_dos.json":{"_id":"c8338d40-3c6e-5581-b03c-d7fb5cbb8df5","application":{"name":"vasp"},"isDefault":false,"name":"Band Structure + Density of States","properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"d38fea11-9781-5151-8dae-d705381498be","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure + Density of States","properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"d38fea11-9781-5151-8dae-d705381498be","flowchartId":"8a098bb9-73b1-5e84-bfc7-b783e02d0f53","isDefault":false,"monitors":[],"name":"Band Structure + Density of States","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"subworkflow"}],"workflows":[]},"vasp/dos.json":{"_id":"629a79fb-a03f-5e34-b2ce-9c735e8ef6c0","application":{"name":"vasp"},"isDefault":false,"name":"Density of States","properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Density of States","properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","flowchartId":"3e64fdb4-ab5b-52a0-a1d5-51343c49481c","isDefault":false,"monitors":[],"name":"Density of States","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"subworkflow"}],"workflows":[]},"vasp/fixed_cell_relaxation.json":{"_id":"cb69418c-2f6c-551d-af81-0cf20ec1113d","application":{"name":"vasp"},"isDefault":false,"name":"Fixed-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Fixed-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","postProcessors":[{"name":"prepare_restart"}],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","postProcessors":[{"name":"prepare_restart"}],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","flowchartId":"0de8c4c8-b722-5cd2-ae68-b484262e0a01","isDefault":false,"monitors":[],"name":"Fixed-cell Relaxation","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"subworkflow"}],"workflows":[]},"vasp/kpoint_convergence.json":{"_id":"fcf105f9-5ae7-5c32-a6b3-e3579cbdf39a","application":{"name":"vasp"},"isDefault":false,"name":"K-point Convergence","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"K-point Convergence","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"init-tolerance","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Init tolerance","next":"init-increment","operand":"TOL","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0.00001},{"flowchartId":"init-increment","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init increment","next":"init-result","operand":"INC","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"flowchartId":"init-result","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init result","next":"init-parameter","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0},{"flowchartId":"init-parameter","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init parameter","next":"vasp-kpoint-convergence","operand":"PARAMETER","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"vasp-kpoint-convergence","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","next":"store-result","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"store-result","head":false,"input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"isDefault":false,"monitors":[],"name":"store result","next":"check-convergence","operand":"RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"else":"update-result","flowchartId":"check-convergence","head":false,"input":[],"isDefault":false,"maxOccurrences":50,"monitors":[],"name":"check convergence","next":"update-result","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","status":"idle","statusTrack":[],"tags":[],"then":"convergence-is-reached","type":"condition"},{"flowchartId":"update-result","head":false,"input":[{"name":"RESULT","scope":"global"}],"isDefault":false,"monitors":[],"name":"update result","next":"increment-parameter","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"RESULT"},{"flowchartId":"increment-parameter","head":false,"input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"isDefault":false,"monitors":[],"name":"increment parameter","next":"vasp-kpoint-convergence","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER+INC"},{"flowchartId":"convergence-is-reached","head":false,"input":[{"name":"PARAMETER","scope":"global"}],"isDefault":false,"monitors":[],"name":"exit","operand":"PARAMETER","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER"}]}],"units":[{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","flowchartId":"a34eec2c-cdb2-537d-88c0-ed1d7b205879","isDefault":false,"monitors":[],"name":"K-point Convergence","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"subworkflow"}],"workflows":[]},"vasp/neb.json":{"_id":"2973908e-21ae-5424-afc9-ccb3fde477d8","application":{"name":"vasp"},"isDefault":false,"name":"Nudged Elastic Band (NEB)","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"compute":{"arguments":{"nband":1,"ndiag":1,"nimage":1,"npools":1,"ntg":1},"cluster":{"fqdn":""},"isRestartable":true,"nodes":1,"notify":"n","ppn":1,"queue":"D","timeLimit":"01:00:00","timeLimitType":"per single attempt"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Initial/Final Total Energies","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","next":"e65a17ce-10c8-5710-ad4d-fb3d42434091","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"isDraft":false,"isMultiMaterial":true,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Prepare Directories","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bash_vasp_prepare_neb_images","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < 0 else 1"},"type":"assignment"},{"config":{"name":"Select Band","operand":"KBAND_VALUE","value":"KBAND_VALUE_BELOW_EF"},"type":"assignment"},{"attributes":{"results":[{"name":"wavefunction_amplitude"}]},"config":{"execName":"pp.x","flavorName":"pp_wfn","flowchartId":"pp-wfn","input":[{"name":"KBAND_VALUE"}],"name":"pp_wfn"},"type":"executionBuilder"}]},"zero_point_energy":{"__path__":"zero_point_energy","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Zero Point Energy","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"type":"executionBuilder"},{"config":{"execName":"ph.x","flavorName":"ph_gamma","name":"ph_zpe"},"type":"executionBuilder"}]}},"nwchem":{"total_energy":{"__path__":"total_energy","application":{"name":"nwchem","version":"7.0.2"},"method":{"name":"LocalOrbitalMethod"},"model":{"name":"DFTModel"},"name":"Total Energy","units":[{"config":{"execName":"nwchem","flavorName":"nwchem_total_energy","name":"nwchem_total_energy"},"functions":{"head":true},"type":"executionBuilder"}]}},"python":{"classification_tail":{"__path__":"ml/classification_tail","application":{"name":"python","version":"3.10.13"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Machine Learning","units":[{"attributes":{"enableRender":true},"config":{"execName":"python","flavorName":"pyml:setup_variables_packages","name":"Setup Variables and Packages"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:read_csv:pandas","name":"Data Input"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:train_test_split:sklearn","name":"Train Test Split"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:pre_processing:standardization:sklearn","name":"Data Standardize"},"type":"executionBuilder"},{"attributes":{"results":[{"name":"workflow:pyml_predict"}],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"]},"config":{"execName":"python","flavorName":"pyml:model:random_forest_classification:sklearn","name":"Model Train and Predict"},"type":"executionBuilder"},{"attributes":{"postProcessors":[{"name":"remove_virtual_environment"}],"results":[{"name":"file_content"}],"tags":["remove-all-results"]},"config":{"execName":"python","flavorName":"pyml:post_processing:roc_curve:sklearn","name":"ROC Curve Plot"},"type":"executionBuilder"}]},"clustering_tail":{"__path__":"ml/clustering_tail","application":{"name":"python","version":"3.10.13"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Machine Learning","units":[{"attributes":{"enableRender":true},"config":{"execName":"python","flavorName":"pyml:setup_variables_packages","name":"Setup Variables and Packages"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:read_csv:pandas","name":"Data Input"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:train_test_split:sklearn","name":"Train Test Split"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:pre_processing:standardization:sklearn","name":"Data Standardize"},"type":"executionBuilder"},{"attributes":{"results":[{"name":"workflow:pyml_predict"}],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"]},"config":{"execName":"python","flavorName":"pyml:model:k_means_clustering:sklearn","name":"Model Train and Predict"},"type":"executionBuilder"},{"attributes":{"postProcessors":[{"name":"remove_virtual_environment"}],"results":[{"name":"file_content"},{"name":"file_content"},{"name":"file_content"}],"tags":["remove-all-results"]},"config":{"execName":"python","flavorName":"pyml:post_processing:pca_2d_clusters:matplotlib","name":"2D PCA Clusters Plot"},"type":"executionBuilder"}]},"python_script":{"__path__":"python_script","application":{"name":"python","version":"3.10.13"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Python Script","units":[{"config":{"execName":"python","flavorName":"hello_world","name":"python"},"type":"executionBuilder"}]},"regression_tail":{"__path__":"ml/regression_tail","application":{"name":"python","version":"3.10.13"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Machine Learning","units":[{"attributes":{"enableRender":true},"config":{"execName":"python","flavorName":"pyml:setup_variables_packages","name":"Setup Variables and Packages"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:read_csv:pandas","name":"Data Input"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:train_test_split:sklearn","name":"Train Test Split"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:pre_processing:standardization:sklearn","name":"Data Standardize"},"type":"executionBuilder"},{"attributes":{"results":[{"name":"workflow:pyml_predict"}],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"]},"config":{"execName":"python","flavorName":"pyml:model:multilayer_perceptron:sklearn","name":"Model Train and Predict"},"type":"executionBuilder"},{"attributes":{"postProcessors":[{"name":"remove_virtual_environment"}],"results":[{"name":"file_content"}],"tags":["remove-all-results"]},"config":{"execName":"python","flavorName":"pyml:post_processing:parity_plot:matplotlib","name":"Parity Plot"},"type":"executionBuilder"}]},"train_head":{"__path__":"ml/train_head","application":{"name":"python","version":"3.10.13"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Set Up the Job","units":[{"config":{"flowchartId":"head-set-predict-status","name":"Set Workflow Mode","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","tags":["pyml:workflow-type-setter"],"value":"False"},"type":"assignment"},{"config":{"enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""},"type":"object_storage"}],"name":"Fetch Dataset","source":"object_storage"},"type":"io"},{"config":{"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"name":"Train or Predict?","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","then":"head-fetch-trained-model"},"type":"condition"},{"config":{"enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""},"type":"object_storage"}],"name":"Fetch Trained Model as file","source":"object_storage","tags":["set-io-unit-filenames"]},"type":"io"},{"config":{"flowchartId":"end-of-ml-train-head","name":"End Setup","operand":"IS_SETUP_COMPLETE","value":"True"},"type":"assignment"}]}},"shell":{"batch_espresso_pwscf":{"__path__":"batch_espresso_pwscf","application":{"name":"shell","version":"5.1.8"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Shell Batch Job (Espresso PWSCF)","units":[{"config":{"execName":"sh","flavorName":"job_espresso_pw_scf","name":"shell"},"type":"executionBuilder"}]},"hello_world":{"__path__":"hello_world","application":{"name":"shell","version":"5.1.8"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Shell Hello World","units":[{"config":{"execName":"sh","flavorName":"hello_world","name":"shell"},"type":"executionBuilder"}]}},"vasp":{"band_gap":{"__path__":"band_gap","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Band Gap","units":[{"config":{"execName":"vasp","flavorName":"vasp","name":"vasp"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"execName":"vasp","flavorName":"vasp_nscf","name":"vasp_nscf"},"type":"executionBuilder"}]},"band_structure":{"__path__":"band_structure","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Band Structure","units":[{"config":{"execName":"vasp","flavorName":"vasp","name":"vasp"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"execName":"vasp","flavorName":"vasp_bands","name":"vasp_bands"},"type":"executionBuilder"}]},"band_structure_dos":{"__path__":"band_structure_dos","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Band Structure + Density of States","units":[{"config":{"execName":"vasp","flavorName":"vasp","name":"vasp"},"functions":{"addResults":[{"name":"density_of_states"}],"head":true},"type":"executionBuilder"},{"config":{"execName":"vasp","flavorName":"vasp_bands","name":"vasp_bands"},"type":"executionBuilder"}]},"dos":{"__path__":"dos","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Density of States","units":[{"config":{"execName":"vasp","flavorName":"vasp","name":"vasp"},"functions":{"addResults":[{"name":"density_of_states"}],"head":true},"type":"executionBuilder"}]},"fixed_cell_relaxation":{"__path__":"fixed_cell_relaxation","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Fixed-cell Relaxation","units":[{"config":{"execName":"vasp","flavorName":"vasp_relax","name":"vasp_relax"},"functions":{"head":true},"type":"executionBuilder"}]},"initial_final_total_energies":{"__path__":"initial_final_total_energies","application":{"name":"vasp","version":"5.4.4"},"config":{"functions":{"setDefaultCompute":null},"isMultiMaterial":true},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Initial/Final Total Energies","units":[{"config":{"execName":"vasp","flavorName":"vasp_neb_initial","name":"vasp_neb_initial"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"execName":"vasp","flavorName":"vasp_neb_final","name":"vasp_neb_final"},"type":"executionBuilder"}]},"kpoint_convergence":{"__path__":"kpoint_convergence","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"K-point Convergence","units":[{"config":{"flowchartId":"init-tolerance","name":"Init tolerance","operand":"TOL","value":0.00001},"type":"assignment"},{"config":{"flowchartId":"init-increment","name":"Init increment","operand":"INC","value":1},"type":"assignment"},{"config":{"flowchartId":"init-result","name":"Init result","operand":"PREV_RESULT","value":0},"type":"assignment"},{"config":{"flowchartId":"init-parameter","name":"Init parameter","operand":"PARAMETER","value":1},"type":"assignment"},{"config":{"execName":"vasp","flavorName":"vasp_kpt_conv","flowchartId":"vasp-kpoint-convergence","name":"vasp_kpt_conv"},"type":"executionBuilder"},{"config":{"flowchartId":"store-result","input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"name":"store result","operand":"RESULT","value":"total_energy"},"type":"assignment"},{"config":{"else":"update-result","flowchartId":"check-convergence","maxOccurrences":50,"name":"check convergence","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","then":"convergence-is-reached"},"type":"condition"},{"config":{"flowchartId":"update-result","input":[{"name":"RESULT","scope":"global"}],"name":"update result","operand":"PREV_RESULT","value":"RESULT"},"type":"assignment"},{"config":{"flowchartId":"increment-parameter","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"name":"increment parameter","next":"vasp-kpoint-convergence","operand":"PREV_RESULT","value":"PARAMETER+INC"},"type":"assignment"},{"config":{"flowchartId":"convergence-is-reached","input":[{"name":"PARAMETER","scope":"global"}],"name":"exit","operand":"PARAMETER","value":"PARAMETER"},"type":"assignment"}]},"neb_subworkflow":{"__path__":"neb_subworkflow","application":{"name":"vasp","version":"5.4.4"},"config":{"isMultiMaterial":true},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Nudged Elastic Band (NEB)","units":[{"config":{"execName":"vasp","flavorName":"vasp_neb","name":"vasp_neb"},"type":"executionBuilder"}]},"prepare_images":{"__path__":"prepare_images","application":{"name":"shell","version":"5.1.8"},"config":{"isMultiMaterial":true},"method":{"name":"Method"},"model":{"name":"Model"},"name":"Prepare Directories","units":[{"config":{"execName":"sh","flavorName":"bash_vasp_prepare_neb_images","name":"prepare-neb-images"},"type":"executionBuilder"}]},"recalculate_bands":{"__path__":"recalculate_bands","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Recalculate Bands","units":[{"config":{"execName":"vasp","flavorName":"vasp_bands","name":"vasp_bands"},"functions":{"head":true},"type":"executionBuilder"}]},"surface_energy":{"__path__":"surface_energy","application":{"name":"vasp","version":"5.4.4"},"dynamicSubworkflow":{"name":"surfaceEnergy"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Surface Energy","units":[{"config":{"execName":"vasp","flavorName":"vasp_symprec","name":"vasp_symprec"},"functions":{"head":true},"type":"executionBuilder"}]},"total_energy":{"__path__":"total_energy","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Total Energy","units":[{"config":{"execName":"vasp","flavorName":"vasp","name":"vasp"},"functions":{"head":true},"type":"executionBuilder"}]},"variable_cell_relaxation":{"__path__":"variable_cell_relaxation","application":{"name":"vasp","version":"5.4.4"},"config":{"systemName":"vasp-variable-cell-relaxation"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Variable-cell Relaxation","tags":["variable-cell_relaxation"],"units":[{"config":{"execName":"vasp","flavorName":"vasp_vc_relax","name":"vasp_vc_relax"},"functions":{"head":true},"type":"executionBuilder"}]},"zero_point_energy":{"__path__":"zero_point_energy","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Zero Point Energy","units":[{"config":{"execName":"vasp","flavorName":"vasp_zpe","name":"vasp_zpe"},"functions":{"head":true},"type":"executionBuilder"}]}}},"workflows":{"espresso":{"average_electrostatic_potential":{"__path__":"average_electrostatic_potential","name":"Average Electrostatic Potential","units":[{"name":"average_electrostatic_potential","type":"subworkflow"}]},"band_gap":{"__path__":"band_gap","name":"Band Gap","units":[{"name":"band_gap","type":"subworkflow"}]},"band_gap_dos_hse":{"__path__":"band_gap_dos_hse","name":"Band Gap + DoS - HSE","units":[{"name":"band_gap_hse_dos","type":"subworkflow"}]},"band_structure":{"__path__":"band_structure","name":"Band Structure","units":[{"name":"band_structure","type":"subworkflow"}]},"band_structure_dos":{"__path__":"band_structure_dos","name":"Band Structure + Density of States","units":[{"name":"band_structure_dos","type":"subworkflow"}]},"band_structure_hse":{"__path__":"band_structure_hse","name":"Band Structure - HSE","units":[{"config":{"attributes":{"name":"Preliminary SCF Calculation"}},"name":"pw_scf","type":"subworkflow"},{"name":"espresso_extract_kpoints","type":"subworkflow"},{"config":{"attributes":{"name":"Main HSE Run"}},"name":"band_structure_hse","type":"subworkflow"}]},"band_structure_magn":{"__path__":"band_structure_magn","name":"Bandstructure with spin magnetism - QE","units":[{"config":{"attributes":{"name":"Bandstructure with spin magnetism"}},"name":"band_structure_magn","type":"subworkflow"}]},"band_structure_soc":{"__path__":"band_structure_soc","name":"Bandstructure with SOC - QE","units":[{"config":{"attributes":{"name":"Bandstructure with SOC"}},"name":"band_structure_soc","type":"subworkflow"}]},"dielectric_tensor":{"__path__":"dielectric_tensor","name":"Dielectric Function","units":[{"name":"dielectric_tensor","type":"subworkflow"}]},"dos":{"__path__":"dos","name":"Density of States","units":[{"name":"dos","type":"subworkflow"}]},"electronic_density_mesh":{"__path__":"electronic_density_mesh","name":"Electronic Density Mesh","units":[{"name":"electronic_density_mesh","type":"subworkflow"}]},"esm":{"__path__":"esm","name":"Effective Screening Medium (ESM)","units":[{"name":"esm","type":"subworkflow"}]},"esm_relax":{"__path__":"esm_relax","name":"Effective Screening Medium (ESM) Relax","units":[{"name":"esm_relax","type":"subworkflow"}]},"fixed_cell_relaxation":{"__path__":"fixed_cell_relaxation","name":"Fixed-cell Relaxation","units":[{"name":"fixed_cell_relaxation","type":"subworkflow"}]},"gw_band_structure_band_gap_full_frequency":{"__path__":"gw_band_structure_band_gap_full_frequency","name":"Full Frequency GW Band Structure + Band Gap","units":[{"name":"gw_band_structure_band_gap_full_frequency","type":"subworkflow"}]},"gw_band_structure_band_gap_plasmon_pole":{"__path__":"gw_band_structure_band_gap_plasmon_pole","name":"Plasmon-Pole GW Band Structure + Band Gap","units":[{"name":"gw_band_structure_band_gap_plasmon_pole","type":"subworkflow"}]},"kpoint_convergence":{"__path__":"kpoint_convergence","name":"K-point Convergence","units":[{"name":"kpoint_convergence","type":"subworkflow"}]},"neb":{"__path__":"neb","name":"Nudged Elastic Band (NEB)","units":[{"name":"neb","type":"subworkflow"}]},"phonon_dispersions":{"__path__":"phonon_dispersions","name":"Phonon Dispersions","units":[{"name":"phonon_dispersions","type":"subworkflow"}]},"phonon_dos":{"__path__":"phonon_dos","name":"Phonon Density of States","units":[{"name":"phonon_dos","type":"subworkflow"}]},"phonon_dos_dispersion":{"__path__":"phonon_dos_dispersion","name":"Phonon Density of States + Dispersions","units":[{"name":"phonon_dos_dispersion","type":"subworkflow"}]},"phonon_map":{"__path__":"phonon_map","name":"Phonon Map","units":[{"name":"phononMap","type":"workflow","units":[{"name":"pw_scf","type":"subworkflow"},{"name":"ph_init_qpoints","type":"subworkflow"},{"name":"espresso_xml_get_qpt_irr","type":"subworkflow"}]},{"config":{"functions":{"setDefaultCompute":null},"input":{"name":"Q_POINTS"},"mapUnit":true},"name":"phonon_map_workflow","type":"workflow","units":[{"name":"pre_processor","type":"subworkflow"},{"name":"ph_single_irr_qpt","type":"subworkflow"},{"name":"post_processor","type":"subworkflow"}]},{"name":"phonon_reduce","type":"subworkflow"}]},"recalculate_bands":{"__path__":"recalculate_bands","name":"Recalculate Bands","units":[{"name":"recalculate_bands","type":"subworkflow"}]},"surface_energy":{"__path__":"surface_energy","name":"Surface Energy","units":[{"name":"surface_energy","type":"subworkflow"}]},"total_energy":{"__path__":"total_energy","name":"Total Energy","tags":["default"],"units":[{"name":"total_energy","type":"subworkflow"}]},"valence_band_offset":{"__path__":"valence_band_offset","name":"Valence Band Offset (2D)","units":[{"config":{"attributes":{"name":"BS + Avg ESP (Interface)"}},"name":"average_electrostatic_potential_via_band_structure","type":"subworkflow","unitConfigs":[{"config":{"attributes":{"name":"Set Material Index (Interface)","value":"0"}},"index":0,"type":"assignment"}]},{"config":{"attributes":{"name":"Find ESP Values (Interface)"}},"name":"average_electrostatic_potential_find_minima","type":"subworkflow","unitConfigs":[{"config":{"attributes":{"operand":"AVG_ESP_INTERFACE"}},"index":1,"type":"assignment"}]},{"config":{"attributes":{"name":"BS + Avg ESP (interface left)"}},"name":"average_electrostatic_potential_via_band_structure","type":"subworkflow","unitConfigs":[{"config":{"attributes":{"name":"Set Material Index (Interface left)","value":"1"}},"index":0,"type":"assignment"},{"config":{"attributes":{"flowchartId":"pw-bands-calculate-band-gap-left"}},"index":2,"type":"executionBuilder"},{"config":{"attributes":{"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-left"}]}},"index":3,"type":"assignment"},{"config":{"attributes":{"operand":"VBM_LEFT"}},"index":4,"type":"assignment"},{"config":{"attributes":{"flowchartId":"average-electrostatic-potential-left"}},"index":7,"type":"executionBuilder"},{"config":{"attributes":{"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-left"}]}},"index":8,"type":"assignment"}]},{"config":{"attributes":{"name":"Find ESP Value (Interface left)"}},"name":"average_electrostatic_potential_find_minima","type":"subworkflow","unitConfigs":[{"config":{"attributes":{"flowchartId":"python-find-extrema-left"}},"index":0,"type":"executionBuilder"},{"config":{"attributes":{"input":[{"name":"STDOUT","scope":"python-find-extrema-left"}],"operand":"AVG_ESP_LEFT"}},"index":1,"type":"assignment"}]},{"config":{"attributes":{"name":"BS + Avg ESP (interface right)"}},"name":"average_electrostatic_potential_via_band_structure","type":"subworkflow","unitConfigs":[{"config":{"attributes":{"name":"Set Material Index (Interface right)","value":"2"}},"index":0,"type":"assignment"},{"config":{"attributes":{"flowchartId":"pw-bands-calculate-band-gap-right"}},"index":2,"type":"executionBuilder"},{"config":{"attributes":{"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-right"}]}},"index":3,"type":"assignment"},{"config":{"attributes":{"operand":"VBM_RIGHT"}},"index":4,"type":"assignment"},{"config":{"attributes":{"flowchartId":"average-electrostatic-potential-right"}},"index":7,"type":"executionBuilder"},{"config":{"attributes":{"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-right"}]}},"index":8,"type":"assignment"}]},{"config":{"attributes":{"name":"Find ESP Value (Interface right)"}},"name":"average_electrostatic_potential_find_minima","type":"subworkflow","unitConfigs":[{"config":{"attributes":{"flowchartId":"python-find-extrema-right"}},"index":0,"type":"executionBuilder"},{"config":{"attributes":{"input":[{"name":"STDOUT","scope":"python-find-extrema-right"}],"operand":"AVG_ESP_RIGHT"}},"index":1,"type":"assignment"}]},{"name":"valence_band_offset_calc_from_previous_esp_vbm","type":"subworkflow"}]},"variable_cell_relaxation":{"__path__":"variable_cell_relaxation","name":"Variable-cell Relaxation","tags":["variable-cell_relaxation"],"units":[{"name":"variable_cell_relaxation","type":"subworkflow"}]},"wavefunction_amplitude":{"__path__":"wavefunction_amplitude","name":"Wavefunction Amplitude","properties":["atomic_forces","band_structure","fermi_energy","file_content","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"tags":["wfn","wfn_plot"],"units":[{"name":"wavefunction_amplitude","type":"subworkflow"},{"name":"plot_wavefunction","type":"subworkflow"}]},"zero_point_energy":{"__path__":"zero_point_energy","name":"Zero Point Energy","units":[{"name":"zero_point_energy","type":"subworkflow"}]}},"nwchem":{"total_energy":{"__path__":"total_energy","name":"Total Energy","units":[{"name":"total_energy","type":"subworkflow"}]}},"python":{"classification_workflow":{"__path__":"ml/classification_workflow","config":{"attributes":{"isUsingDataset":true}},"name":"Python ML Train Classification","units":[{"name":"train_head","type":"subworkflow"},{"name":"classification_tail","type":"subworkflow"}]},"clustering_workflow":{"__path__":"ml/clustering_workflow","config":{"attributes":{"isUsingDataset":true}},"name":"Python ML Train Clustering","units":[{"name":"train_head","type":"subworkflow"},{"name":"classification_tail","type":"subworkflow"}]},"python_script":{"__path__":"python_script","name":"Python Script","units":[{"name":"python_script","type":"subworkflow"}]},"regression_workflow":{"__path__":"ml/regression_workflow","config":{"attributes":{"isUsingDataset":true}},"name":"Python ML Train Regression","units":[{"name":"train_head","type":"subworkflow"},{"name":"regression_tail","type":"subworkflow"}]}},"shell":{"batch_espresso_pwscf":{"__path__":"batch_espresso_pwscf","name":"Shell Batch Job (Espresso PWSCF)","units":[{"name":"batch_espresso_pwscf","type":"subworkflow"}]},"hello_world":{"__path__":"hello_world","name":"Shell Script","units":[{"name":"hello_world","type":"subworkflow"}]}},"vasp":{"band_gap":{"__path__":"band_gap","name":"Band Gap","units":[{"name":"band_gap","type":"subworkflow"}]},"band_structure":{"__path__":"band_structure","name":"Band Structure","units":[{"name":"band_structure","type":"subworkflow"}]},"band_structure_dos":{"__path__":"band_structure_dos","name":"Band Structure + Density of States","units":[{"name":"band_structure_dos","type":"subworkflow"}]},"dos":{"__path__":"dos","name":"Density of States","units":[{"name":"dos","type":"subworkflow"}]},"fixed_cell_relaxation":{"__path__":"fixed_cell_relaxation","name":"Fixed-cell Relaxation","units":[{"name":"fixed_cell_relaxation","type":"subworkflow"}]},"kpoint_convergence":{"__path__":"kpoint_convergence","name":"K-point Convergence","units":[{"name":"kpoint_convergence","type":"subworkflow"}]},"neb":{"__path__":"neb","name":"Nudged Elastic Band (NEB)","units":[{"name":"initial_final_total_energies","type":"subworkflow"},{"name":"prepare_images","type":"subworkflow"},{"name":"neb_subworkflow","type":"subworkflow"}]},"recalculate_bands":{"__path__":"recalculate_bands","name":"Recalculate Bands","units":[{"name":"recalculate_bands","type":"subworkflow"}]},"surface_energy":{"__path__":"surface_energy","name":"Surface Energy","units":[{"name":"surface_energy","type":"subworkflow"}]},"total_energy":{"__path__":"total_energy","name":"Total Energy","units":[{"name":"total_energy","type":"subworkflow"}]},"variable_cell_relaxation":{"__path__":"variable_cell_relaxation","name":"Variable-cell Relaxation","tags":["variable-cell_relaxation"],"units":[{"name":"variable_cell_relaxation","type":"subworkflow"}]},"zero_point_energy":{"__path__":"zero_point_energy","name":"Zero Point Energy","units":[{"name":"zero_point_energy","type":"subworkflow"}]}}}} diff --git a/dist/js/types/application.d.ts b/dist/js/types/application.d.ts index a303b426..5e3b6d12 100644 --- a/dist/js/types/application.d.ts +++ b/dist/js/types/application.d.ts @@ -1,19 +1,24 @@ import { ApplicationSchema, ExecutableSchema, FlavorSchema } from "@mat3ra/esse/dist/js/types"; -type OptionalExecutableSchema = Partial; -export type ApplicationVersionInfo = Pick; -export type ApplicationVersionsMapType = Pick & { +type VersionFields = "isDefault" | "build" | "hasAdvancedComputeOptions" | "version"; +type ApplicationFields = "name" | "shortName" | "summary" | "isLicensed"; +export type ApplicationVersion = Pick; +export type ApplicationConfigItem = Pick & { defaultVersion: string; - versions: ApplicationVersionInfo[]; + versions: ApplicationVersion[]; }; export type ApplicationVersionsMapByApplicationType = { - [key: string]: ApplicationVersionsMapType; + [key: string]: ApplicationConfigItem; }; type OptionalFlavorSchema = Partial; -type Flavor = Pick & Pick; -export type ExecutableTreeItem = Pick & Pick & { +type RequiredFlavorFields = "input" | "monitors" | "applicationName" | "executableName" | "isDefault"; +type OptionalFlavorFields = "results"; +type FlavorConfig = Pick & Pick; +type OptionalExecutableSchema = Partial; +type RequiredExecutableFields = "hasAdvancedComputeOptions" | "isDefault" | "monitors" | "results"; +type OptionalExecutableFields = "postProcessors"; +export type ExecutableTreeItem = Pick & Pick & { + flavors: Record; supportedApplicationVersions?: ApplicationSchema["version"][]; - flavors?: Record; - [key: string]: any; }; export type ApplicationExecutableTree = Record>; export {}; diff --git a/dist/js/ui/methodTree.json b/dist/js/ui/methodTree.json index 5167eb82..e37e7408 100644 --- a/dist/js/ui/methodTree.json +++ b/dist/js/ui/methodTree.json @@ -1 +1 @@ -{ "path": "/", "data": null, "children": [{ "path": "/linalg", "data": { "key": "tier1", "value": "linalg", "name": "Linear Algebra" }, "children": [{ "path": "/linalg/diag", "data": { "key": "tier2", "value": "diag", "name": "Diagonalization" }, "children": [{ "path": "/linalg/diag/davidson", "data": { "key": "type", "value": "davidson", "name": "Davidson Diagonalization" } }] }] }, { "path": "/qm", "data": { "key": "tier1", "value": "qm", "name": "Quantum-Mechanical" }, "children": [{ "path": "/qm/wf", "data": { "key": "tier2", "value": "wf", "name": "Wave Function" }, "children": [{ "path": "/qm/wf/ao", "data": { "key": "type", "value": "ao", "name": "Atomic Orbital" }, "children": [{ "path": "/qm/wf/ao/pople", "data": { "key": "subtype", "value": "pople", "name": "Pople Basis" }, "staticOptions": [{ "key": "basisSlug", "values": ["3-21G", "6-31G", "6-311G"] }] }] }, { "path": "/qm/wf/pw", "data": { "key": "type", "value": "pw", "name": "Plane Wave" } }, { "path": "/qm/wf/psp", "data": { "key": "type", "value": "psp", "name": "Pseudopotential" }, "children": [{ "path": "/qm/wf/psp/us", "data": { "key": "subtype", "value": "us", "name": "Ultra-Soft" } }, { "path": "/qm/wf/psp/nc", "data": { "key": "subtype", "value": "nc", "name": "Norm-conserving" } }, { "path": "/qm/wf/psp/nc-fr", "data": { "key": "subtype", "value": "nc-fr", "name": "Norm-conserving Fully-relativistic" } }, { "path": "/qm/wf/psp/paw", "data": { "key": "subtype", "value": "paw", "name": "Projector-Augmented Wave" } }] }, { "path": "/qm/wf/smearing", "data": { "key": "type", "value": "smearing", "name": "Occupation Number Smearing" }, "children": [{ "path": "/qm/wf/smearing/gaussian", "data": { "key": "subtype", "value": "gaussian", "name": "Gaussian" } }, { "path": "/qm/wf/smearing/methfessel-paxton", "data": { "key": "subtype", "value": "methfessel-paxton", "name": "Methfessel-Paxton" } }] }, { "path": "/qm/wf/tetrahedron", "data": { "key": "type", "value": "tetrahedron", "name": "Tetrahedron Method" }, "children": [{ "path": "/qm/wf/tetrahedron/linear", "data": { "key": "subtype", "value": "linear", "name": "Linear" } }, { "path": "/qm/wf/tetrahedron/optimized", "data": { "key": "subtype", "value": "optimized", "name": "Optimized (Kawamura)" } }, { "path": "/qm/wf/tetrahedron/bloechl", "data": { "key": "subtype", "value": "bloechl", "name": "Bloechl" } }] }] }] }] } +{"path":"/","data":null,"children":[{"path":"/linalg","data":{"key":"tier1","value":"linalg","name":"Linear Algebra"},"children":[{"path":"/linalg/diag","data":{"key":"tier2","value":"diag","name":"Diagonalization"},"children":[{"path":"/linalg/diag/davidson","data":{"key":"type","value":"davidson","name":"Davidson Diagonalization"}}]}]},{"path":"/qm","data":{"key":"tier1","value":"qm","name":"Quantum-Mechanical"},"children":[{"path":"/qm/wf","data":{"key":"tier2","value":"wf","name":"Wave Function"},"children":[{"path":"/qm/wf/ao","data":{"key":"type","value":"ao","name":"Atomic Orbital"},"children":[{"path":"/qm/wf/ao/pople","data":{"key":"subtype","value":"pople","name":"Pople Basis"},"staticOptions":[{"key":"basisSlug","values":["3-21G","6-31G","6-311G"]}]}]},{"path":"/qm/wf/pw","data":{"key":"type","value":"pw","name":"Plane Wave"}},{"path":"/qm/wf/psp","data":{"key":"type","value":"psp","name":"Pseudopotential"},"children":[{"path":"/qm/wf/psp/us","data":{"key":"subtype","value":"us","name":"Ultra-Soft"}},{"path":"/qm/wf/psp/nc","data":{"key":"subtype","value":"nc","name":"Norm-conserving"}},{"path":"/qm/wf/psp/nc-fr","data":{"key":"subtype","value":"nc-fr","name":"Norm-conserving Fully-relativistic"}},{"path":"/qm/wf/psp/paw","data":{"key":"subtype","value":"paw","name":"Projector-Augmented Wave"}}]},{"path":"/qm/wf/smearing","data":{"key":"type","value":"smearing","name":"Occupation Number Smearing"},"children":[{"path":"/qm/wf/smearing/gaussian","data":{"key":"subtype","value":"gaussian","name":"Gaussian"}},{"path":"/qm/wf/smearing/methfessel-paxton","data":{"key":"subtype","value":"methfessel-paxton","name":"Methfessel-Paxton"}}]},{"path":"/qm/wf/tetrahedron","data":{"key":"type","value":"tetrahedron","name":"Tetrahedron Method"},"children":[{"path":"/qm/wf/tetrahedron/linear","data":{"key":"subtype","value":"linear","name":"Linear"}},{"path":"/qm/wf/tetrahedron/optimized","data":{"key":"subtype","value":"optimized","name":"Optimized (Kawamura)"}},{"path":"/qm/wf/tetrahedron/bloechl","data":{"key":"subtype","value":"bloechl","name":"Bloechl"}}]}]}]}]} diff --git a/dist/js/ui/modelTree.json b/dist/js/ui/modelTree.json index d728d9e1..ca31523b 100644 --- a/dist/js/ui/modelTree.json +++ b/dist/js/ui/modelTree.json @@ -1 +1 @@ -{ "path": "/", "data": null, "children": [{ "path": "/pb", "data": { "key": "tier1", "value": "pb", "name": "Physics-based" }, "children": [{ "path": "/pb/qm", "data": { "key": "tier2", "value": "qm", "name": "Quantum-mechanical" }, "children": [{ "path": "/pb/qm/dft", "data": { "key": "tier3", "value": "dft", "name": "Density Functional Theory" }, "children": [{ "path": "/pb/qm/dft/ksdft", "data": { "key": "type", "value": "ksdft", "name": "Kohn-Sham DFT" }, "children": [{ "path": "/pb/qm/dft/ksdft/lda", "data": { "key": "subtype", "value": "lda", "name": "LDA" }, "staticOptions": [{ "key": "functional", "values": ["pz"], "namesMap": { "pz": "PZ" } }] }, { "path": "/pb/qm/dft/ksdft/gga", "data": { "key": "subtype", "value": "gga", "name": "GGA" }, "staticOptions": [{ "key": "functional", "values": ["pbe", "pbesol"], "namesMap": { "pbe": "PBE", "pbesol": "PBESOL" } }] }, { "path": "/pb/qm/dft/ksdft/hybrid", "data": { "key": "subtype", "value": "hybrid", "name": "Hybrid Functional" }, "staticOptions": [{ "key": "functional", "values": ["hse06", "b3lyp"], "namesMap": { "hse06": "HSE06", "b3lyp": "B3LYP" } }] }] }] }] }] }] } +{"path":"/","data":null,"children":[{"path":"/pb","data":{"key":"tier1","value":"pb","name":"Physics-based"},"children":[{"path":"/pb/qm","data":{"key":"tier2","value":"qm","name":"Quantum-mechanical"},"children":[{"path":"/pb/qm/dft","data":{"key":"tier3","value":"dft","name":"Density Functional Theory"},"children":[{"path":"/pb/qm/dft/ksdft","data":{"key":"type","value":"ksdft","name":"Kohn-Sham DFT"},"children":[{"path":"/pb/qm/dft/ksdft/lda","data":{"key":"subtype","value":"lda","name":"LDA"},"staticOptions":[{"key":"functional","values":["pz"],"namesMap":{"pz":"PZ"}}]},{"path":"/pb/qm/dft/ksdft/gga","data":{"key":"subtype","value":"gga","name":"GGA"},"staticOptions":[{"key":"functional","values":["pbe","pbesol"],"namesMap":{"pbe":"PBE","pbesol":"PBESOL"}}]},{"path":"/pb/qm/dft/ksdft/hybrid","data":{"key":"subtype","value":"hybrid","name":"Hybrid Functional"},"staticOptions":[{"key":"functional","values":["hse06","b3lyp"],"namesMap":{"hse06":"HSE06","b3lyp":"B3LYP"}}]}]}]}]}]}]} diff --git a/dist/js/ui/schemas.json b/dist/js/ui/schemas.json index 33e9895f..1a4e6904 100644 --- a/dist/js/ui/schemas.json +++ b/dist/js/ui/schemas.json @@ -1 +1 @@ -{ "categories": { "tier1": { "ui:title": "Tier 1" }, "tier2": { "ui:title": "Tier 2" }, "tier3": { "ui:title": "Tier 3" }, "type": { "ui:title": "Type" }, "subtype": { "ui:title": "Subtype" } }, "modelParameters": { "functional": { "ui:title": "Functional" }, "dispersionCorrection": { "ui:title": "Dispersion Correction" }, "spinOrbitCoupling": { "ui:title": "Spin-Orbit Coupling" }, "hubbardType": { "ui:title": "Hubbard Term" }, "spinPolarization": { "ui:title": "Spin-Polarization" } }, "methodParameters": { "basisSlug": { "ui:title": "Basis Set" } } } +{"categories":{"tier1":{"ui:title":"Tier 1"},"tier2":{"ui:title":"Tier 2"},"tier3":{"ui:title":"Tier 3"},"type":{"ui:title":"Type"},"subtype":{"ui:title":"Subtype"}},"modelParameters":{"functional":{"ui:title":"Functional"},"dispersionCorrection":{"ui:title":"Dispersion Correction"},"spinOrbitCoupling":{"ui:title":"Spin-Orbit Coupling"},"hubbardType":{"ui:title":"Hubbard Term"},"spinPolarization":{"ui:title":"Spin-Polarization"}},"methodParameters":{"basisSlug":{"ui:title":"Basis Set"}}} diff --git a/dist/js/utils/applicationFilter.d.ts b/dist/js/utils/applicationFilter.d.ts index dba84876..cd3f4d06 100644 --- a/dist/js/utils/applicationFilter.d.ts +++ b/dist/js/utils/applicationFilter.d.ts @@ -1,6 +1,6 @@ import { FilterTree } from "../types/applicationFilter"; export declare enum FilterMode { - ANY_MATCH = "ANY",// OR logic - at least one filter must match (for models) + ANY_MATCH = "ANY", ALL_MATCH = "ALL" } export declare abstract class ApplicationFilterStandata { diff --git a/dist/js/utils/applicationFilter.js b/dist/js/utils/applicationFilter.js index 5b242991..51a19635 100644 --- a/dist/js/utils/applicationFilter.js +++ b/dist/js/utils/applicationFilter.js @@ -5,7 +5,7 @@ var FilterMode; (function (FilterMode) { FilterMode["ANY_MATCH"] = "ANY"; FilterMode["ALL_MATCH"] = "ALL"; -})(FilterMode || (exports.FilterMode = FilterMode = {})); +})(FilterMode = exports.FilterMode || (exports.FilterMode = {})); function safelyGet(obj, ...args) { let current = obj; // We use for instead of forEach to allow early return on undefined diff --git a/dist/js/utils/applicationVersionMap.d.ts b/dist/js/utils/applicationVersionMap.d.ts index 5e33b383..199475f8 100644 --- a/dist/js/utils/applicationVersionMap.d.ts +++ b/dist/js/utils/applicationVersionMap.d.ts @@ -1,13 +1,13 @@ import { ApplicationSchema } from "@mat3ra/esse/dist/js/types"; -import { ApplicationVersionInfo, ApplicationVersionsMapType } from "../types/application"; -export declare class ApplicationVersionsMap implements ApplicationVersionsMapType { +import { ApplicationConfigItem, ApplicationVersion } from "../types/application"; +export declare class ApplicationVersionsMap implements ApplicationConfigItem { shortName: string; summary: string; isLicensed?: boolean | undefined; defaultVersion: string; - versions: ApplicationVersionInfo[]; - map: ApplicationVersionsMapType; - constructor(config: ApplicationVersionsMapType); + versions: ApplicationVersion[]; + map: ApplicationConfigItem; + constructor(config: ApplicationConfigItem); get name(): string; get nonVersionProperties(): { name: string; @@ -15,7 +15,7 @@ export declare class ApplicationVersionsMap implements ApplicationVersionsMapTyp summary: string; isLicensed?: boolean | undefined; }; - get versionConfigs(): ApplicationVersionInfo[]; + get versionConfigs(): ApplicationVersion[]; get versionConfigsFull(): ApplicationSchema[]; getSlugForVersionConfig(versionConfigFull: ApplicationSchema): string; } diff --git a/dist/js/utils/category.js b/dist/js/utils/category.js index b73baf37..4008f37b 100644 --- a/dist/js/utils/category.js +++ b/dist/js/utils/category.js @@ -1,15 +1,16 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.getCategoryValue = getCategoryValue; -exports.getModelCategoryTags = getModelCategoryTags; +exports.getModelCategoryTags = exports.getCategoryValue = void 0; function getCategoryValue(category) { if (!category) return undefined; return typeof category === "string" ? category : category.slug; } +exports.getCategoryValue = getCategoryValue; function getModelCategoryTags(model) { var _a; const c = model.categories || {}; const typeVal = typeof c.type === "string" ? c.type : (_a = c.type) === null || _a === void 0 ? void 0 : _a.slug; return [c.tier1, c.tier2, c.tier3, typeVal, c.subtype].filter(Boolean); } +exports.getModelCategoryTags = getModelCategoryTags; diff --git a/dist/js/workflow.d.ts b/dist/js/workflow.d.ts index 09064789..545a20b3 100644 --- a/dist/js/workflow.d.ts +++ b/dist/js/workflow.d.ts @@ -22,7 +22,7 @@ type WorkflowStandataRuntimeData = { }; declare abstract class BaseWorkflowStandata extends Standata { +}> extends Standata { static runtimeData: WorkflowStandataRuntimeData; findByApplication(appName: string): T[]; findByApplicationAndName(appName: string, displayName: string): T | undefined; diff --git a/dist/js/workflow.js b/dist/js/workflow.js index 912e2f1e..6d1a72da 100644 --- a/dist/js/workflow.js +++ b/dist/js/workflow.js @@ -13,7 +13,7 @@ var TAGS; (function (TAGS) { TAGS["RELAXATION"] = "variable-cell_relaxation"; TAGS["DEFAULT"] = "default"; -})(TAGS || (exports.TAGS = TAGS = {})); +})(TAGS = exports.TAGS || (exports.TAGS = {})); class BaseWorkflowStandata extends base_1.Standata { findByApplication(appName) { return this.findEntitiesByTags(appName); @@ -21,7 +21,7 @@ class BaseWorkflowStandata extends base_1.Standata { findByApplicationAndName(appName, displayName) { return this.findByApplication(appName).find((e) => (e === null || e === void 0 ? void 0 : e.name) === displayName); } - // NOTE: The WF/SWF returned will have only `name` inside the application object. + // NOTE: The WF/SWF returned will have only `name` inside the application object. getRelaxationByApplication(appName) { const list = this.findEntitiesByTags(TAGS.RELAXATION, appName); return list[0]; diff --git a/package-lock.json b/package-lock.json index fe22fbaa..da871a55 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,16 +15,16 @@ }, "devDependencies": { "@exabyte-io/eslint-config": "2025.5.13-0", - "@mat3ra/ade": "git+https://github.com/Exabyte-io/ade#6d494337d83e1b22fe272ff74cc1b6842a7c6561", + "@mat3ra/ade": "git+https://github.com/Exabyte-io/ade.git#6d494337d83e1b22fe272ff74cc1b6842a7c6561", "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#3b42a844bebd5de65dc3877f7602521af308a09e", - "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse#c6b904537bf86f655a6a1f080a84816094138f37", - "@mat3ra/fixtures": "git+https://github.com/Exabyte-io/fixtures#7501b0dcc28848b48194085685d332828509efdb", - "@mat3ra/made": "2025.12.29-0", - "@mat3ra/mode": "2025.12.25-0", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse.git#be892d203b9f7cf6525270b1a1f6352c7f3fc055", + "@mat3ra/fixtures": "git+https://github.com/Exabyte-io/fixtures.git#7501b0dcc28848b48194085685d332828509efdb", + "@mat3ra/ide": "2025.11.19-0", + "@mat3ra/made": "git+https://github.com/Exabyte-io/made.git#47b3e12a859c45fa72079ed4ddd1675a6a32b4fe", + "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#0fe72a694deeb2d7abd4f17ff9aed110996c2f42", "@mat3ra/standata": "file:./", "@mat3ra/tsconfig": "^2024.6.3-0", "@mat3ra/utils": "2025.12.2-0", - "@mat3ra/wode": "git+https://github.com/Exabyte-io/wode#33471cd073aa6990a8109b247ccd1d62e5cafa65", "@types/chai": "^4.3.5", "@types/js-yaml": "^4.0.5", "@types/mocha": "^10.0.1", @@ -32,6 +32,8 @@ "@types/sprintf-js": "^1.1.4", "@typescript-eslint/eslint-plugin": "^5.56.0", "@typescript-eslint/parser": "^5.56.0", + "ajv": "^8.17.1", + "ajv-formats": "^2.1.1", "babel-eslint": "^10.1.0", "chai": "^4.3.4", "eslint": "7.32.0", @@ -57,6 +59,9 @@ }, "engines": { "node": ">=20.0.0" + }, + "peerDependencies": { + "@mat3ra/esse": "*" } }, "node_modules/@ampproject/remapping": { @@ -118,11 +123,13 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.27.1", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -131,7 +138,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.28.5", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", "dev": true, "license": "MIT", "engines": { @@ -190,12 +199,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.28.5", + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -216,11 +227,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", + "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -314,25 +327,29 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.28.3", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.28.3" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -353,7 +370,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", "dev": true, "license": "MIT", "engines": { @@ -532,11 +551,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.28.5", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.28.5" + "@babel/types": "^7.29.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -1491,7 +1512,9 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.27.1", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2098,29 +2121,33 @@ } }, "node_modules/@babel/template": { - "version": "7.27.2", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.28.5", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", "debug": "^4.3.1" }, "engines": { @@ -2128,7 +2155,9 @@ } }, "node_modules/@babel/types": { - "version": "7.28.5", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", "dev": true, "license": "MIT", "dependencies": { @@ -2331,76 +2360,6 @@ "jsonc-eslint-parser": "^2.1.0" } }, - "node_modules/@exabyte-io/periodic-table.js": { - "version": "2022.6.8-0", - "dev": true, - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "@babel/cli": "7.16.0", - "@babel/core": "7.16.0", - "@babel/eslint-parser": "7.16.3", - "@babel/plugin-proposal-class-properties": "7.16.0", - "@babel/preset-env": "7.16.4", - "@babel/register": "7.16.0", - "underscore": "1.8.3" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@exabyte-io/periodic-table.js/node_modules/@babel/core": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-compilation-targets": "^7.16.0", - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helpers": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@exabyte-io/periodic-table.js/node_modules/@babel/register": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.0", - "source-map-support": "^0.5.16" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@exabyte-io/periodic-table.js/node_modules/underscore": { - "version": "1.8.3", - "dev": true, - "license": "MIT" - }, "node_modules/@humanwhocodes/config-array": { "version": "0.5.0", "dev": true, @@ -2632,8 +2591,8 @@ }, "node_modules/@mat3ra/esse": { "version": "0.0.0", - "resolved": "git+ssh://git@github.com/Exabyte-io/esse.git#c6b904537bf86f655a6a1f080a84816094138f37", - "integrity": "sha512-XHeaEaRtPdR9mpSjfsuRU3NHMicMM7p/5t/w7OuTsnTS10TJ327iSM3uzx4pHm62MqO9ChGrgUZXHoBg7JqCVA==", + "resolved": "git+ssh://git@github.com/Exabyte-io/esse.git#be892d203b9f7cf6525270b1a1f6352c7f3fc055", + "integrity": "sha512-rCNE/Yvqg2CEf1hbnwjcNtEv8ItyQpq9+k6/D4gdrqk+vbLatV7+QIPuSEpB3I0B7HeozrbwujjR1jYPUAr+Sw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3511,7 +3470,6 @@ "integrity": "sha512-RG/qKLgOZ7akAkv4LWTn6WtMF/sx1JECdZF9CF7dHDR2o1jbYurXRyvccVZbb823SDZWB4rUdWu9+b/mOkDeCA==", "dev": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@babel/cli": "7.16.0", "@babel/core": "7.16.0", @@ -3540,7 +3498,6 @@ "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.16.0", "@babel/generator": "^7.16.0", @@ -3567,9 +3524,9 @@ } }, "node_modules/@mat3ra/made": { - "version": "2025.12.29-0", - "resolved": "https://registry.npmjs.org/@mat3ra/made/-/made-2025.12.29-0.tgz", - "integrity": "sha512-GbfjMWlP/WE+yUR2gviyFbfpCHbizlLbt1SoVy/eAuNxvxcpT8T2SY8jcZDrMB8c0S18jit11xFHL0Hisssivg==", + "version": "0.0.0", + "resolved": "git+ssh://git@github.com/Exabyte-io/made.git#47b3e12a859c45fa72079ed4ddd1675a6a32b4fe", + "integrity": "sha512-07+f5AUKW1SpkftRqr84/s/KSP114PmuT5cAH30Pn+V3OTIfQrvf5vBWuRjYuoDg/HK2UZzqmv2FE/dY43gfTw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3674,9 +3631,9 @@ "license": "MIT" }, "node_modules/@mat3ra/mode": { - "version": "2025.12.25-0", - "resolved": "https://registry.npmjs.org/@mat3ra/mode/-/mode-2025.12.25-0.tgz", - "integrity": "sha512-Q2hjz1klBUNK1tG2hiI5fPxoHS4cnJczaV74BvoFmSZbgLO5JCzJCylppPY68mBSxYusBaXem5s3/ZSj30Wq6Q==", + "version": "0.0.0", + "resolved": "git+ssh://git@github.com/Exabyte-io/mode.git#0fe72a694deeb2d7abd4f17ff9aed110996c2f42", + "integrity": "sha512-Jc7Y1AJHE01raDCbTZuFAq5ySkSCdCToFTM7tYffw4rw+oxyQJgETRqtclHNNIXRYJqz6RNKY48qvZ4BCDT/gg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3874,56 +3831,6 @@ "node": ">= 18" } }, - "node_modules/@mat3ra/wode": { - "version": "0.0.0", - "resolved": "git+ssh://git@github.com/Exabyte-io/wode.git#33471cd073aa6990a8109b247ccd1d62e5cafa65", - "integrity": "sha512-9TLl92JVMrzRceVhuyc0jMdrtc/EzSnGrWrzafoHlEKf51WjUzAb/50MAFLKj+qDvmqzPGaifjpHZov9E1Trlw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@exabyte-io/periodic-table.js": "2022.6.8-0", - "@types/json-schema": "^7.0.15", - "@types/nunjucks": "^3.2.6", - "@types/react-jsonschema-form": "^1.7.13", - "crypto-js": "^4.2.0", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "mixwith": "^0.1.1", - "nunjucks": "^3.2.4", - "ts-node": "^10.9.2", - "typescript": "^5.6.6", - "underscore": "^1.13.3", - "underscore.string": "^3.3.4", - "v20": "^0.1.0" - }, - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "@mat3ra/ade": "*", - "@mat3ra/code": "*", - "@mat3ra/esse": "*", - "@mat3ra/ide": "*", - "@mat3ra/made": "*", - "@mat3ra/mode": "*", - "@mat3ra/standata": "*", - "@mat3ra/utils": "*" - } - }, - "node_modules/@mat3ra/wode/node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, "node_modules/@nicolo-ribaudo/chokidar-2": { "version": "2.1.8-no-fsevents.3", "dev": true, @@ -4068,34 +3975,6 @@ "undici-types": "~6.21.0" } }, - "node_modules/@types/nunjucks": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@types/nunjucks/-/nunjucks-3.2.6.tgz", - "integrity": "sha512-pHiGtf83na1nCzliuAdq8GowYiXvH5l931xZ0YEHaLMNFgynpEqx+IPStlu7UaDkehfvl01e4x/9Tpwhy7Ue3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "19.2.13", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.13.tgz", - "integrity": "sha512-KkiJeU6VbYbUOp5ITMIc7kBfqlYkKA5KhEHVrGMmUUMt7NeaZg65ojdPk+FtNrBAOXNVM5QM72jnADjM+XVRAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "csstype": "^3.2.2" - } - }, - "node_modules/@types/react-jsonschema-form": { - "version": "1.7.13", - "resolved": "https://registry.npmjs.org/@types/react-jsonschema-form/-/react-jsonschema-form-1.7.13.tgz", - "integrity": "sha512-C2jgO7/ow76oCSfUK++jKKox17R0A7ryMYNE5hJ2dR1Ske9jhuvjIlurvzMePh+Xjk8wey0nzB2C7HFKe2pRdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "*", - "@types/react": "*" - } - }, "node_modules/@types/semver": { "version": "7.7.1", "dev": true, @@ -4791,7 +4670,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.8.29", + "version": "2.9.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", + "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", "dev": true, "license": "Apache-2.0", "bin": { @@ -4835,7 +4716,9 @@ "license": "ISC" }, "node_modules/browserslist": { - "version": "4.28.0", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "dev": true, "funding": [ { @@ -4853,11 +4736,11 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.8.25", - "caniuse-lite": "^1.0.30001754", - "electron-to-chromium": "^1.5.249", + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", - "update-browserslist-db": "^1.1.4" + "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" @@ -4960,7 +4843,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001756", + "version": "1.0.30001769", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001769.tgz", + "integrity": "sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==", "dev": true, "funding": [ { @@ -5236,7 +5121,9 @@ "license": "MIT" }, "node_modules/core-js-compat": { - "version": "3.47.0", + "version": "3.48.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.48.0.tgz", + "integrity": "sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q==", "dev": true, "license": "MIT", "dependencies": { @@ -5248,7 +5135,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.47.0", + "version": "3.48.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.48.0.tgz", + "integrity": "sha512-1slJgk89tWC51HQ1AEqG+s2VuwpTRr8ocu4n20QUcH1v9lAN0RXen0Q0AABa/DK1I7RrNWLucplOHMx8hfTGTw==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -5288,13 +5177,6 @@ "dev": true, "license": "MIT" }, - "node_modules/csstype": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "dev": true, - "license": "MIT" - }, "node_modules/dag-map": { "version": "1.0.2", "dev": true, @@ -5507,7 +5389,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.257", + "version": "1.5.286", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", + "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", "dev": true, "license": "ISC" }, @@ -5766,9 +5650,9 @@ } }, "node_modules/eslint-compat-utils/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "peer": true, @@ -6004,9 +5888,9 @@ } }, "node_modules/eslint-plugin-jsonc": { - "version": "2.21.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsonc/-/eslint-plugin-jsonc-2.21.0.tgz", - "integrity": "sha512-HttlxdNG5ly3YjP1cFMP62R4qKLxJURfBZo2gnMY+yQojZxkLyOpY1H1KRTKBmvQeSG9pIpSGEhDjE17vvYosg==", + "version": "2.21.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsonc/-/eslint-plugin-jsonc-2.21.1.tgz", + "integrity": "sha512-dbNR5iEnQeORwsK2WZzr3QaMtFCY3kKJVMRHPzUpKzMhmVy2zIpVgFDpX8MNoIdoqz6KCpCfOJavhfiSbZbN+w==", "dev": true, "license": "MIT", "peer": true, @@ -7901,9 +7785,9 @@ } }, "node_modules/jsonc-eslint-parser/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "peer": true, @@ -8549,7 +8433,6 @@ "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": "*" } @@ -9271,8 +9154,7 @@ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-3.1.0.tgz", "integrity": "sha512-2wcybwjwXOzGI1rlxWtlcs0/nSYK0OzNPqsg35TKxJFQlGhFu3cZ1x7EHS4r4bubQlhzyF4YxxlJqQnIhkUQCw==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/possible-typed-array-names": { "version": "1.1.0", @@ -10726,7 +10608,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.4", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -10775,11 +10659,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/v20": { - "version": "0.1.0", - "dev": true, - "license": "MIT" - }, "node_modules/v8-compile-cache": { "version": "2.4.0", "dev": true, diff --git a/package.json b/package.json index c18885da..b84456b3 100644 --- a/package.json +++ b/package.json @@ -16,18 +16,21 @@ "js-yaml": "^4.1.0", "lodash": "^4.17.21" }, + "peerDependencies": { + "@mat3ra/esse": "*" + }, "devDependencies": { "@exabyte-io/eslint-config": "2025.5.13-0", "@mat3ra/ade": "git+https://github.com/Exabyte-io/ade.git#6d494337d83e1b22fe272ff74cc1b6842a7c6561", "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#3b42a844bebd5de65dc3877f7602521af308a09e", - "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse.git#49faa1af1a9c136c54af6658068decfba7306642", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse.git#be892d203b9f7cf6525270b1a1f6352c7f3fc055", "@mat3ra/fixtures": "git+https://github.com/Exabyte-io/fixtures.git#7501b0dcc28848b48194085685d332828509efdb", + "@mat3ra/ide": "2025.11.19-0", "@mat3ra/made": "git+https://github.com/Exabyte-io/made.git#47b3e12a859c45fa72079ed4ddd1675a6a32b4fe", - "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#9d6ff1c11342945badf3c112b9680998c7da8f53", + "@mat3ra/mode": "git+https://github.com/Exabyte-io/mode.git#0fe72a694deeb2d7abd4f17ff9aed110996c2f42", "@mat3ra/standata": "file:./", "@mat3ra/tsconfig": "^2024.6.3-0", "@mat3ra/utils": "2025.12.2-0", - "@mat3ra/wode": "git+https://github.com/Exabyte-io/wode.git#a3b31813f0b9c2b8c54ff2f1b2ba0d4a7f2331b3", "@types/chai": "^4.3.5", "@types/js-yaml": "^4.0.5", "@types/mocha": "^10.0.1", @@ -35,6 +38,8 @@ "@types/sprintf-js": "^1.1.4", "@typescript-eslint/eslint-plugin": "^5.56.0", "@typescript-eslint/parser": "^5.56.0", + "ajv": "^8.17.1", + "ajv-formats": "^2.1.1", "babel-eslint": "^10.1.0", "chai": "^4.3.4", "eslint": "7.32.0", @@ -61,14 +66,14 @@ "scripts": { "clean": "rm -rf build/standata", "build:categories": "ts-node src/js/cli.ts", - "create:materials": "python scripts/materials/create_materials.py", - "build:materials": "ts-node scripts/materials/build_materials.ts", - "build:properties": "ts-node scripts/properties/build_properties.ts", - "build:workflows": "ts-node scripts/workflows/build_workflows.ts", - "build:applications": "ts-node scripts/applications/build_applications.ts", - "build:models": "ts-node scripts/models/build_models.ts", - "build:methods": "ts-node scripts/methods/build_methods.ts", - "build:model-method-map": "ts-node scripts/models/build_model_method_map.ts", + "create:materials": "python --transpile-only scripts/materials/create_materials.py", + "build:materials": "ts-node --transpile-only scripts/materials/build_materials.ts", + "build:properties": "ts-node --transpile-only scripts/properties/build_properties.ts", + "build:workflows": "ts-node --transpile-only scripts/workflows/build_workflows.ts", + "build:applications": "ts-node --transpile-only scripts/applications/build_applications.ts", + "build:models": "ts-node --transpile-only scripts/models/build_models.ts", + "build:methods": "ts-node --transpile-only scripts/methods/build_methods.ts", + "build:model-method-map": "ts-node --transpile-only scripts/models/build_model_method_map.ts", "build:model-tree": "ts-node scripts/models/build_model_tree.ts", "build:models-tree-config-by-application": "ts-node scripts/models/build_models_tree_config_by_application.ts", "build:models-related": "npm run build:model-method-map && npm run build:model-tree && npm run build:models-tree-config-by-application", diff --git a/scripts/models/build_model_tree.ts b/scripts/models/build_model_tree.ts index 8018bb30..0a434b46 100644 --- a/scripts/models/build_model_tree.ts +++ b/scripts/models/build_model_tree.ts @@ -1,6 +1,6 @@ +import serverUtils from "@mat3ra/utils/server"; import * as fs from "fs"; import * as path from "path"; -import serverUtils from "@mat3ra/utils/server"; import { BUILD_CONFIG } from "../../build-config"; import { MODEL_NAMES, MODEL_TREE } from "./modelTreeConstants"; diff --git a/scripts/processors/ApplicationsProcessor.ts b/scripts/processors/ApplicationsProcessor.ts index 656c130a..b6ea1f5a 100644 --- a/scripts/processors/ApplicationsProcessor.ts +++ b/scripts/processors/ApplicationsProcessor.ts @@ -1,15 +1,16 @@ -// eslint-disable-next-line import/no-extraneous-dependencies +import { ApplicationSchema } from "@mat3ra/esse/dist/js/types"; import { Utils } from "@mat3ra/utils"; -// eslint-disable-next-line import/no-extraneous-dependencies import serverUtils from "@mat3ra/utils/server"; import * as path from "path"; import { BUILD_CONFIG } from "../../build-config"; -import { ApplicationVersionsMapType } from "../../src/js/types/application"; +import { ApplicationVersionsMapByApplicationType } from "../../src/js/types/application"; import { ApplicationVersionsMap } from "../../src/js/utils/applicationVersionMap"; import { buildJSONFromYAMLInDir, loadYAMLTree, resolveFromRoot } from "../utils"; import { EntityProcessor } from "./EntityProcessor"; +type ApplicationVersionsMapType = ApplicationVersionsMapByApplicationType; + export class ApplicationsProcessor extends EntityProcessor { constructor(rootDir: string) { super({ @@ -22,11 +23,11 @@ export class ApplicationsProcessor extends EntityProcessor { }); } - private cleanApplicationData: Record = {} as any; + private cleanApplicationData: Record = {}; - private modelFilterTree: Record = {}; + private modelFilterTree: Record = {}; - private methodFilterTree: Record = {}; + private methodFilterTree: Record = {}; public readAssets() { const sourcesRoot = resolveFromRoot( @@ -44,14 +45,16 @@ export class ApplicationsProcessor extends EntityProcessor { string, Record >; - const clean = (Utils.object.flattenNestedObjects as any)(nestedApplicationData); + const clean = Utils.object.flattenNestedObjects(nestedApplicationData) as Record< + string, + ApplicationVersionsMapType + >; this.cleanApplicationData = clean; this.modelFilterTree = loadYAMLTree(modelAssetPath); this.methodFilterTree = loadYAMLTree(methodAssetPath); this.assets = []; - return this.assets; } public writeBuildDirectoryContent(): void { @@ -99,12 +102,12 @@ export class ApplicationsProcessor extends EntityProcessor { appNames.forEach((appName) => { const applicationDataForVersions = this.cleanApplicationData[appName]; const appVersionsMap = new ApplicationVersionsMap(applicationDataForVersions); - const { versionConfigsFull } = appVersionsMap as any; + const { versionConfigsFull } = appVersionsMap; const appDir = path.resolve(this.resolvedPaths.dataDir, appName); serverUtils.file.createDirIfNotExistsSync(appDir); - versionConfigsFull.forEach((versionConfigFull: any) => { - const fileName = (appVersionsMap as any).getSlugForVersionConfig(versionConfigFull); + versionConfigsFull.forEach((versionConfigFull: ApplicationSchema) => { + const fileName = appVersionsMap.getSlugForVersionConfig(versionConfigFull); const filePath = path.resolve(appDir, fileName); serverUtils.json.writeJSONFileSync(filePath, versionConfigFull, { spaces: BUILD_CONFIG.dataJSONFormat.spaces, diff --git a/scripts/processors/BaseModelMethodProcessor.ts b/scripts/processors/BaseModelMethodProcessor.ts index c080ca07..88b8f566 100644 --- a/scripts/processors/BaseModelMethodProcessor.ts +++ b/scripts/processors/BaseModelMethodProcessor.ts @@ -1,13 +1,10 @@ -// eslint-disable-next-line import/no-extraneous-dependencies +/* eslint-disable class-methods-use-this */ import { CategorizedEntityProcessor } from "./CategorizedEntityProcessor"; import { EntityProcessorOptions } from "./EntityProcessor"; +import type { CategoryCollectOptions, CategorySets } from "./types"; export interface ModelMethodProcessorOptions extends EntityProcessorOptions { - categoryCollectOptions?: { - includeUnits?: boolean; - includeTags?: boolean; - includeEntitiesMap?: boolean; - }; + categoryCollectOptions?: CategoryCollectOptions; } export abstract class BaseModelMethodProcessor extends CategorizedEntityProcessor { @@ -24,44 +21,47 @@ export abstract class BaseModelMethodProcessor extends CategorizedEntityProcesso includeTags: false, includeEntitiesMap: false, ...this.options.categoryCollectOptions, - }; + } as const; } public addCategoriesFromObject( - obj: any, + obj: Record, categoryKeys: string[], includeTags: boolean, - categorySets: Record>, + categorySets: CategorySets, ): void { - if (obj?.categories) { + const categories = obj?.categories as Record | undefined; + if (categories) { categoryKeys.forEach((key) => { - const v = obj.categories[key]; - if (typeof v === "string" && v) (categorySets as any)[key].add(v); + const v = categories[key]; + if (typeof v === "string" && v) categorySets[key].add(v); }); } if (includeTags && Array.isArray(obj?.tags)) { - obj.tags.forEach((t: string) => (categorySets as any).tags.add(t)); + (obj.tags as string[]).forEach((t) => categorySets.tags.add(t)); } } public addCategoriesToSet( - obj: any, + obj: Record, categoryKeys: string[], includeTags: boolean, target: Set, ): void { - if (obj?.categories) { + const categories = obj?.categories as Record | undefined; + if (categories) { categoryKeys.forEach((key) => { - const v = obj.categories[key]; + const v = categories[key]; if (typeof v === "string" && v) target.add(v); }); } - if (includeTags && Array.isArray(obj?.tags)) obj.tags.forEach((t: string) => target.add(t)); + if (includeTags && Array.isArray(obj?.tags)) { + (obj.tags as string[]).forEach((t) => target.add(t)); + } } - protected getDataSubdirectory(entity: any): string { - const fullPathAsURL = entity.path || ""; - const finalPath = fullPathAsURL.split("?")[0]; - return finalPath; + protected getDataSubdirectory(entity: Record): string { + const fullPathAsURL = typeof entity.path === "string" ? entity.path : ""; + return fullPathAsURL.split("?")[0]; } } diff --git a/scripts/processors/BaseWorkflowSubworkflowProcessor.ts b/scripts/processors/BaseWorkflowSubworkflowProcessor.ts index 57af9683..2538b44f 100644 --- a/scripts/processors/BaseWorkflowSubworkflowProcessor.ts +++ b/scripts/processors/BaseWorkflowSubworkflowProcessor.ts @@ -1,35 +1,40 @@ -// eslint-disable-next-line import/no-extraneous-dependencies +/* eslint-disable class-methods-use-this */ import { Utils } from "@mat3ra/utils"; -// eslint-disable-next-line import/no-extraneous-dependencies -// @ts-ignore import serverUtils from "@mat3ra/utils/server"; -// @ts-ignore -import { builders, Subworkflow, UnitFactory, Workflow } from "@mat3ra/wode"; import path from "path"; import { BUILD_CONFIG } from "../../build-config"; import { loadYAMLFilesAsMap, readYAMLFileResolved } from "../utils"; import { CategorizedEntityProcessor } from "./CategorizedEntityProcessor"; -import { AssetRecord, EntityProcessorOptions } from "./EntityProcessor"; - -export abstract class BaseWorkflowSubworkflowProcessor extends CategorizedEntityProcessor { +import { EntityProcessorOptions } from "./EntityProcessor"; +import type { + CategorySets, + EntityMapByApplication, + WorkflowEntityConfig, + WorkflowEntityData, +} from "./types"; + +export abstract class BaseWorkflowSubworkflowProcessor< + T extends object = object, +> extends CategorizedEntityProcessor { protected applications: string[] = []; - public entityMapByApplication: Record; + public entityMapByApplication: EntityMapByApplication; - public entityConfigs: object[]; + public entityConfigs: WorkflowEntityConfig[]; constructor(options: EntityProcessorOptions) { super(options); this.entityMapByApplication = {}; this.entityConfigs = []; - this.applications = this.getApplicationSListFromYAML(); + this.applications = this.getApplicationsListFromYAML(); } - protected getApplicationSListFromYAML(): string[] { + private getApplicationsListFromYAML(): string[] { const appsPath = `${BUILD_CONFIG.applications.assets.path}/applications/application_data.yml`; const resolvedAppsPath = path.resolve(__dirname, "../../", appsPath); - const appsYAML: any = readYAMLFileResolved(resolvedAppsPath); + const appsYAML = readYAMLFileResolved(resolvedAppsPath); + return Object.keys(appsYAML); } @@ -38,46 +43,58 @@ export abstract class BaseWorkflowSubworkflowProcessor extends CategorizedEntity includeUnits: true, includeTags: true, includeEntitiesMap: true, - }; + } as const; } public addCategoriesFromObject( - obj: any, + obj: Record, categoryKeys: string[], includeTags: boolean, - categorySets: Record>, + categorySets: CategorySets, ): void { categoryKeys.forEach((key) => { - let value = (obj as any)[key]; - if (key === "application" && value && typeof value === "object" && value.name) { - value = value.name; + let value = obj[key]; + if ( + key === "application" && + value && + typeof value === "object" && + value !== null && + "name" in value + ) { + value = (value as { name: string }).name; } if (Array.isArray(value)) { - value.forEach((v: string) => { - if (typeof v === "string" && v) (categorySets as any)[key].add(v); + value.forEach((v: unknown) => { + if (typeof v === "string" && v) categorySets[key].add(v); }); } else if (typeof value === "string" && value) { - (categorySets as any)[key].add(value); + categorySets[key].add(value); } }); if (includeTags && Array.isArray(obj?.tags)) { - obj.tags.forEach((t: string) => (categorySets as any).tags.add(t)); + (obj.tags as string[]).forEach((t) => categorySets.tags.add(t)); } } public addCategoriesToSet( - obj: any, + obj: Record, categoryKeys: string[], includeTags: boolean, target: Set, ): void { categoryKeys.forEach((key) => { - let value = (obj as any)[key]; - if (key === "application" && value && typeof value === "object" && value.name) { - value = value.name; + let value = obj[key]; + if ( + key === "application" && + value && + typeof value === "object" && + value !== null && + "name" in value + ) { + value = (value as { name: string }).name; } if (Array.isArray(value)) { - value.forEach((v: string) => { + value.forEach((v: unknown) => { if (typeof v === "string" && v) target.add(v); }); } else if (typeof value === "string" && value) { @@ -85,14 +102,14 @@ export abstract class BaseWorkflowSubworkflowProcessor extends CategorizedEntity } }); if (includeTags && Array.isArray(obj?.tags)) { - obj.tags.forEach((t: string) => target.add(t)); + (obj.tags as string[]).forEach((t) => target.add(t)); } } public setEntityMapByApplication() { this.applications.forEach((name) => { const pathForName = `${this.resolvedPaths.assetsDir}/${name}`; - this.entityMapByApplication[name] = loadYAMLFilesAsMap(pathForName); + this.entityMapByApplication[name] = loadYAMLFilesAsMap(pathForName); }); } @@ -101,68 +118,36 @@ export abstract class BaseWorkflowSubworkflowProcessor extends CategorizedEntity } protected buildConfigFromEntityData( - entityData: any, - entityKey: string, + entityData: WorkflowEntityData, + entityName: string, appName: string, - entity: any, - ): { appName: string; safeName: string; config: any; tags?: any[] } { - const entityName = entity.prop ? entity.prop("name") : entityKey; - const pathInSource = entityData?.__path__; + entity: object, + ): WorkflowEntityConfig { + const pathInSource = entityData.__path__; const safeName = this.getSafeNameFromPath(pathInSource, entityName); const tags = entityData?.tags; - const hasTags = tags && Array.isArray(tags) && tags.length > 0; + const hasTags = Array.isArray(tags) && tags.length > 0; + return { appName, safeName, - config: entity.toJSON(), + config: entity, ...(hasTags ? { tags } : {}), }; } - protected abstract buildEntityConfigs(): object[]; + protected abstract buildEntityConfigs(): WorkflowEntityConfig[]; - public readAssets(): AssetRecord[] { + public readAssets() { this.setEntityMapByApplication(); // read assets to be able to run buildEntityConfigs super.readAssets(); this.entityConfigs = this.buildEntityConfigs(); - return this.assets; - } - - protected enablePredefinedIds(): void { - const WorkflowCls = Workflow as any; - WorkflowCls.usePredefinedIds = true; - - const SubworkflowCls = Subworkflow as any; - SubworkflowCls.usePredefinedIds = true; - - this.enablePredefinedIdsForBuilders(); - this.enablePredefinedIdsForUnits(); - } - - private enablePredefinedIdsForBuilders(): void { - (builders as any).UnitConfigBuilder.usePredefinedIds = true; - (builders as any).AssignmentUnitConfigBuilder.usePredefinedIds = true; - (builders as any).AssertionUnitConfigBuilder.usePredefinedIds = true; - (builders as any).ExecutionUnitConfigBuilder.usePredefinedIds = true; - (builders as any).IOUnitConfigBuilder.usePredefinedIds = true; - } - - private enablePredefinedIdsForUnits(): void { - (UnitFactory as any).BaseUnit.usePredefinedIds = true; - (UnitFactory as any).AssignmentUnit.usePredefinedIds = true; - (UnitFactory as any).AssertionUnit.usePredefinedIds = true; - (UnitFactory as any).ExecutionUnit.usePredefinedIds = true; - (UnitFactory as any).IOUnit.usePredefinedIds = true; - (UnitFactory as any).SubworkflowUnit.usePredefinedIds = true; - (UnitFactory as any).ConditionUnit.usePredefinedIds = true; - (UnitFactory as any).MapUnit.usePredefinedIds = true; - (UnitFactory as any).ProcessingUnit.usePredefinedIds = true; } private writeEntityConfigs(dirPath: string, minified = true): void { - this.entityConfigs.forEach((entityConfig: any) => { - const entityName = (entityConfig as any).safeName; + this.entityConfigs.forEach((entityConfig) => { + const entityName = entityConfig.safeName; const targetPath = `${dirPath}/${entityConfig.appName}/${entityName}.json`; const dataToWrite = { ...entityConfig.config, diff --git a/scripts/processors/CategorizedEntityProcessor.ts b/scripts/processors/CategorizedEntityProcessor.ts index de0c7f0e..248754c6 100644 --- a/scripts/processors/CategorizedEntityProcessor.ts +++ b/scripts/processors/CategorizedEntityProcessor.ts @@ -1,4 +1,3 @@ -// eslint-disable-next-line import/no-extraneous-dependencies import serverUtils from "@mat3ra/utils/server"; import * as fs from "fs"; import * as yaml from "js-yaml"; @@ -8,13 +7,10 @@ import * as path from "path"; import { BUILD_CONFIG } from "../../build-config"; import { findJsonFilesRecursively } from "../utils"; import { EntityProcessor, EntityProcessorOptions } from "./EntityProcessor"; +import type { CategoryCollectOptions, CategorySets } from "./types"; export interface ModelMethodProcessorOptions extends EntityProcessorOptions { - categoryCollectOptions?: { - includeUnits?: boolean; - includeTags?: boolean; - includeEntitiesMap?: boolean; - }; + categoryCollectOptions?: CategoryCollectOptions; } export abstract class CategorizedEntityProcessor extends EntityProcessor { @@ -26,6 +22,7 @@ export abstract class CategorizedEntityProcessor extends EntityProcessor { } // TODO: move to specific entity processors + // eslint-disable-next-line class-methods-use-this public getCategoryCollectOptions() { return { includeUnits: false, @@ -40,21 +37,24 @@ export abstract class CategorizedEntityProcessor extends EntityProcessor { const categoryKeys = this.options.categoryKeys || []; const { includeUnits, includeTags, includeEntitiesMap } = this.getCategoryCollectOptions(); - const categorySets: Record> = Object.fromEntries( + const categorySets: CategorySets = Object.fromEntries( [...categoryKeys, includeTags ? "tags" : null] .filter(Boolean) .map((k) => [k as string, new Set()]), - ) as any; + ); const entities: { filename: string; categories: string[] }[] = []; const jsonFiles = findJsonFilesRecursively(this.resolvedPaths.dataDir); + // eslint-disable-next-line no-restricted-syntax for (const filePath of jsonFiles) { console.log(`Processing file: ${filePath}`); try { - const data = serverUtils.json.readJSONFileSync(filePath) as any; + const data = serverUtils.json.readJSONFileSync(filePath) as Record; + this.addCategoriesFromObject(data, categoryKeys, includeTags, categorySets); - if (includeUnits && Array.isArray((data as any)?.units)) { - for (const u of (data as any).units) { + if (includeUnits && Array.isArray(data.units)) { + // eslint-disable-next-line no-restricted-syntax + for (const u of data.units as Record[]) { this.addCategoriesFromObject(u, categoryKeys, includeTags, categorySets); } } @@ -62,25 +62,31 @@ export abstract class CategorizedEntityProcessor extends EntityProcessor { if (includeEntitiesMap) { const relativePath = path.relative(this.resolvedPaths.dataDir, filePath); const flat = new Set(); + this.addCategoriesToSet(data, categoryKeys, includeTags, flat); - if (includeUnits && Array.isArray((data as any)?.units)) { - for (const u of (data as any).units) + if (includeUnits && Array.isArray(data.units)) { + // eslint-disable-next-line no-restricted-syntax + for (const u of data.units as Record[]) { this.addCategoriesToSet(u, categoryKeys, includeTags, flat); + } } entities.push({ filename: relativePath, categories: Array.from(flat).sort() }); } - } catch (e: any) { - console.error(`Error processing ${filePath}: ${e.message}`); + } catch (e: unknown) { + const errorMessage = e instanceof Error ? e.message : String(e); + console.error(`Error processing ${filePath}: ${errorMessage}`); } } - const categoriesOut: any = {}; + const categoriesOut: Record = {}; + categoryKeys.forEach((key) => { - const arr = Array.from((categorySets as any)[key]).sort(); + const arr = Array.from(categorySets[key]).sort(); if (arr.length > 0) categoriesOut[key] = arr; }); + if (includeTags) { - const tagsArr = Array.from((categorySets as any).tags || []).sort(); + const tagsArr = Array.from(categorySets.tags || []).sort(); if (tagsArr.length > 0) categoriesOut.tags = tagsArr; } @@ -102,26 +108,29 @@ export abstract class CategorizedEntityProcessor extends EntityProcessor { console.log(`Categories file written to: ${categoriesPath}`); } + // eslint-disable-next-line class-methods-use-this public addCategoriesFromObject( - obj: any, - categoryKeys: string[], + obj: Record, + categoryKeys: readonly string[], includeTags: boolean, - categorySets: Record>, - ): void { + categorySets: CategorySets, + ) { categoryKeys.forEach((key) => { const value = lodash.get(obj, key); if (typeof value === "string" && value) { - (categorySets as any)[key].add(value); + categorySets[key].add(value); } }); - if (includeTags && Array.isArray(obj?.tags)) { - obj.tags.forEach((t: string) => (categorySets as any).tags.add(t)); + + if (includeTags && Array.isArray(obj.tags)) { + (obj.tags as string[]).forEach((t) => categorySets.tags.add(t)); } } + // eslint-disable-next-line class-methods-use-this public addCategoriesToSet( - obj: any, - categoryKeys: string[], + obj: Record, + categoryKeys: readonly string[], includeTags: boolean, target: Set, ): void { @@ -129,8 +138,8 @@ export abstract class CategorizedEntityProcessor extends EntityProcessor { const value = lodash.get(obj, key); if (typeof value === "string" && value) target.add(value); }); - if (includeTags && Array.isArray(obj?.tags)) { - obj.tags.forEach((t: string) => target.add(t)); + if (includeTags && Array.isArray(obj.tags)) { + (obj.tags as string[]).forEach((t) => target.add(t)); } } } diff --git a/scripts/processors/EntityProcessor.ts b/scripts/processors/EntityProcessor.ts index a1e95df2..f0463c12 100644 --- a/scripts/processors/EntityProcessor.ts +++ b/scripts/processors/EntityProcessor.ts @@ -1,18 +1,17 @@ -// eslint-disable-next-line import/no-extraneous-dependencies import { Utils } from "@mat3ra/utils"; -// eslint-disable-next-line import/no-extraneous-dependencies import serverUtils from "@mat3ra/utils/server"; import * as fs from "fs"; import * as path from "path"; import { BUILD_CONFIG } from "../../build-config"; -import { RuntimeData, StandataConfig } from "../../src/js/types/standata"; +import { EntityItem, RuntimeData, StandataConfig } from "../../src/js/types/standata"; import { encodeDataAsURLPath, findJsonFilesRecursively, readYAMLFileResolved, resolveFromRoot, } from "../utils"; +import type { BuildArtifact } from "./types"; export interface EntityProcessorOptions { rootDir: string; @@ -21,14 +20,14 @@ export interface EntityProcessorOptions { dataDir: string; buildDir: string; categoriesRelativePath: string; - categoryKeys?: string[]; + categoryKeys?: readonly string[]; excludedAssetFiles?: string[]; areKeysSorted?: boolean; } -export type AssetRecord = { +export type AssetRecord = { sourceFile: string; - entities: any[]; + entities: T[]; }; export abstract class EntityProcessor { @@ -61,12 +60,12 @@ export abstract class EntityProcessor { // Hooks // eslint-disable-next-line class-methods-use-this, @typescript-eslint/no-unused-vars - protected transformEntity(entity: any, _sourceFile: string): any { + protected transformEntity(entity: unknown, _sourceFile: string): unknown { return entity; } // eslint-disable-next-line class-methods-use-this, @typescript-eslint/no-unused-vars - protected getDataSubdirectory(_entity: any, _sourceFile: string): string { + protected getDataSubdirectory(_entity: unknown, _sourceFile: string): string { return ""; } @@ -74,12 +73,12 @@ export abstract class EntityProcessor { protected additionalProcessing(): void {} // eslint-disable-next-line class-methods-use-this - protected getBuildArtifacts(): { relativePath: string; content: any }[] { + protected getBuildArtifacts(): BuildArtifact[] { return []; } // Default implementations - public readAssets(): AssetRecord[] { + public readAssets() { const yamlFiles = serverUtils.file.getFilesInDirectory(this.resolvedPaths.assetsDir, [ ".yml", ".yaml", @@ -96,7 +95,6 @@ export abstract class EntityProcessor { const entities = Utils.array.normalizeToArray(parsed); return { sourceFile: filePath, entities } as AssetRecord; }); - return this.assets; } protected getExcludedAssetFiles(): string[] { @@ -133,22 +131,32 @@ export abstract class EntityProcessor { protected copyAndMinifyFromDataToBuild(): void { const { dataDir, buildDir } = this.resolvedPaths; - if (!dataDir || !buildDir) return; + + if (!dataDir || !buildDir) { + return; + } + if (!fs.existsSync(dataDir)) { console.warn(` Warning: Data directory ${dataDir} does not exist`); return; } const files = serverUtils.file.getFilesInDirectory(dataDir, [".json"]); - if (files.length === 0) return; + + if (files.length === 0) { + return; + } serverUtils.file.createDirIfNotExistsSync(buildDir); + files.forEach((filePath: string) => { const relativePath = path.relative(dataDir, filePath); const destinationPath = path.resolve(buildDir, relativePath); + serverUtils.file.createDirIfNotExistsSync(path.dirname(destinationPath)); const content = serverUtils.json.readJSONFileSync(filePath); + serverUtils.json.writeJSONFileSync(destinationPath, content, { spaces: BUILD_CONFIG.buildJSONFormat.spaces, }); @@ -158,24 +166,35 @@ export abstract class EntityProcessor { protected cleanDataDirectory(): void { const { dataDir } = this.resolvedPaths; - if (!fs.existsSync(dataDir)) return; + if (!fs.existsSync(dataDir)) { + return; + } console.log(` Cleaning ${dataDir}...`); + const files = findJsonFilesRecursively(dataDir); - files.forEach((file: string) => { - fs.unlinkSync(file); - }); + findJsonFilesRecursively(dataDir).forEach(fs.unlinkSync); + console.log(` Removed ${files.length} files`); } public writeDataDirectoryContent(): void { const { dataDir } = this.resolvedPaths; + const categoryKeys = this.options.categoryKeys || []; + serverUtils.file.createDirIfNotExistsSync(dataDir); - const categoryKeys = this.options.categoryKeys || []; this.assets.forEach(({ sourceFile, entities }) => { - entities.forEach((entity: any) => { - const transformed = this.transformEntity({ ...entity }, sourceFile); + entities.forEach((entity: unknown) => { + const raw = + typeof entity === "object" && entity !== null + ? { ...(entity as object) } + : entity; + + const transformed = this.transformEntity(raw, sourceFile) as Record< + string, + unknown + >; if (!transformed.path && categoryKeys.length > 0) { transformed.path = encodeDataAsURLPath(transformed, categoryKeys); } @@ -250,17 +269,19 @@ export abstract class EntityProcessor { protected generateRuntimeDataConfig(): RuntimeData { // Read categories YAML - const categoriesContent: any = serverUtils.yaml.readYAMLFileSync(this.categoriesPath); + const categoriesContent = serverUtils.yaml.readYAMLFileSync( + this.categoriesPath, + ) as StandataConfig; const { entities } = categoriesContent; // Build runtime data object const runtimeDataConfig: RuntimeData = { - standataConfig: categoriesContent as StandataConfig, + standataConfig: categoriesContent, filesMapByName: {}, }; // Load each entity's JSON file - entities.forEach((entity: any) => { + entities.forEach((entity: EntityItem) => { const entityPath = path.join(this.resolvedPaths.dataDir, entity.filename); console.log(` Loading entity file: ${entityPath}`); if (fs.existsSync(entityPath)) { diff --git a/scripts/processors/MaterialsProcessor.ts b/scripts/processors/MaterialsProcessor.ts index d923874c..fd54bb8a 100644 --- a/scripts/processors/MaterialsProcessor.ts +++ b/scripts/processors/MaterialsProcessor.ts @@ -1,9 +1,7 @@ -// eslint-disable-next-line import/no-extraneous-dependencies import serverUtils from "@mat3ra/utils/server"; import { BUILD_CONFIG } from "../../build-config"; import { CategorizedEntityProcessor } from "./CategorizedEntityProcessor"; -import { AssetRecord } from "./EntityProcessor"; export class MaterialsProcessor extends CategorizedEntityProcessor { private static defaultCategoryKeys = [ @@ -33,13 +31,12 @@ export class MaterialsProcessor extends CategorizedEntityProcessor { }); } - public readAssets(): AssetRecord[] { + public readAssets() { console.log(" Reading generated materials from data directory..."); const dataFiles = serverUtils.file.getFilesInDirectory(this.resolvedPaths.dataDir, [ ".json", ]); console.log(` Found ${dataFiles.length} generated material files`); - return []; } public cleanDataDirectory(): void { diff --git a/scripts/processors/MethodsProcessor.ts b/scripts/processors/MethodsProcessor.ts index af08220d..3484f015 100644 --- a/scripts/processors/MethodsProcessor.ts +++ b/scripts/processors/MethodsProcessor.ts @@ -1,6 +1,7 @@ import { BUILD_CONFIG } from "../../build-config"; import { encodeDataAsURLPath } from "../utils"; import { BaseModelMethodProcessor } from "./BaseModelMethodProcessor"; +import type { EntityWithPathAndUnits } from "./types"; export class MethodsProcessor extends BaseModelMethodProcessor { private static defaultCategoryKeys = ["tier1", "tier2", "tier3", "type", "subtype"]; @@ -22,19 +23,19 @@ export class MethodsProcessor extends BaseModelMethodProcessor { }); } - protected transformEntity(entity: any): any { + protected transformEntity(entity: EntityWithPathAndUnits): EntityWithPathAndUnits { if (entity?.units) { const categoryKeys = this.options.categoryKeys || []; - entity.units.forEach((unit: any) => { + entity.units.forEach((unit) => { unit.path = encodeDataAsURLPath(unit, categoryKeys); delete unit.schema; }); - entity.path = entity.units.map((u: any) => u.path).join("::"); + entity.path = entity.units.map((u) => u.path).join("::"); } return entity; } - protected getDataSubdirectory(_entity: any): string { - return super.getDataSubdirectory(_entity).split("::")[0]; + protected getDataSubdirectory(entity: EntityWithPathAndUnits): string { + return super.getDataSubdirectory(entity).split("::")[0]; } } diff --git a/scripts/processors/PropertiesProcessor.ts b/scripts/processors/PropertiesProcessor.ts index 488fb5cf..d6f2b88d 100644 --- a/scripts/processors/PropertiesProcessor.ts +++ b/scripts/processors/PropertiesProcessor.ts @@ -1,9 +1,7 @@ -// eslint-disable-next-line import/no-extraneous-dependencies import serverUtils from "@mat3ra/utils/server"; import { BUILD_CONFIG } from "../../build-config"; import { CategorizedEntityProcessor } from "./CategorizedEntityProcessor"; -import { AssetRecord } from "./EntityProcessor"; export class PropertiesProcessor extends CategorizedEntityProcessor { private static defaultCategoryKeys = [ @@ -32,7 +30,7 @@ export class PropertiesProcessor extends CategorizedEntityProcessor { }); } - public readAssets(): AssetRecord[] { + public readAssets() { console.log(" Reading existing property JSON files from data directory..."); const files = serverUtils.file.getFilesInDirectory(this.resolvedPaths.dataDir, [".json"]); console.log(` Found ${files.length} property files`); diff --git a/scripts/processors/SubworkflowsProcessor.ts b/scripts/processors/SubworkflowsProcessor.ts index 0993dc71..d9e7bb32 100644 --- a/scripts/processors/SubworkflowsProcessor.ts +++ b/scripts/processors/SubworkflowsProcessor.ts @@ -1,12 +1,11 @@ -// @ts-ignore -import { builders, createSubworkflowByName, Subworkflow, UnitFactory } from "@mat3ra/wode"; - import { BUILD_CONFIG } from "../../build-config"; import { BaseWorkflowSubworkflowProcessor } from "./BaseWorkflowSubworkflowProcessor"; +import type { WorkflowEntityConfig } from "./types"; +import createSubworkflow, { type SubworkflowData } from "./utils/createSubworkflow"; -export class SubworkflowsProcessor extends BaseWorkflowSubworkflowProcessor { - public static defaultCategoryKeys = ["properties", "isMultimaterial", "tags", "application"]; +const defaultCategoryKeys = ["properties", "isMultimaterial", "tags", "application"] as const; +export class SubworkflowsProcessor extends BaseWorkflowSubworkflowProcessor { constructor(rootDir: string) { super({ rootDir, @@ -16,34 +15,31 @@ export class SubworkflowsProcessor extends BaseWorkflowSubworkflowProcessor { buildDir: BUILD_CONFIG.subworkflows.build.path, excludedAssetFiles: [BUILD_CONFIG.subworkflows.assets.categories], categoriesRelativePath: BUILD_CONFIG.subworkflows.assets.categories, - categoryKeys: SubworkflowsProcessor.defaultCategoryKeys, + categoryKeys: defaultCategoryKeys, }); } - private get workflowSubworkflowMapByApplication(): { workflows: any; subworkflows: any } { - const workflowSubworkflowMapByApplication = { workflows: {}, subworkflows: {} } as any; - workflowSubworkflowMapByApplication.workflows = {}; - workflowSubworkflowMapByApplication.subworkflows = this.entityMapByApplication; - return workflowSubworkflowMapByApplication; + private get workflowSubworkflowMapByApplication() { + return { + workflows: {}, + subworkflows: this.entityMapByApplication, + }; } - protected buildEntityConfigs(): any[] { - this.enablePredefinedIds(); - const configs: { appName: string; safeName: string; config: any }[] = []; + protected buildEntityConfigs() { + const configs: WorkflowEntityConfig[] = []; + const map = this.workflowSubworkflowMapByApplication; + this.applications.forEach((appName) => { - const subworkflows = this.workflowSubworkflowMapByApplication.subworkflows[appName]; - if (!subworkflows) return; + const subworkflows = map.subworkflows[appName]; + + if (!subworkflows) { + return; + } + Object.keys(subworkflows).forEach((subworkflowName) => { const subworkflowData = subworkflows[subworkflowName]; - // @ts-ignore - const subworkflow = createSubworkflowByName({ - appName, - swfName: subworkflowName, - workflowSubworkflowMapByApplication: this.workflowSubworkflowMapByApplication, - SubworkflowCls: Subworkflow, - UnitFactoryCls: UnitFactory, - unitBuilders: builders, - }); + const subworkflow = createSubworkflow(subworkflowData); const config = this.buildConfigFromEntityData( subworkflowData, subworkflowName, @@ -53,6 +49,7 @@ export class SubworkflowsProcessor extends BaseWorkflowSubworkflowProcessor { configs.push(config); }); }); + return configs; } } diff --git a/scripts/processors/WorkflowsProcessor.ts b/scripts/processors/WorkflowsProcessor.ts index 5baee94d..b7bf1008 100644 --- a/scripts/processors/WorkflowsProcessor.ts +++ b/scripts/processors/WorkflowsProcessor.ts @@ -1,17 +1,17 @@ import serverUtils from "@mat3ra/utils/server"; -// @ts-ignore -import { builders, createWorkflow, Subworkflow, UnitFactory, Workflow } from "@mat3ra/wode"; import * as path from "path"; import { BUILD_CONFIG } from "../../build-config"; import { BaseWorkflowSubworkflowProcessor } from "./BaseWorkflowSubworkflowProcessor"; +import type { WorkflowEntityConfig } from "./types"; +import createWorkflow, { type SubworkflowsTree, type WorkflowData } from "./utils/createWorkflow"; -export class WorkflowsProcessor extends BaseWorkflowSubworkflowProcessor { +export class WorkflowsProcessor extends BaseWorkflowSubworkflowProcessor { public static defaultCategoryKeys = ["properties", "isMultimaterial", "tags", "application"]; - private subworkflowMapByApplication: Record; + private subworkflowMapByApplication: SubworkflowsTree; - constructor(rootDir: string, subworkflowsMapByApplication: Record) { + constructor(rootDir: string, subworkflowsMapByApplication: SubworkflowsTree) { super({ rootDir, entityNamePlural: "workflows", @@ -25,33 +25,26 @@ export class WorkflowsProcessor extends BaseWorkflowSubworkflowProcessor { this.subworkflowMapByApplication = subworkflowsMapByApplication; } - private get workflowSubworkflowMapByApplication(): { workflows: any; subworkflows: any } { - const workflowSubworkflowMapByApplication = { workflows: {}, subworkflows: {} } as any; - workflowSubworkflowMapByApplication.workflows = this.entityMapByApplication; - workflowSubworkflowMapByApplication.subworkflows = this.subworkflowMapByApplication; - return workflowSubworkflowMapByApplication; + private get workflowSubworkflowMapByApplication() { + return { + workflows: this.entityMapByApplication, + subworkflows: this.subworkflowMapByApplication, + }; } - protected buildEntityConfigs(): any[] { - const WorkflowCls = Workflow as any; - this.enablePredefinedIds(); - const configs: { appName: string; safeName: string; config: any; tags?: any[] }[] = []; + protected buildEntityConfigs(): WorkflowEntityConfig[] { + const configs: WorkflowEntityConfig[] = []; // For each application (from application_data.yml), look into its folder under assets/workflows/workflows/{appName} // and load all YAML files, preserving their relative paths to use as safeName in build/data output structure this.applications.forEach((appName) => { - const workflows = this.workflowSubworkflowMapByApplication.workflows[appName]; - if (!workflows) return; - Object.keys(workflows).forEach((workflowKey) => { - const workflowData = workflows[workflowKey]; - const workflow = createWorkflow({ + const workflows = this.entityMapByApplication[appName]; + + Object.entries(workflows || {}).forEach(([workflowKey, workflowData]) => { + const workflow = createWorkflow( appName, workflowData, - workflowSubworkflowMapByApplication: this.workflowSubworkflowMapByApplication, - workflowCls: WorkflowCls, - SubworkflowCls: Subworkflow, - UnitFactoryCls: UnitFactory, - unitBuilders: { ...builders, Workflow: WorkflowCls }, - }); + this.subworkflowMapByApplication, + ); const config = this.buildConfigFromEntityData( workflowData, workflowKey, @@ -64,7 +57,7 @@ export class WorkflowsProcessor extends BaseWorkflowSubworkflowProcessor { return configs; } - protected writeworkflowSubworkflowMapByApplication(): void { + protected writeWorkflowSubworkflowMapByApplication(): void { serverUtils.json.writeJSONFileSync( path.resolve( this.resolvedPaths.buildDir, @@ -75,7 +68,7 @@ export class WorkflowsProcessor extends BaseWorkflowSubworkflowProcessor { } public writeBuildDirectoryContent(): void { - this.writeworkflowSubworkflowMapByApplication(); + this.writeWorkflowSubworkflowMapByApplication(); super.writeDataDirectoryContent(); } } diff --git a/scripts/processors/types.ts b/scripts/processors/types.ts new file mode 100644 index 00000000..8bb0f72c --- /dev/null +++ b/scripts/processors/types.ts @@ -0,0 +1,60 @@ +/** + * Shared types for scripts/processors. + */ + +/** Map of category key -> set of string values (used when collecting categories from entities). */ +export type CategorySets = Record>; + +/** Object that can be used as a source for category/tag collection (lodash.get keys + optional tags). */ +export interface CategorySourceObject { + tags?: string[]; + categories?: Record; + [key: string]: unknown; +} + +/** Options for category collection in categorized entity processors. */ +export interface CategoryCollectOptions { + includeUnits?: boolean; + includeTags?: boolean; + includeEntitiesMap?: boolean; +} + +/** Single build artifact (relative path + JSON-serializable content). */ +export interface BuildArtifact { + relativePath: string; + content: unknown; +} + +/** Entity config produced by workflow/subworkflow processors for build/data output. */ +export interface WorkflowEntityConfig { + appName: string; + safeName: string; + config: unknown; + tags?: string[]; +} + +/** Entity data loaded from YAML with optional __path__ and tags (workflows/subworkflows). */ +export type WorkflowEntityData = T & { + __path__: string; + tags?: string[]; +}; + +/** Map: application name -> entity key -> entity data. */ +export type EntityMapByApplication = Record< + string, + Record> +>; + +/** Workflow/subworkflow map structure passed to createWorkflow/createSubworkflow. */ +export interface WorkflowSubworkflowMapByApplication { + workflows: Record>; + subworkflows: Record>>; +} + +/** Entity with optional path, name, and units (for methods/models). */ +export interface EntityWithPathAndUnits { + path?: string; + name?: string; + units?: Array<{ path?: string; [key: string]: unknown }>; + [key: string]: unknown; +} diff --git a/scripts/processors/utils/createSubworkflow.ts b/scripts/processors/utils/createSubworkflow.ts new file mode 100644 index 00000000..c8f1ecb1 --- /dev/null +++ b/scripts/processors/utils/createSubworkflow.ts @@ -0,0 +1,280 @@ +import type { + ApplicationSchema, + AssertionUnitSchema, + AssignmentUnitSchema, + ComputeArgumentsSchema, + ComputePropertySchema, + ConditionUnitSchema, + DataIOUnitSchema, + DFTModelSchema, + LegacyMethodPseudopotential, + RuntimeItemNameObjectSchema, + SubworkflowSchema, + UnknownModelSchema, + WorkflowBaseUnitSchema, +} from "@mat3ra/esse/dist/js/types"; +import { getDefaultComputeConfig } from "@mat3ra/ide"; +import { + default_methods as MethodConfigs, + default_models as ModelConfigs, + MethodConversionHandler, + MethodFactory, + ModelFactory, +} from "@mat3ra/mode"; + +import { type ApplicationConfig, ApplicationStandata } from "../../../src/js/application"; +import { ApplicationMethodStandata } from "../../../src/js/applicationMethod"; +import { + defaultAssertionUnit, + defaultAssignmentUnit, + defaultConditionUnit, + defaultIOUnit, +} from "./defaults"; +import { dynamicSubworkflowsByApp, getSurfaceEnergySubworkflowUnits } from "./dynamicSubworkflows"; +import ExecutionUnitConfigBuilder, { + type ExecutionConfig, +} from "./unitBuilders/ExecutionUnitConfigBuilder"; +import { + generateFlowChartId, + generateSubworkflowId, + setNextLinks, + setUnitsHead, + validateData, +} from "./utils"; + +type UnitConfig = { + type: T["type"]; + config: Partial>; +}; + +type AssignmentConfig = UnitConfig; +type IOConfig = UnitConfig; +type ConditionConfig = UnitConfig; +type AssertionConfig = UnitConfig; +type ExecutionBuilderConfig = ExecutionBuilderFunctionsConfig & + AttributesConfig & { + type: "executionBuilder"; + config: ExecutionConfig; + }; + +export type AnyUnitConfig = AttributesConfig & + (ExecutionBuilderConfig | AssignmentConfig | IOConfig | ConditionConfig | AssertionConfig); + +type MethodConfig = + | { + name: "PseudopotentialMethod"; + config?: Pick; + setSearchText?: string; + } + | { + name: "UnknownMethod" | "LocalOrbitalMethod"; + setSearchText?: string; + config?: object; + }; + +type ModelConfig = + | { + name: "UnknownModel"; + config?: Pick; + } + | { + name: "DFTModel"; + config?: Pick; + }; + +export type AttributesConfig = { + attributes?: { + name?: string; + [key: string]: unknown; + }; +}; + +type ExecutionBuilderFunctionsConfig = { + functions?: { + addResults?: RuntimeItemNameObjectSchema[]; + head?: boolean; + }; +}; + +type DynamicSubworkflow = { + name: "surfaceEnergy" | "getQpointIrrep"; + subfolder?: "espresso"; +}; + +export type SubworkflowFunctionsConfig = { + functions?: { + setDefaultCompute: null; + }; +}; + +type SubworkflowConfig = AttributesConfig & Partial & SubworkflowFunctionsConfig; + +export type SubworkflowData = { + name: string; + application: ApplicationConfig; + model: ModelConfig; + method: MethodConfig; + units: AnyUnitConfig[]; + config?: SubworkflowConfig; + dynamicSubworkflow?: DynamicSubworkflow; +}; + +function createModel(model: ModelConfig) { + const { name, config } = model; + + const modelConfigs = { + DFTModel: ModelConfigs.DFTModelConfig, + UnknownModel: ModelConfigs.UnknownModelConfig, + }; + + const defaultConfig = + modelConfigs[name as keyof typeof modelConfigs] || modelConfigs.UnknownModel; + + return ModelFactory.create({ ...defaultConfig, ...config }); +} + +function createMethod(config: MethodConfig, application: ApplicationSchema) { + const { name } = config; + const defaultConfig = MethodConfigs[`${name}Config`] || MethodConfigs.UnknownMethodConfig; + + const defaultConfigForApp = + new ApplicationMethodStandata().getDefaultMethodConfigForApplication(application); + + const defaultConfigForAppSimple = + defaultConfigForApp && defaultConfigForApp.units + ? MethodConversionHandler.convertToSimple(defaultConfigForApp) + : defaultConfigForApp; + + const method = MethodFactory.create({ + ...defaultConfig, + ...defaultConfigForAppSimple, + ...config.config, + }); + + return method; +} + +function createUnitSchema( + config: UnitConfig, + defaultUnitConfig: Partial> & { name: string }, +) { + const name = config.config.name || defaultUnitConfig.name; + const flowchartId = config.config.flowchartId || generateFlowChartId(name); + + return { + ...defaultUnitConfig, + ...config.config, + name, + flowchartId, + } as T; +} + +function createUnits(units: AnyUnitConfig[], application: ApplicationSchema, cache: string[] = []) { + return units.map((unitConfig) => { + if (unitConfig.type === "executionBuilder") { + return new ExecutionUnitConfigBuilder(unitConfig.config, application, cache) + .applyFunctions(unitConfig.functions) + .build(unitConfig.attributes); + } + + if (unitConfig.type === "assignment") { + return createUnitSchema(unitConfig, defaultAssignmentUnit); + } + if (unitConfig.type === "io") { + return createUnitSchema(unitConfig, defaultIOUnit); + } + if (unitConfig.type === "condition") { + return createUnitSchema(unitConfig, defaultConditionUnit); + } + if (unitConfig.type === "assertion") { + return createUnitSchema(unitConfig, defaultAssertionUnit); + } + + throw new Error(`Unit not recognized`); + }); +} + +function createDynamicUnits( + subworkflow: DynamicSubworkflow, + unit: T, + application: ApplicationSchema, +) { + const { name, subfolder } = subworkflow; + + if (name === "surfaceEnergy") { + return getSurfaceEnergySubworkflowUnits(unit); + } + + if (name === "getQpointIrrep") { + return subfolder ? dynamicSubworkflowsByApp[subfolder].getQpointIrrep(application) : []; + } + + throw new Error(`dynamicSubworkflow=${name} not recognized`); +} + +function applySubworkflowFunctions>( + subworkflow: T, + functionsConfig?: object, +) { + const functions = { + setDefaultCompute: (): ComputePropertySchema => { + return { compute: getDefaultComputeConfig() as ComputeArgumentsSchema }; + }, + }; + + return Object.entries(functionsConfig || {}).reduce((acc, [funcName]) => { + return { + ...acc, + ...functions[funcName]?.(), + }; + }, subworkflow); +} + +export default function createSubworkflow(subworkflowData: SubworkflowData, cache: string[] = []) { + const application = new ApplicationStandata().getApplication(subworkflowData.application); + const model = createModel(subworkflowData.model); + const method = createMethod(subworkflowData.method, application); + const units = createUnits(subworkflowData.units, application, cache); + + const { config, dynamicSubworkflow } = subworkflowData; + + const finalUnits = dynamicSubworkflow + ? createDynamicUnits(dynamicSubworkflow, units[0], application) + : units; + + const subworkflow: SubworkflowSchema = { + ...config, + _id: generateSubworkflowId( + config?.attributes?.name || subworkflowData.name, + application, + model, + method, + ), + name: subworkflowData.name, + application, + properties: Array.from( + new Set( + finalUnits + .map((x) => x.results?.map((r) => r.name) || []) + .flat() + .sort(), + ), + ), + model: { + ...model._json, + method: { + ...method._json, + data: { + ...method.data, + searchText: subworkflowData.method.setSearchText, + }, + }, + } as SubworkflowSchema["model"], + units: setNextLinks(setUnitsHead(units)), + ...config?.attributes, + }; + + const finalSubworkflow = applySubworkflowFunctions(subworkflow, config?.functions); + + return validateData(finalSubworkflow, "workflow/subworkflow"); +} diff --git a/scripts/processors/utils/createWorkflow.ts b/scripts/processors/utils/createWorkflow.ts new file mode 100644 index 00000000..cffcee1a --- /dev/null +++ b/scripts/processors/utils/createWorkflow.ts @@ -0,0 +1,264 @@ +import type { + MapUnitSchema, + SubworkflowSchema, + SubworkflowUnitSchema, + WorkflowSchema, +} from "@mat3ra/esse/dist/js/types"; + +import createSubworkflow, { + type AnyUnitConfig, + type AttributesConfig, + type SubworkflowData, + type SubworkflowFunctionsConfig, +} from "./createSubworkflow"; +import { defaultMapConfig, defaultSubworkflowUnitConfig } from "./defaults"; +import { + generateDefaultWorkflowId, + generateFlowChartId, + generateWorkflowId, + validateData, +} from "./utils"; + +type WorkflowUnitData = { + name: string; + type: "workflow"; + units: UnitData[]; + config?: WorkflowUnitConfig; +}; + +type SubworkflowUnitData = { + name: string; + type: "subworkflow"; + config?: AttributesConfig & SubworkflowFunctionsConfig & Partial; + unitConfigs?: SubworkflowUnitConfig[]; +}; + +type UnitData = WorkflowUnitData | SubworkflowUnitData; + +type UnitConfig = { + index: number; + type: + | "assignment" + | "condition" + | "processing" + | "io" + | "assertion" + | "executionBuilder" + | "reduce"; + config: AttributesConfig; +}; + +type WorkflowConfig = AttributesConfig & Partial; + +type WorkflowUnitConfig = WorkflowConfig & { + mapUnit?: boolean; + input: { + name: string; + }; +}; + +type SubworkflowUnitConfig = UnitConfig & { index: number }; + +export type WorkflowData = { + name: string; + units: UnitData[]; + config?: WorkflowConfig; +}; + +export type SubworkflowsTree = Record>; + +type WorkflowUnit = { + type: "workflow"; + config?: WorkflowUnitConfig; + workflow: WorkflowSchema; +}; + +type SubworkflowUnit = { + type: "subworkflow"; + subworkflow: SubworkflowSchema; +}; + +type AnyUnit = WorkflowUnit | SubworkflowUnit; + +function addMapUnitToWorkflow(workflow: WorkflowSchema, unit: WorkflowUnit) { + if (unit.type !== "workflow") { + throw new Error("Unit type does not match!"); + } + + if (!unit.config?.mapUnit) { + throw new Error("Not map unit!"); + } + + const workflowId = generateDefaultWorkflowId(); + + const mapUnit: MapUnitSchema = { + ...defaultMapConfig, + workflowId, + input: { ...defaultMapConfig.input, ...unit.config?.input }, + flowchartId: generateFlowChartId(defaultMapConfig.name), + }; + + const mapWorkflow: WorkflowSchema = { + _id: workflowId, + ...unit.workflow, + }; + + return { + ...workflow, + workflows: [...workflow.workflows, mapWorkflow], + units: [...workflow.units, mapUnit], + }; +} + +function addSubworkflowToWorkflow( + workflow: WorkflowSchema, + subworkflow: SubworkflowSchema, +): WorkflowSchema { + const name = subworkflow.name || defaultSubworkflowUnitConfig.name; + + const subworkflowUnit: SubworkflowUnitSchema = { + ...defaultSubworkflowUnitConfig, + _id: subworkflow._id, + name, + flowchartId: generateFlowChartId(name), + }; + + return { + ...workflow, + subworkflows: [...workflow.subworkflows, subworkflow], + units: [...workflow.units, subworkflowUnit], + }; +} + +function patchSubworkflowData( + subworkflow: SubworkflowData, + unitData: SubworkflowUnitData, +): SubworkflowData { + const subworkflowData: SubworkflowData = { + ...subworkflow, + config: { ...subworkflow.config, ...unitData.config }, + }; + + const unitConfigs = unitData.unitConfigs || []; + + return unitConfigs.reduce((acc, unitConfig): SubworkflowData => { + const { index } = unitConfig; + const workflowUnit = subworkflowData.units[index]; + + if (workflowUnit.type !== unitConfig.type) { + throw new Error("Unit type does not match!"); + } + + const newUnit = { + ...workflowUnit, + config: { + ...workflowUnit.config, + ...unitConfig.config.attributes, + }, + } as AnyUnitConfig; + + return { + ...acc, + units: [...acc.units.slice(0, index), newUnit, ...acc.units.slice(index + 1)], + }; + }, subworkflowData); +} + +function createSubworkflowFromUnitData( + appName: string, + unitData: SubworkflowUnitData, + subworkflows: SubworkflowsTree, + cache?: string[], +): SubworkflowSchema { + const subworkflowData = subworkflows[appName]?.[unitData.name]; + + if (!subworkflowData) { + throw new Error(`Subworkflow ${unitData.name} not found in ${appName}!`); + } + + const patchedSubworkflowData = patchSubworkflowData(subworkflowData, unitData); + + return createSubworkflow(patchedSubworkflowData, cache); +} + +function createWorkflowFromSubworkflow(subworkflow: SubworkflowSchema): WorkflowSchema { + const config: WorkflowSchema = { + _id: generateWorkflowId(subworkflow), + name: subworkflow.name, + subworkflows: [subworkflow], + units: [ + { + _id: subworkflow._id, + type: "subworkflow", + name: subworkflow.name, + preProcessors: [], + postProcessors: [], + monitors: [], + results: [], + flowchartId: generateFlowChartId(subworkflow.name), + }, + ], + properties: subworkflow.properties, + workflows: [], + }; + return config; +} + +function createWorkflowFromWorkflowData( + appName: string, + workflowData: WorkflowData, + subworkflows: SubworkflowsTree, + cache: string[] = [], +): WorkflowSchema { + const wfUnits = workflowData.units.map((unitData): AnyUnit => { + const { type } = unitData; + + if (type === "workflow") { + return { + type, + config: unitData.config, + workflow: createWorkflowFromWorkflowData(appName, unitData, subworkflows, cache), + }; + } + + return { + type, + subworkflow: createSubworkflowFromUnitData(appName, unitData, subworkflows, cache), + }; + }); + + const [firstUnit, ...restUnits] = wfUnits; + + if (!firstUnit) { + throw new Error("No units found!"); + } + + const workflow = + firstUnit.type === "workflow" + ? firstUnit.workflow + : createWorkflowFromSubworkflow(firstUnit.subworkflow); + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { name: _name, ...workflowWithUnits } = restUnits.reduce((acc, wfUnit) => { + return wfUnit.type === "workflow" + ? addMapUnitToWorkflow(acc, wfUnit) + : addSubworkflowToWorkflow(acc, wfUnit.subworkflow); + }, workflow); + + return { + name: workflowData.name, + ...workflowWithUnits, + }; +} + +export default function createWorkflow( + appName: string, + workflowData: WorkflowData, + subworkflows: SubworkflowsTree, +) { + console.log(`wode: creating ${appName} workflow ${workflowData.name}`); + + const workflow = createWorkflowFromWorkflowData(appName, workflowData, subworkflows, []); + + return validateData(workflow, "workflow"); +} diff --git a/scripts/processors/utils/defaults.ts b/scripts/processors/utils/defaults.ts new file mode 100644 index 00000000..f10e94f0 --- /dev/null +++ b/scripts/processors/utils/defaults.ts @@ -0,0 +1,88 @@ +import type { + AssertionUnitSchema, + AssignmentUnitSchema, + ConditionUnitSchema, + DataIOUnitSchema, + MapUnitSchema, + SubworkflowUnitSchema, + WorkflowBaseUnitSchema, +} from "@mat3ra/esse/dist/js/types"; + +export type DefaultUnitFields = + | "results" + | "monitors" + | "preProcessors" + | "postProcessors" + | "status" + | "statusTrack" + | "tags"; + +export type DefaultUnit = Readonly>; +export type DefaultConditionUnit = Readonly< + Omit +>; +export type DefaultAssignmentUnit = Readonly>; +export type DefaultAssertionUnit = Readonly>; +export type DefaultIOUnit = Readonly>; + +export const defaultUnit: DefaultUnit = { + results: [], + monitors: [], + preProcessors: [], + postProcessors: [], + status: "idle", + statusTrack: [], + tags: [], +}; + +export const defaultConditionUnit: DefaultConditionUnit = { + name: "condition", + type: "condition", + input: [], + statement: "true", + maxOccurrences: 100, + ...defaultUnit, +}; + +export const defaultAssignmentUnit: DefaultAssignmentUnit = { + name: "assignment", + type: "assignment", + operand: "X", + value: "1", + input: [], + ...defaultUnit, +}; + +export const defaultAssertionUnit: DefaultAssertionUnit = { + name: "assertion", + type: "assertion", + statement: "true", + errorMessage: "assertion failed", + ...defaultUnit, +} as const; + +export const defaultIOUnit: DefaultIOUnit = { + name: "io", + type: "io", + subtype: "input", + ...defaultUnit, +} as const; + +export const defaultMapConfig = { + name: "map", + type: "map", + input: { + target: "MAP_DATA", + scope: "global", + name: "", + values: [], + useValues: false, + }, + ...defaultUnit, +} as const satisfies Pick; + +export const defaultSubworkflowUnitConfig = { + type: "subworkflow", + name: "New Subworkflow", + ...defaultUnit, +} as const satisfies Pick; diff --git a/scripts/processors/utils/dynamicSubworkflows/espresso/getQpointIrrep.ts b/scripts/processors/utils/dynamicSubworkflows/espresso/getQpointIrrep.ts new file mode 100644 index 00000000..3325ab44 --- /dev/null +++ b/scripts/processors/utils/dynamicSubworkflows/espresso/getQpointIrrep.ts @@ -0,0 +1,34 @@ +import type { ApplicationSchema, AssignmentUnitSchema } from "@mat3ra/esse/dist/js/types"; + +import ExecutionUnitConfigBuilder from "../../unitBuilders/ExecutionUnitConfigBuilder"; + +function getQpointIrrep(application: ApplicationSchema) { + const config = { + name: "python", + execName: "python", + flavorName: "espresso_xml_get_qpt_irr", + }; + const pythonUnit = new ExecutionUnitConfigBuilder(config, application).build(); + + const assignmentUnit: AssignmentUnitSchema = { + name: "assignment", + type: "assignment", + input: [ + { + scope: pythonUnit.flowchartId, + name: "STDOUT", + }, + ], + operand: "Q_POINTS", + value: "json.loads(STDOUT)", + preProcessors: [], + postProcessors: [], + monitors: [], + results: [], + flowchartId: "assignment", + }; + + return [pythonUnit, assignmentUnit]; +} + +export default getQpointIrrep; diff --git a/scripts/processors/utils/dynamicSubworkflows/index.ts b/scripts/processors/utils/dynamicSubworkflows/index.ts new file mode 100644 index 00000000..0c725ba2 --- /dev/null +++ b/scripts/processors/utils/dynamicSubworkflows/index.ts @@ -0,0 +1,8 @@ +import getQpointIrrep from "./espresso/getQpointIrrep"; +import { getSurfaceEnergySubworkflowUnits } from "./surfaceEnergy"; + +const dynamicSubworkflowsByApp = { + espresso: { getQpointIrrep }, +} as const; + +export { getSurfaceEnergySubworkflowUnits, dynamicSubworkflowsByApp }; diff --git a/scripts/processors/utils/dynamicSubworkflows/surfaceEnergy.ts b/scripts/processors/utils/dynamicSubworkflows/surfaceEnergy.ts new file mode 100644 index 00000000..35c08aee --- /dev/null +++ b/scripts/processors/utils/dynamicSubworkflows/surfaceEnergy.ts @@ -0,0 +1,126 @@ +import type { WorkflowBaseUnitSchema } from "@mat3ra/esse/dist/js/types"; +import { Utils } from "@mat3ra/utils"; + +import AssertionUnitConfigBuilder from "../unitBuilders/AssertionUnitConfigBuilder"; +import AssignmentUnitConfigBuilder from "../unitBuilders/AssignmentUnitConfigBuilder"; +import IOUnitConfigBuilder from "../unitBuilders/IOUnitConfigBuilder"; + +function getIOUnitEndpointOptions(query: string, projection = "{}") { + return { + params: { + query, + projection, + }, + }; +} + +function getAssignmentUnitInput(unit: WorkflowBaseUnitSchema, name: string) { + return [ + { + name, + scope: unit.flowchartId, + }, + ]; +} + +function getSurfaceEnergySubworkflowUnits(scfUnit: T) { + let input, endpointOptions; + endpointOptions = getIOUnitEndpointOptions("{'_id': MATERIAL_ID}"); + const getSlabUnit = new IOUnitConfigBuilder("io-slab", "materials", endpointOptions).build(); + + input = getAssignmentUnitInput(getSlabUnit, "DATA"); + const setSlabUnit = new AssignmentUnitConfigBuilder("slab", "SLAB", "DATA[0]", input).build(); + + endpointOptions = getIOUnitEndpointOptions("{'_id': SLAB.metadata.bulkId}"); + const getBulkUnit = new IOUnitConfigBuilder("io-bulk", "materials", endpointOptions).build(); + + const BULKValue = "DATA[0] if DATA else None"; + input = getAssignmentUnitInput(getBulkUnit, "DATA"); + const setBulkUnit = new AssignmentUnitConfigBuilder("bulk", "BULK", BULKValue, input).build(); + + const assertBulkUnit = new AssertionUnitConfigBuilder( + "assert-bulk", + "BULK != None", + "Bulk material does not exist!", + ).build(); + + const query = Utils.str.removeNewLinesAndExtraSpaces(`{ + 'exabyteId': BULK.exabyteId, + 'data.name': 'total_energy', + 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} + }`); + // Do not confuse `sort` with `$sort`. `sort` is used in meteor collections and `$sort` is used in Mongo queries. + const projection = "{'sort': {'precision.value': -1}, 'limit': 1}"; + endpointOptions = getIOUnitEndpointOptions(query, projection); + const getEBulkUnit = new IOUnitConfigBuilder( + "io-e-bulk", + "refined-properties", + endpointOptions, + ).build(); + + input = getAssignmentUnitInput(getEBulkUnit, "DATA"); + const EBULKValue = "DATA[0].data.value if DATA else None"; + const setEBulkUnit = new AssignmentUnitConfigBuilder( + "e-bulk", + "E_BULK", + EBULKValue, + input, + ).build(); + + const assertEBulkUnit = new AssertionUnitConfigBuilder( + "assert-e-bulk", + "E_BULK != None", + "E_BULK does not exist!", + ).build(); + + const AValue = "np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))"; + const setSurfaceUnit = new AssignmentUnitConfigBuilder("surface", "A", AValue).build(); + + const setNBulkUnit = new AssignmentUnitConfigBuilder( + "n-bulk", + "N_BULK", + "len(BULK.basis.elements)", + ).build(); + const setNSlabUnit = new AssignmentUnitConfigBuilder( + "n-slab", + "N_SLAB", + "len(SLAB.basis.elements)", + ).build(); + + input = getAssignmentUnitInput(scfUnit, "total_energy"); + const setESlabUnit = new AssignmentUnitConfigBuilder( + "e-slab", + "E_SLAB", + "total_energy", + input, + ).build(); + + const results = [{ name: "surface_energy" }]; + const SEValue = "1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))"; + const surfaceEnergyUnit = new AssignmentUnitConfigBuilder( + "surface-energy", + "SURFACE_ENERGY", + SEValue, + [], + results, + ).build(); + + return [ + getSlabUnit, + setSlabUnit, + getBulkUnit, + setBulkUnit, + assertBulkUnit, + getEBulkUnit, + setEBulkUnit, + assertEBulkUnit, + setSurfaceUnit, + setNBulkUnit, + setNSlabUnit, + scfUnit, + setESlabUnit, + surfaceEnergyUnit, + ]; +} + +export { getSurfaceEnergySubworkflowUnits }; diff --git a/scripts/processors/utils/unitBuilders/AssertionUnitConfigBuilder.ts b/scripts/processors/utils/unitBuilders/AssertionUnitConfigBuilder.ts new file mode 100644 index 00000000..b5d9a624 --- /dev/null +++ b/scripts/processors/utils/unitBuilders/AssertionUnitConfigBuilder.ts @@ -0,0 +1,33 @@ +import type { AssertionUnitSchema } from "@mat3ra/esse/dist/js/types"; + +import { UnitConfigBuilder } from "./UnitConfigBuilder"; + +export default class AssertionUnitConfigBuilder extends UnitConfigBuilder<"assertion"> { + private _statement: string; + + private _errorMessage: string; + + constructor(name: string, statement: string, errorMessage: string) { + super({ name, type: "assertion" }); + this._statement = statement; + this._errorMessage = errorMessage; + } + + statement(str: string) { + this._statement = str; + return this; + } + + errorMessage(str: string) { + this._errorMessage = str; + return this; + } + + build(): AssertionUnitSchema { + return { + ...super.build(), + statement: this._statement, + errorMessage: this._errorMessage, + }; + } +} diff --git a/scripts/processors/utils/unitBuilders/AssignmentUnitConfigBuilder.ts b/scripts/processors/utils/unitBuilders/AssignmentUnitConfigBuilder.ts new file mode 100644 index 00000000..0eff52a6 --- /dev/null +++ b/scripts/processors/utils/unitBuilders/AssignmentUnitConfigBuilder.ts @@ -0,0 +1,51 @@ +import type { AssignmentUnitSchema, RuntimeItemNameObjectSchema } from "@mat3ra/esse/dist/js/types"; + +import { UnitConfigBuilder } from "./UnitConfigBuilder"; + +type Input = AssignmentUnitSchema["input"]; + +export default class AssignmentUnitConfigBuilder extends UnitConfigBuilder<"assignment"> { + private _variableName: string; + + private _variableValue: string; + + private _input: Input; + + constructor( + name: string, + variableName: string, + variableValue: string, + input: Input = [], + results: RuntimeItemNameObjectSchema[] = [], + ) { + super({ name, type: "assignment" }); + this._variableName = variableName; + this._variableValue = variableValue; + this._input = input; + this._results = results; + } + + input(input: Input) { + this._input = input; + return this; + } + + variableName(variableName: string) { + this._variableName = variableName; + return this; + } + + variableValue(variableValue: string) { + this._variableValue = variableValue; + return this; + } + + build(): AssignmentUnitSchema { + return { + ...super.build(), + input: this._input, + operand: this._variableName, + value: this._variableValue, + }; + } +} diff --git a/scripts/processors/utils/unitBuilders/ExecutionUnitConfigBuilder.ts b/scripts/processors/utils/unitBuilders/ExecutionUnitConfigBuilder.ts new file mode 100644 index 00000000..61e9cbed --- /dev/null +++ b/scripts/processors/utils/unitBuilders/ExecutionUnitConfigBuilder.ts @@ -0,0 +1,72 @@ +import type { + ApplicationSchema, + ExecutableSchema, + ExecutionUnitSchema, + FlavorSchema, +} from "@mat3ra/esse/dist/js/types"; + +import { ApplicationStandata } from "../../../../src/js/application"; +import { UnitConfigBuilder } from "./UnitConfigBuilder"; + +export type ExecutionConfig = { + name: string; + execName?: string; + flavorName?: string; + flowchartId?: string; +}; + +export default class ExecutionUnitConfigBuilder extends UnitConfigBuilder<"execution"> { + private application: ApplicationSchema; + + private executable: ExecutableSchema; + + private flavor: FlavorSchema; + + constructor(config: ExecutionConfig, application: ApplicationSchema, cache?: string[]) { + super({ name: config.name, type: "execution", flowchartId: config.flowchartId, cache }); + + const { executable, flavor } = new ApplicationStandata().getExecutableAndFlavorByName( + application.name, + config.execName, + config.flavorName, + ); + + this.application = application; + this.executable = executable; + this.flavor = flavor; + + this._results = this.flavor.results; + this._monitors = this.flavor.monitors; + this._preProcessors = this.flavor.preProcessors; + this._postProcessors = this.flavor.postProcessors; + } + + applyFunctions(functions: Record = {}) { + Object.entries(functions).forEach(([funcName, args]) => { + if (this[funcName]) { + if (args) { + this[funcName](args); + } else { + this[funcName](); + } + } + }); + return this; + } + + build(attributes: Record = {}): ExecutionUnitSchema { + return { + ...super.build(), + application: this.application, + executable: this.executable, + flavor: this.flavor, + input: new ApplicationStandata().getInput(this.flavor).map((input) => ({ + template: input, + rendered: "", + isManuallyChanged: false, + })), + context: [], + ...attributes, + }; + } +} diff --git a/scripts/processors/utils/unitBuilders/IOUnitConfigBuilder.ts b/scripts/processors/utils/unitBuilders/IOUnitConfigBuilder.ts new file mode 100644 index 00000000..14794fa6 --- /dev/null +++ b/scripts/processors/utils/unitBuilders/IOUnitConfigBuilder.ts @@ -0,0 +1,55 @@ +import type { DataIOUnitSchema } from "@mat3ra/esse/dist/js/types"; + +import { UnitConfigBuilder } from "./UnitConfigBuilder"; + +export default class IOUnitConfigBuilder extends UnitConfigBuilder<"io"> { + private _endpointName: string; + + private _endpointOptions: string; + + private _variableName: string; + + private _subtype: DataIOUnitSchema["subtype"]; + + private _source: DataIOUnitSchema["source"]; + + constructor(name: string, endpointName: string, endpointOptions: string) { + super({ name, type: "io" }); + this._endpointName = endpointName; + this._endpointOptions = endpointOptions; + this._variableName = "DATA"; + this._subtype = "input"; + this._source = "api"; + } + + variableName(variableName: string) { + this._variableName = variableName; + return this; + } + + subtype(subtype: DataIOUnitSchema["subtype"]) { + this._subtype = subtype; + return this; + } + + source(source: DataIOUnitSchema["source"]) { + this._source = source; + return this; + } + + build(): DataIOUnitSchema { + return { + ...super.build(), + subtype: this._subtype, + source: this._source, + input: [ + { + type: "api", + endpoint: this._endpointName, + endpoint_options: this._endpointOptions, + name: this._variableName, + }, + ], + } as const; + } +} diff --git a/scripts/processors/utils/unitBuilders/UnitConfigBuilder.ts b/scripts/processors/utils/unitBuilders/UnitConfigBuilder.ts new file mode 100644 index 00000000..3ea3b798 --- /dev/null +++ b/scripts/processors/utils/unitBuilders/UnitConfigBuilder.ts @@ -0,0 +1,108 @@ +import type { + RuntimeItemNameObjectSchema, + WorkflowBaseUnitSchema, + WorkflowSubworkflowUnitSchema, + WorkflowUnitSchema, +} from "@mat3ra/esse/dist/js/types"; + +import { defaultUnit } from "../defaults"; +import { generateBuilderFlowChartId } from "../utils"; + +type SubworkflowUnitType = WorkflowSubworkflowUnitSchema["type"]; +type WorkflowUnitType = WorkflowUnitSchema["type"]; +type UnitType = SubworkflowUnitType | WorkflowUnitType; + +type UnitConfigBuilderOptions = { + name: string; + type: T; + flowchartId?: string; + cache?: string[]; +}; + +function union(...arrays: T[][]): T[] { + return arrays.reduce((result, arr) => { + return arr.reduce((acc, item) => { + return acc.includes(item) ? acc : [...acc, item]; + }, result); + }, []); +} + +export class UnitConfigBuilder { + public type: T; + + private _flowchartId: string; + + private _name: string; + + private _head?: boolean; + + protected _results: RuntimeItemNameObjectSchema[]; + + protected _monitors: RuntimeItemNameObjectSchema[]; + + protected _preProcessors: RuntimeItemNameObjectSchema[]; + + protected _postProcessors: RuntimeItemNameObjectSchema[]; + + constructor({ name, type, flowchartId, cache }: UnitConfigBuilderOptions) { + this.type = type; + this._name = name; + this._head = false; + this._results = []; + this._monitors = []; + this._preProcessors = []; + this._postProcessors = []; + this._flowchartId = flowchartId || generateBuilderFlowChartId(name, cache); + } + + name(name: string) { + this._name = name; + return this; + } + + head(head: boolean) { + this._head = head; + return this; + } + + flowchartId(flowchartId: string) { + this._flowchartId = flowchartId; + return this; + } + + addPreProcessors(preProcessorNames: RuntimeItemNameObjectSchema[]) { + this._preProcessors = union(preProcessorNames, this._preProcessors); + return this; + } + + addPostProcessors(postProcessorNames: RuntimeItemNameObjectSchema[]) { + this._postProcessors = union(postProcessorNames, this._postProcessors); + return this; + } + + addResults(resultNames: RuntimeItemNameObjectSchema[]) { + this._results = union(resultNames, this._results); + return this; + } + + addMonitors(monitorNames: RuntimeItemNameObjectSchema[]) { + this._monitors = union(monitorNames, this._monitors); + return this; + } + + build(): WorkflowBaseUnitSchema & { type: T } { + return { + type: this.type, + name: this._name, + head: this._head, + results: this._results, + monitors: this._monitors, + flowchartId: this._flowchartId, + preProcessors: this._preProcessors, + postProcessors: this._postProcessors, + status: defaultUnit.status, + statusTrack: defaultUnit.statusTrack, + tags: defaultUnit.tags, + }; + } +} diff --git a/scripts/processors/utils/utils.ts b/scripts/processors/utils/utils.ts new file mode 100644 index 00000000..c93182ee --- /dev/null +++ b/scripts/processors/utils/utils.ts @@ -0,0 +1,98 @@ +import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterfaceServer"; +import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types"; +import type { + ApplicationSchema, + BaseMethod, + BaseModel, + SubworkflowSchema, + WorkflowBaseUnitSchema, +} from "@mat3ra/esse/dist/js/types"; +import * as ajv from "@mat3ra/esse/dist/js/utils/ajv"; +import { Utils } from "@mat3ra/utils"; + +export function validateData(data: T, schemaId: string): T { + const jsonSchema = JSONSchemasInterface.getSchemaById(schemaId); + if (!jsonSchema) { + throw new Error(`Schema not found for ${schemaId}`); + } + const result = ajv.validateAndClean(data as AnyObject, jsonSchema, { coerceTypes: false }); + + if (!result.isValid) { + throw new Error(JSON.stringify({ error: result?.errors, json: data, schema: jsonSchema })); + } + + return data; +} + +export function generateDefaultWorkflowId() { + return Utils.uuid.getUUID(); +} + +export function generateFlowChartId(unitName: string) { + return Utils.uuid.getUUIDFromNamespace(`flowchart-${unitName}`); +} + +export function generateBuilderFlowChartId(seed: string, cache: string[] = []) { + const countInCache = cache.filter((s) => s === seed).length; + cache.push(seed); + + const suffix = countInCache > 0 ? `-${countInCache}` : ""; + const seedWithSuffix = `${seed}${suffix}`; + return Utils.uuid.getUUIDFromNamespace(seedWithSuffix); +} + +export function generateWorkflowId(subworkflow: SubworkflowSchema) { + const { name, properties, application } = subworkflow; + const propsInfo = properties?.length ? properties.sort().join(",") : ""; + const swInfo = [subworkflow].map((sw) => sw.name || "unknown").join(","); + const seed = [`workflow-${name}`, application.name, propsInfo, swInfo] + .filter((p) => p) + .join("-"); + + return Utils.uuid.getUUIDFromNamespace(seed); +} + +export function generateSubworkflowId( + name: string, + application?: ApplicationSchema, + model?: BaseModel, + method?: BaseMethod, +) { + const appName = application?.name || ""; + const modelInfo = model ? `${model.type}-${model.subtype || ""}` : ""; + const methodInfo = method ? `${method.type}-${method.subtype || ""}` : ""; + const seed = [`subworkflow-${name}`, appName, modelInfo, methodInfo].filter((p) => p).join("-"); + + return Utils.uuid.getUUIDFromNamespace(seed); +} + +/** + * @summary set the head of an array of units + */ +export function setUnitsHead(units: T[]) { + if (units.length > 0) { + units[0].head = true; + for (let i = 1; i < units.length; i++) { + units[i].head = false; + } + } + return units; +} + +/** + * @summary Re-establishes the linked `next => flowchartId` logic in an array of units + */ +export function setNextLinks(units: T[]) { + const flowchartIds = units.map((u) => u.flowchartId); + for (let i = 0; i < units.length - 1; i++) { + if (!units[i].next) { + // newly added units don't have next set yet => set it + units[i].next = units[i + 1].flowchartId; + if (i > 0) units[i - 1].next = units[i].flowchartId; + } else if (!flowchartIds.includes(units[i].next ?? "")) { + // newly removed units may create broken next links => fix it + units[i].next = units[i + 1].flowchartId; + } + } + return units; +} diff --git a/scripts/utils.ts b/scripts/utils.ts index 3ee3fc4f..aa688990 100644 --- a/scripts/utils.ts +++ b/scripts/utils.ts @@ -1,6 +1,4 @@ -// eslint-disable-next-line import/no-extraneous-dependencies import { JsYamlAllSchemas } from "@mat3ra/code/dist/js/utils"; -// eslint-disable-next-line import/no-extraneous-dependencies import serverUtils from "@mat3ra/utils/server"; import * as fs from "fs"; import * as yaml from "js-yaml"; @@ -16,11 +14,11 @@ const ignoreType = new yaml.Type("!ignore", { const schemaWithIgnore = JsYamlAllSchemas.extend([ignoreType]); -export function readYAMLFileResolved(filePath: string): any { - return serverUtils.yaml.readYAMLFile(filePath, { schema: schemaWithIgnore }); +export function readYAMLFileResolved(filePath: string): T { + return serverUtils.yaml.readYAMLFile(filePath, { schema: schemaWithIgnore }) as T; } -export function hasIgnoreDirective(data: any): boolean { +export function hasIgnoreDirective(data?: { [IGNORE_MARKER]?: boolean }): boolean { return data?.[IGNORE_MARKER] === true; } @@ -28,27 +26,29 @@ export function resolveFromRoot(scriptDirname: string, ...pathSegments: string[] return path.resolve(scriptDirname, "../..", ...pathSegments); } +type BuildJSONOptions = { + assetPath: string; + targetPath: string; + workingDir?: string; + spaces?: number; +}; + /** * Converts YAML file to JSON, optionally resolving relative includes from a working directory */ -export function buildJSONFromYAMLInDir({ +export function buildJSONFromYAMLInDir({ assetPath, targetPath, workingDir, spaces = 0, -}: { - assetPath: string; - targetPath: string; - workingDir?: string; - spaces?: number; -}): any { +}: BuildJSONOptions) { const originalCwd = process.cwd(); try { if (workingDir) { process.chdir(workingDir); } - const data = readYAMLFileResolved(assetPath); + const data = readYAMLFileResolved(assetPath); const resolvedTargetPath = workingDir ? path.resolve(originalCwd, targetPath) : targetPath; serverUtils.json.writeJSONFileSync(resolvedTargetPath, data, { @@ -75,9 +75,12 @@ function removeYAMLExtension(filePath: string): string { * Processes a single YAML file with a callback. * Skips files marked with !ignore directive. */ -function processYAMLFile(filePath: string, callback: (filePath: string, data: any) => void): void { +function processYAMLFile( + filePath: string, + callback: (filePath: string, data: T) => void, +): void { try { - const data = readYAMLFileResolved(filePath); + const data = readYAMLFileResolved(filePath); if (hasIgnoreDirective(data)) { console.log(` Ignoring: ${filePath} (marked with !ignore)`); return; @@ -91,16 +94,19 @@ function processYAMLFile(filePath: string, callback: (filePath: string, data: an /** * Recursively traverses a path and processes YAML files. */ -function traversePath(currentPath: string, callback: (filePath: string, data: any) => void): void { +function traversePath( + currentPath: string, + callback: (filePath: string, data: T) => void, +): void { if (!fs.existsSync(currentPath)) return; const stat = fs.statSync(currentPath); if (stat.isDirectory()) { const items = fs.readdirSync(currentPath); - items.forEach((item) => traversePath(path.join(currentPath, item), callback)); + items.forEach((item) => traversePath(path.join(currentPath, item), callback)); } else if (stat.isFile() && isYAMLFile(currentPath)) { - processYAMLFile(currentPath, callback); + processYAMLFile(currentPath, callback); } } @@ -108,21 +114,21 @@ function traversePath(currentPath: string, callback: (filePath: string, data: an * Traverses a directory and processes YAML files with a callback. * Skips files marked with !ignore directive. */ -export function traverseYAMLFiles( +export function traverseYAMLFiles( rootPath: string, - callback: (filePath: string, data: any) => void, + callback: (filePath: string, data: T) => void, ): void { - traversePath(rootPath, callback); + traversePath(rootPath, callback); } /** * Loads a directory tree of YAML files into a nested object structure. * Uses lodash-compatible object paths for nested structure. */ -export function loadYAMLTree(rootPath: string): Record { - const tree: Record = {}; +export function loadYAMLTree(rootPath: string): Record { + const tree: Record = {}; - traverseYAMLFiles(rootPath, (filePath, data) => { + traverseYAMLFiles(rootPath, (filePath, data) => { const objectPath = serverUtils.file.createObjectPathFromFilePath(filePath, rootPath); lodash.set(tree, objectPath, data); }); @@ -164,10 +170,10 @@ export function encodeDataAsURLPath( * classification_tail: { __path__: "ml/classification_tail", ... } * } */ -export function loadYAMLFilesAsMap(dirPath: string): Record { - const result: Record = {}; +export function loadYAMLFilesAsMap(dirPath: string) { + const result: Record = {}; - traverseYAMLFiles(dirPath, (filePath, data) => { + traverseYAMLFiles(dirPath, (filePath, data) => { const key = removeYAMLExtension(path.basename(filePath)); const relativePath = removeYAMLExtension(path.relative(dirPath, filePath)); result[key] = { __path__: relativePath, ...data }; diff --git a/scripts/workflows/build_workflows.ts b/scripts/workflows/build_workflows.ts index 89e0c4f9..8e67bfa7 100644 --- a/scripts/workflows/build_workflows.ts +++ b/scripts/workflows/build_workflows.ts @@ -1,7 +1,13 @@ -// eslint-disable-next-line import/no-extraneous-dependencies +import JSONSchemasInterface from "@mat3ra/esse/dist/js/esse/JSONSchemasInterface"; +import schemas from "@mat3ra/esse/dist/js/schemas.json"; +import type { JSONSchema7 } from "json-schema"; + import { SubworkflowsProcessor } from "../processors/SubworkflowsProcessor"; import { WorkflowsProcessor } from "../processors/WorkflowsProcessor"; +// Running this to set schemas for validation, removing the redundant data from application-flavors tree: `flavors` +JSONSchemasInterface.setSchemas(schemas as JSONSchema7[]); + const subworkflowsProcessor = new SubworkflowsProcessor(__dirname); subworkflowsProcessor.process(); diff --git a/src/js/application.ts b/src/js/application.ts index af95305b..b1777968 100644 --- a/src/js/application.ts +++ b/src/js/application.ts @@ -1,5 +1,5 @@ /* eslint-disable class-methods-use-this */ -import type { ApplicationSchema, TemplateSchema } from "@mat3ra/esse/dist/js/types"; +import type { ApplicationSchema, FlavorSchema, TemplateSchema } from "@mat3ra/esse/dist/js/types"; import { Standata } from "./base"; import APPLICATIONS from "./runtime_data/applications.json"; @@ -9,9 +9,7 @@ import TEMPLATES_LIST_RAW from "./runtime_data/applications/templatesList.json"; import { ApplicationExecutableTree, ApplicationVersionsMapByApplicationType, - ApplicationVersionsMapType, } from "./types/application"; -import { ApplicationVersionsMap } from "./utils/applicationVersionMap"; const TEMPLATES_LIST = TEMPLATES_LIST_RAW as TemplateSchema[]; const APP_VERSIONS = APPLICATION_VERSIONS_MAP as ApplicationVersionsMapByApplicationType; @@ -23,10 +21,29 @@ export enum TAGS { DEFAULT_BUILD = "default_build", } +export type ApplicationConfig = { + name: string; + version?: string; + build?: string; +}; + +type ApplicationVersion = { + [build: string]: ApplicationSchema; +}; + +type ApplicationTreeItem = { + defaultVersion: string; + versions: { + [version: string]: ApplicationVersion; + }; +}; + +type ApplicationTree = Record; + export class ApplicationStandata extends Standata { static runtimeData = APPLICATIONS; - getAppDataForApplication(appName: string): ApplicationVersionsMapType { + private getAppDataForApplication(appName: string) { const applicationVersionsMap = APP_VERSIONS[appName]; if (!applicationVersionsMap) { @@ -35,7 +52,7 @@ export class ApplicationStandata extends Standata { return applicationVersionsMap; } - getAppTreeForApplication(appName: string) { + private getAppTreeForApplication(appName: string) { // TODO: Convert to use this.findEntitiesByTags() when tree data is in Standata format const executableData = EXECUTABLE_FLAVOR; @@ -43,7 +60,22 @@ export class ApplicationStandata extends Standata { throw new Error(`${appName} is not a known application with executable tree.`); } - return executableData[appName]; + const appTree = executableData[appName]; + + return Object.fromEntries( + Object.entries(appTree).map(([name, exec]) => { + return [ + name, + { + preProcessors: [], + postProcessors: [], + applicationId: [], + ...exec, + name, + }, + ]; + }), + ); } getAllAppTemplates(): TemplateSchema[] { @@ -57,7 +89,7 @@ export class ApplicationStandata extends Standata { } // TODO: move to parent class Standata - getAllApplicationNames() { + private getAllApplicationNames() { const allApps = this.getAll(); const uniqueNames = new Set(allApps.map((app) => app.name)); return Array.from(uniqueNames); @@ -91,24 +123,14 @@ export class ApplicationStandata extends Standata { } static getDefaultVersionForApplication(appName: string) { - const applicationVersionsMap = new ApplicationVersionsMap(APP_VERSIONS[appName]); - return applicationVersionsMap.defaultVersion; + return APP_VERSIONS[appName].defaultVersion; } - static getDefaultBuildForApplicationAndVersion(appName: string, version: string): string { - const applicationVersionsMap = new ApplicationVersionsMap(APP_VERSIONS[appName]); - const versionConfig = applicationVersionsMap.versionConfigs.find( - (config) => config.version === version && config.isDefault, - ); - if (!versionConfig) { - throw new Error(`No default build found for ${appName} with version ${version}`); - } - if (!versionConfig.build) { - throw new Error( - `No build specified for default config of ${appName} with version ${version}`, - ); - } - return versionConfig.build; + static getDefaultBuildForApplicationAndVersion(appName: string, version: string) { + const versionConfig = APP_VERSIONS[appName].versions.find((config) => { + return config.version === version && config.isDefault; + }); + return versionConfig?.build ?? null; } // TODO: move to parent class Standata, name and generic parameters @@ -140,4 +162,142 @@ export class ApplicationStandata extends Standata { const { name, shortName, version, summary, build } = fullConfig; return { name, shortName, version, summary, build }; } + + private applicationsTree?: ApplicationTree; + + private applications?: ApplicationSchema[]; + + public getApplicationsTree() { + if (this.applicationsTree) { + return this.applicationsTree; + } + + const applicationNames = this.getAllApplicationNames(); + + this.applicationsTree = applicationNames.reduce((tree, appName) => { + const { versions, defaultVersion, ...appData } = this.getAppDataForApplication(appName); + + return { + ...tree, + [appName]: { + defaultVersion, + versions: versions.reduce( + (acc, versionInfo) => { + return { + ...acc, + [versionInfo.version]: { + ...acc[versionInfo.version], + [versionInfo.build]: { + ...appData, + ...versionInfo, + }, + }, + }; + }, + {}, + ), + }, + }; + }, {}); + + return this.applicationsTree; + } + + public getApplications() { + if (this.applications) { + return this.applications; + } + + const tree = this.getApplicationsTree(); + + this.applications = Object.values(tree).flatMap((appTreeItem) => { + return Object.values(appTreeItem.versions).flatMap((version) => { + return Object.values(version).flat(); + }); + }); + + return this.applications; + } + + public getApplicationTreeItem(appName: string) { + const tree = this.getApplicationsTree(); + const app = tree[appName]; + + if (!app) { + throw new Error(`Application ${appName} not found`); + } + + return app; + } + + public getApplication({ name, version, build }: ApplicationConfig) { + const appTreeItem = this.getApplicationTreeItem(name); + const { defaultVersion } = appTreeItem; + const appVersion = appTreeItem.versions[version || defaultVersion]; + + const application = build + ? appVersion[build] + : Object.values(appVersion).find((build) => build.isDefault); + + if (!application) { + throw new Error( + `Application ${name} not found with version ${version} and build ${build}`, + ); + } + + return application; + } + + getExecutableByName(appName: string, execName?: string) { + const appTree = this.getAppTreeForApplication(appName); + + const config = + execName && appTree[execName] + ? appTree[execName] + : Object.values(appTree).find((exec) => exec.isDefault); + + if (!config) { + throw new Error(`Executable ${execName} not found for application ${appName}`); + } + + return config; + } + + getExecutableAndFlavorByName(appName: string, execName?: string, flavorName?: string) { + const executable = this.getExecutableByName(appName, execName); + const flavor = Object.entries(executable.flavors) + .map(([name, flavor]) => { + return { name, results: [], preProcessors: [], postProcessors: [], ...flavor }; + }) + .find(({ name, isDefault }) => { + return flavorName ? name === flavorName : isDefault; + }); + + if (!flavor) { + throw new Error( + `Flavor ${flavorName} not found for executable ${execName} in application ${appName}`, + ); + } + + return { executable, flavor }; + } + + getInput(flavor: FlavorSchema): TemplateSchema[] { + const appName = flavor.applicationName || ""; + const execName = flavor.executableName || ""; + + return flavor.input.map((input): TemplateSchema => { + const inputName = input.templateName || input.name; + + const filtered = this.getTemplatesByName(appName, execName, inputName); + + if (filtered.length !== 1) { + console.log( + `found ${filtered.length} templates for app=${appName} exec=${execName} name=${inputName} expected 1`, + ); + } + + return { ...filtered[0], name: input.name || "" }; + }); + } } diff --git a/src/js/applicationMethod.ts b/src/js/applicationMethod.ts index 8a7dbb30..486981d7 100644 --- a/src/js/applicationMethod.ts +++ b/src/js/applicationMethod.ts @@ -1,3 +1,5 @@ +import type { ApplicationSchema } from "@mat3ra/esse/dist/js/types"; + import { MethodStandata } from "./method"; import MODEL_METHOD_DATA from "./runtime_data/applications/modelMethodMapByApplication.json"; import { ApplicationMethodParametersInterface } from "./types/applicationFilter"; @@ -31,8 +33,8 @@ export class ApplicationMethodStandata extends ApplicationFilterStandata { return this.getAvailableEntities(name); } - getDefaultMethodConfigForApplication(applicationConfig: any): any { - const { name, version, build, executable, flavor } = applicationConfig; + getDefaultMethodConfigForApplication(application: ApplicationSchema) { + const { name, version, build /* executable, flavor */ } = application; const availableMethods = this.getAvailableMethods(name); if (!availableMethods || Object.keys(availableMethods).length === 0) { @@ -47,8 +49,8 @@ export class ApplicationMethodStandata extends ApplicationFilterStandata { name, version, build, - executable, - flavor, + // executable, + // flavor, ); } } diff --git a/src/js/types/application.ts b/src/js/types/application.ts index 29e21c88..4bbcc13f 100644 --- a/src/js/types/application.ts +++ b/src/js/types/application.ts @@ -1,38 +1,40 @@ import { ApplicationSchema, ExecutableSchema, FlavorSchema } from "@mat3ra/esse/dist/js/types"; -type OptionalExecutableSchema = Partial; +type VersionFields = "isDefault" | "build" | "hasAdvancedComputeOptions" | "version"; +type ApplicationFields = "name" | "shortName" | "summary" | "isLicensed"; -export type ApplicationVersionInfo = Pick< - ApplicationSchema, - "isDefault" | "build" | "hasAdvancedComputeOptions" | "version" ->; +export type ApplicationVersion = Pick; -export type ApplicationVersionsMapType = Pick< - ApplicationSchema, - "name" | "shortName" | "summary" | "isLicensed" -> & { +export type ApplicationConfigItem = Pick & { // TODO: defaultVersion should come from ESSE defaultVersion: string; - versions: ApplicationVersionInfo[]; + versions: ApplicationVersion[]; }; export type ApplicationVersionsMapByApplicationType = { - [key: string]: ApplicationVersionsMapType; + [key: string]: ApplicationConfigItem; }; type OptionalFlavorSchema = Partial; +type RequiredFlavorFields = + | "input" + | "monitors" + | "applicationName" + | "executableName" + | "isDefault"; +type OptionalFlavorFields = "results"; + +type FlavorConfig = Pick & + Pick; -type Flavor = Pick & - Pick; +type OptionalExecutableSchema = Partial; +type RequiredExecutableFields = "hasAdvancedComputeOptions" | "isDefault" | "monitors" | "results"; +type OptionalExecutableFields = "postProcessors"; -export type ExecutableTreeItem = Pick< - ExecutableSchema, - "hasAdvancedComputeOptions" | "isDefault" | "monitors" | "results" -> & - Pick & { +export type ExecutableTreeItem = Pick & + Pick & { + flavors: Record; supportedApplicationVersions?: ApplicationSchema["version"][]; - flavors?: Record; - [key: string]: any; }; export type ApplicationExecutableTree = Record>; diff --git a/src/js/utils/applicationVersionMap.ts b/src/js/utils/applicationVersionMap.ts index bce6e304..ffcbcce8 100644 --- a/src/js/utils/applicationVersionMap.ts +++ b/src/js/utils/applicationVersionMap.ts @@ -1,9 +1,9 @@ // eslint-disable-next-line import/no-extraneous-dependencies import { ApplicationSchema } from "@mat3ra/esse/dist/js/types"; -import { ApplicationVersionInfo, ApplicationVersionsMapType } from "../types/application"; +import { ApplicationConfigItem, ApplicationVersion } from "../types/application"; -export class ApplicationVersionsMap implements ApplicationVersionsMapType { +export class ApplicationVersionsMap implements ApplicationConfigItem { shortName: string; summary: string; @@ -12,11 +12,11 @@ export class ApplicationVersionsMap implements ApplicationVersionsMapType { defaultVersion: string; - versions: ApplicationVersionInfo[]; + versions: ApplicationVersion[]; - map: ApplicationVersionsMapType; + map: ApplicationConfigItem; - constructor(config: ApplicationVersionsMapType) { + constructor(config: ApplicationConfigItem) { this.map = config; this.defaultVersion = config.defaultVersion; this.versions = config.versions; diff --git a/src/py/mat3ra/standata/data/subworkflows.py b/src/py/mat3ra/standata/data/subworkflows.py index dbba59d3..56b29665 100644 --- a/src/py/mat3ra/standata/data/subworkflows.py +++ b/src/py/mat3ra/standata/data/subworkflows.py @@ -1,3 +1,3 @@ import json -subworkflows_data = json.loads(r'''{"standataConfig":{"categories":{"properties":["atomic_forces","average_potential_profile","band_gaps","band_structure","charge_density_profile","density_of_states","dielectric_tensor","fermi_energy","file_content","final_structure","phonon_dispersions","phonon_dos","potential_profile","pressure","reaction_energy_barrier","reaction_energy_profile","stress_tensor","total_energy","total_energy_contributions","total_force","valence_band_offset","wavefunction_amplitude","workflow:pyml_predict","zero_point_energy"],"tags":["creates-predictions-csv-during-predict-phase","default","pyml:workflow-type-setter","remove-all-results","set-io-unit-filenames","variable-cell_relaxation","wfn","wfn_plot"],"application":["espresso","nwchem","python","shell","vasp"]},"entities":[{"filename":"espresso/average_electrostatic_potential_find_minima.json","categories":["espresso","python"]},{"filename":"espresso/average_electrostatic_potential_via_band_structure.json","categories":["atomic_forces","average_potential_profile","band_gaps","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/average_electrostatic_potential.json","categories":["atomic_forces","average_potential_profile","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_gap_hse_dos.json","categories":["atomic_forces","band_gaps","density_of_states","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_gap.json","categories":["atomic_forces","band_gaps","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_structure_dos.json","categories":["atomic_forces","band_gaps","band_structure","density_of_states","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_structure_hse.json","categories":["atomic_forces","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_structure_magn.json","categories":["atomic_forces","band_structure","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_structure_soc.json","categories":["atomic_forces","band_structure","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_structure.json","categories":["atomic_forces","band_structure","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/dielectric_tensor.json","categories":["atomic_forces","band_gaps","dielectric_tensor","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/dos.json","categories":["atomic_forces","band_gaps","density_of_states","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/electronic_density_mesh.json","categories":["atomic_forces","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/esm_relax.json","categories":["atomic_forces","charge_density_profile","espresso","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/esm.json","categories":["atomic_forces","charge_density_profile","espresso","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/espresso_extract_kpoints.json","categories":["espresso","python"]},{"filename":"espresso/espresso_xml_get_qpt_irr.json","categories":["espresso","python"]},{"filename":"espresso/fixed_cell_relaxation.json","categories":["atomic_forces","espresso","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"]},{"filename":"espresso/gw_band_structure_band_gap_full_frequency.json","categories":["atomic_forces","band_gaps","band_structure","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/gw_band_structure_band_gap_plasmon_pole.json","categories":["atomic_forces","band_gaps","band_structure","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/kpoint_convergence.json","categories":["atomic_forces","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_force"]},{"filename":"espresso/neb.json","categories":["espresso","reaction_energy_barrier","reaction_energy_profile"]},{"filename":"espresso/ph_init_qpoints.json","categories":["espresso"]},{"filename":"espresso/ph_single_irr_qpt.json","categories":["espresso"]},{"filename":"espresso/phonon_dispersions.json","categories":["atomic_forces","espresso","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/phonon_dos_dispersion.json","categories":["atomic_forces","espresso","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/phonon_dos.json","categories":["atomic_forces","espresso","fermi_energy","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/phonon_reduce.json","categories":["espresso","phonon_dispersions","phonon_dos"]},{"filename":"espresso/plot_wavefunction.json","categories":["espresso","file_content","python"]},{"filename":"espresso/post_processor.json","categories":["espresso","shell"]},{"filename":"espresso/pre_processor.json","categories":["espresso","shell"]},{"filename":"espresso/pw_scf.json","categories":["atomic_forces","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/recalculate_bands.json","categories":["band_structure","espresso"]},{"filename":"espresso/surface_energy.json","categories":["atomic_forces","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/total_energy.json","categories":["atomic_forces","default","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/valence_band_offset_calc_from_previous_esp_vbm.json","categories":["espresso","python","valence_band_offset"]},{"filename":"espresso/variable_cell_relaxation.json","categories":["atomic_forces","espresso","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force","variable-cell_relaxation"]},{"filename":"espresso/wavefunction_amplitude.json","categories":["atomic_forces","band_structure","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude","wfn","wfn_plot"]},{"filename":"espresso/zero_point_energy.json","categories":["atomic_forces","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"]},{"filename":"nwchem/total_energy.json","categories":["nwchem","total_energy","total_energy_contributions"]},{"filename":"python/ml/classification_tail.json","categories":["creates-predictions-csv-during-predict-phase","file_content","python","remove-all-results","workflow:pyml_predict"]},{"filename":"python/ml/clustering_tail.json","categories":["creates-predictions-csv-during-predict-phase","file_content","python","remove-all-results","workflow:pyml_predict"]},{"filename":"python/ml/regression_tail.json","categories":["creates-predictions-csv-during-predict-phase","file_content","python","remove-all-results","workflow:pyml_predict"]},{"filename":"python/ml/train_head.json","categories":["pyml:workflow-type-setter","python","set-io-unit-filenames"]},{"filename":"python/python_script.json","categories":["python"]},{"filename":"shell/batch_espresso_pwscf.json","categories":["shell"]},{"filename":"shell/hello_world.json","categories":["shell"]},{"filename":"vasp/band_gap.json","categories":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/band_structure_dos.json","categories":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/band_structure.json","categories":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/dos.json","categories":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/fixed_cell_relaxation.json","categories":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force","vasp"]},{"filename":"vasp/initial_final_total_energies.json","categories":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/kpoint_convergence.json","categories":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/neb_subworkflow.json","categories":["reaction_energy_barrier","reaction_energy_profile","vasp"]},{"filename":"vasp/prepare_images.json","categories":["shell","vasp"]},{"filename":"vasp/recalculate_bands.json","categories":["band_structure","vasp"]},{"filename":"vasp/surface_energy.json","categories":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/total_energy.json","categories":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/variable_cell_relaxation.json","categories":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force","variable-cell_relaxation","vasp"]},{"filename":"vasp/zero_point_energy.json","categories":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_force","vasp","zero_point_energy"]}]},"filesMapByName":{"espresso/average_electrostatic_potential_find_minima.json":{"_id":"e5bee93f-2b6b-5d91-9a53-5ed309a918d3","name":"Find ESP Value","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Find Extrema","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"python-find-extrema","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":["standard_output"],"name":"generic:processing:find_extrema:scipy","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","rendered":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\nY = np.array({{array_from_context}})\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","schemaVersion":"2022.8.16"}],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d"},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema"}],"status":"idle","statusTrack":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]},"espresso/average_electrostatic_potential_via_band_structure.json":{"isMultiMaterial":true,"_id":"09f5f4ff-7dbd-59ae-ad27-5af1bdfc2bd0","name":"Band Structure + average ESP","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_gaps","average_potential_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"name":"Set Material Index","type":"assignment","operand":"MATERIAL_INDEX","value":0,"input":[],"status":"idle","statusTrack":[],"flowchartId":"2d360607-c739-54ad-97a0-8a83f0971f2c","tags":[],"head":true,"next":"9fc7a088-5533-5f70-bb33-f676ec65f565","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"pw-bands-calculate-band-gap"},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"a667d9fd-35d5-5897-be0e-fa0247233649"},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap"}],"status":"idle","statusTrack":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","tags":[],"head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"status":"idle","statusTrack":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","tags":[],"head":false,"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde"},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":["standard_output"],"results":[],"name":"pp_electrostatic_potential","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","schemaVersion":"2022.8.16"}],"next":"average-electrostatic-potential"},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":["standard_output"],"results":["average_potential_profile"],"name":"average_potential","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","rendered":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","schemaVersion":"2022.8.16"}],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9"},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential"}],"status":"idle","statusTrack":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","tags":[],"head":false,"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}}]},"espresso/average_electrostatic_potential.json":{"_id":"7f2f8a38-c3bd-5aa9-b3b0-2c367287dd60","name":"Average Electrostatic Potential","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","average_potential_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde"},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":["standard_output"],"results":[],"name":"pp_electrostatic_potential","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","schemaVersion":"2022.8.16"}],"next":"average-electrostatic-potential"},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":["standard_output"],"results":["average_potential_profile"],"name":"average_potential","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","rendered":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","schemaVersion":"2022.8.16"}]}]},"espresso/band_gap_hse_dos.json":{"_id":"f1341a29-777d-5ca3-8933-78a5e0d3f6f2","name":"HSE Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","density_of_states"],"model":{"type":"dft","subtype":"hybrid","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"hse06"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf_hse","head":true,"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f494cdb2-304f-5da2-b979-ce3fbba3a6c4","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_hse.in"}],"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf_hse","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = {% if kgrid.dimensions[0]%2 == 0 %}{{kgrid.dimensions[0]/2}}{% else %}{{(kgrid.dimensions[0]+1)/2}}{% endif %}, nqx2 = {% if kgrid.dimensions[1]%2 == 0 %}{{kgrid.dimensions[1]/2}}{% else %}{{(kgrid.dimensions[1]+1)/2}}{% endif %}, nqx3 = {% if kgrid.dimensions[2]%2 == 0 %}{{kgrid.dimensions[2]/2}}{% else %}{{(kgrid.dimensions[2]+1)/2}}{% endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{% if d%2 == 0 %}{{d}} {% else %}{{d+1}} {% endif %}{% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_hse.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = 1, nqx2 = 1, nqx3 = 1\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651"},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":["standard_output"],"results":["density_of_states"],"name":"projwfc","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","rendered":"&PROJWFC\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n degauss = 0.01\n deltaE = 0.05\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/band_gap.json":{"_id":"233bb8cf-3b4a-5378-84d9-a6a95a2ab43d","name":"Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","fermi_energy","band_gaps"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0"},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":["standard_output"],"results":["fermi_energy","band_gaps"],"name":"pw_nscf","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","rendered":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}]}]},"espresso/band_structure_dos.json":{"_id":"fa594399-6b98-5d79-986c-0713601dc06c","name":"Band Structure + Density of States","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure","fermi_energy","band_gaps","density_of_states"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"d618df45-5af3-5da5-8882-d74a27e00b04"},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2"},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0"},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":["standard_output"],"results":["fermi_energy","band_gaps"],"name":"pw_nscf","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","rendered":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651"},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":["standard_output"],"results":["density_of_states"],"name":"projwfc","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","rendered":"&PROJWFC\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n degauss = 0.01\n deltaE = 0.05\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/band_structure_hse.json":{"_id":"ef3089f3-7460-56f2-9aa2-172d5339d3be","name":"Band Structure - HSE","application":{"name":"espresso"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"model":{"type":"dft","subtype":"hybrid","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"hse06"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf_bands_hse","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"08bd7e4a-2454-53b7-8cc9-9a95975f7e6f","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_bands_hse.in"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"pw_scf_bands_hse","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n {% for d in qgrid.dimensions -%}\n nqx{{loop.index}} = {{d}}\n {% endfor %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal\n{{ '{{' }} {{ explicitKPath.length }} {% raw %} + KPOINTS|length {% endraw %} {{ '}}' }}\n{% raw %}\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n{% endraw %}\n{% for point in explicitKPath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}0.0000001\n{% endfor %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPathFormDataManager"}],"executableName":"pw.x","name":"pw_scf_bands_hse.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n nqx1 = 1\n nqx2 = 1\n nqx3 = 1\n \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal\n{{ 101 + KPOINTS|length }}\n\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n\n 0.000000000 0.000000000 0.000000000 0.0000001\n 0.050000000 0.000000000 0.050000000 0.0000001\n 0.100000000 0.000000000 0.100000000 0.0000001\n 0.150000000 0.000000000 0.150000000 0.0000001\n 0.200000000 0.000000000 0.200000000 0.0000001\n 0.250000000 0.000000000 0.250000000 0.0000001\n 0.300000000 0.000000000 0.300000000 0.0000001\n 0.350000000 0.000000000 0.350000000 0.0000001\n 0.400000000 0.000000000 0.400000000 0.0000001\n 0.450000000 0.000000000 0.450000000 0.0000001\n 0.500000000 0.000000000 0.500000000 0.0000001\n 0.500000000 0.025000000 0.525000000 0.0000001\n 0.500000000 0.050000000 0.550000000 0.0000001\n 0.500000000 0.075000000 0.575000000 0.0000001\n 0.500000000 0.100000000 0.600000000 0.0000001\n 0.500000000 0.125000000 0.625000000 0.0000001\n 0.500000000 0.150000000 0.650000000 0.0000001\n 0.500000000 0.175000000 0.675000000 0.0000001\n 0.500000000 0.200000000 0.700000000 0.0000001\n 0.500000000 0.225000000 0.725000000 0.0000001\n 0.500000000 0.250000000 0.750000000 0.0000001\n 0.487500000 0.262500000 0.750000000 0.0000001\n 0.475000000 0.275000000 0.750000000 0.0000001\n 0.462500000 0.287500000 0.750000000 0.0000001\n 0.450000000 0.300000000 0.750000000 0.0000001\n 0.437500000 0.312500000 0.750000000 0.0000001\n 0.425000000 0.325000000 0.750000000 0.0000001\n 0.412500000 0.337500000 0.750000000 0.0000001\n 0.400000000 0.350000000 0.750000000 0.0000001\n 0.387500000 0.362500000 0.750000000 0.0000001\n 0.375000000 0.375000000 0.750000000 0.0000001\n 0.337500000 0.337500000 0.675000000 0.0000001\n 0.300000000 0.300000000 0.600000000 0.0000001\n 0.262500000 0.262500000 0.525000000 0.0000001\n 0.225000000 0.225000000 0.450000000 0.0000001\n 0.187500000 0.187500000 0.375000000 0.0000001\n 0.150000000 0.150000000 0.300000000 0.0000001\n 0.112500000 0.112500000 0.225000000 0.0000001\n 0.075000000 0.075000000 0.150000000 0.0000001\n 0.037500000 0.037500000 0.075000000 0.0000001\n 0.000000000 0.000000000 0.000000000 0.0000001\n 0.050000000 0.050000000 0.050000000 0.0000001\n 0.100000000 0.100000000 0.100000000 0.0000001\n 0.150000000 0.150000000 0.150000000 0.0000001\n 0.200000000 0.200000000 0.200000000 0.0000001\n 0.250000000 0.250000000 0.250000000 0.0000001\n 0.300000000 0.300000000 0.300000000 0.0000001\n 0.350000000 0.350000000 0.350000000 0.0000001\n 0.400000000 0.400000000 0.400000000 0.0000001\n 0.450000000 0.450000000 0.450000000 0.0000001\n 0.500000000 0.500000000 0.500000000 0.0000001\n 0.512500000 0.475000000 0.512500000 0.0000001\n 0.525000000 0.450000000 0.525000000 0.0000001\n 0.537500000 0.425000000 0.537500000 0.0000001\n 0.550000000 0.400000000 0.550000000 0.0000001\n 0.562500000 0.375000000 0.562500000 0.0000001\n 0.575000000 0.350000000 0.575000000 0.0000001\n 0.587500000 0.325000000 0.587500000 0.0000001\n 0.600000000 0.300000000 0.600000000 0.0000001\n 0.612500000 0.275000000 0.612500000 0.0000001\n 0.625000000 0.250000000 0.625000000 0.0000001\n 0.612500000 0.250000000 0.637500000 0.0000001\n 0.600000000 0.250000000 0.650000000 0.0000001\n 0.587500000 0.250000000 0.662500000 0.0000001\n 0.575000000 0.250000000 0.675000000 0.0000001\n 0.562500000 0.250000000 0.687500000 0.0000001\n 0.550000000 0.250000000 0.700000000 0.0000001\n 0.537500000 0.250000000 0.712500000 0.0000001\n 0.525000000 0.250000000 0.725000000 0.0000001\n 0.512500000 0.250000000 0.737500000 0.0000001\n 0.500000000 0.250000000 0.750000000 0.0000001\n 0.500000000 0.275000000 0.725000000 0.0000001\n 0.500000000 0.300000000 0.700000000 0.0000001\n 0.500000000 0.325000000 0.675000000 0.0000001\n 0.500000000 0.350000000 0.650000000 0.0000001\n 0.500000000 0.375000000 0.625000000 0.0000001\n 0.500000000 0.400000000 0.600000000 0.0000001\n 0.500000000 0.425000000 0.575000000 0.0000001\n 0.500000000 0.450000000 0.550000000 0.0000001\n 0.500000000 0.475000000 0.525000000 0.0000001\n 0.500000000 0.500000000 0.500000000 0.0000001\n 0.512500000 0.475000000 0.512500000 0.0000001\n 0.525000000 0.450000000 0.525000000 0.0000001\n 0.537500000 0.425000000 0.537500000 0.0000001\n 0.550000000 0.400000000 0.550000000 0.0000001\n 0.562500000 0.375000000 0.562500000 0.0000001\n 0.575000000 0.350000000 0.575000000 0.0000001\n 0.587500000 0.325000000 0.587500000 0.0000001\n 0.600000000 0.300000000 0.600000000 0.0000001\n 0.612500000 0.275000000 0.612500000 0.0000001\n 0.625000000 0.250000000 0.625000000 0.0000001\n 0.612500000 0.225000000 0.612500000 0.0000001\n 0.600000000 0.200000000 0.600000000 0.0000001\n 0.587500000 0.175000000 0.587500000 0.0000001\n 0.575000000 0.150000000 0.575000000 0.0000001\n 0.562500000 0.125000000 0.562500000 0.0000001\n 0.550000000 0.100000000 0.550000000 0.0000001\n 0.537500000 0.075000000 0.537500000 0.0000001\n 0.525000000 0.050000000 0.525000000 0.0000001\n 0.512500000 0.025000000 0.512500000 0.0000001\n 0.500000000 0.000000000 0.500000000 0.0000001\n\n","schemaVersion":"2022.8.16"}],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2"},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/band_structure_magn.json":{"_id":"4a7dced1-224e-57d7-a616-cbad99062c7b","name":"Spin magnetic bandstructure","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf_magn","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"c229d2a0-3c19-5f13-b3e0-ceb86cb9fbc1","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_magn.in"}],"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf_magn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_magn.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n nspin = 2\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1"},{"type":"execution","name":"pw_bands_magn","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_magn.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands_magn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_magn.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n nspin = 2\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"a8e4de4b-1f55-50e8-a712-ce0b37c04752"},{"type":"execution","name":"bands_spin_up","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_up.in"}],"monitors":["standard_output"],"name":"bands_spin_up","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_up.dat'{% endraw %}\n spin_component = 1\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_up.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands_up.dat'\n spin_component = 1\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"next":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0"},{"type":"execution","name":"bands_spin_dn","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_dn.in"}],"monitors":["standard_output"],"name":"bands_spin_dn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_dn.dat'{% endraw %}\n spin_component = 2\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_dn.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands_dn.dat'\n spin_component = 2\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/band_structure_soc.json":{"_id":"51e6fb82-538a-58ee-8d4e-991c8446f657","name":"Spin orbit coupling bandstructure","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"nc-fr","data":{"searchText":"nc-fr"}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf_soc","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"74ec024a-f247-5f15-9c21-cc169bcb62c7","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_soc.in"}],"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf_soc","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_soc.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b"},{"type":"execution","name":"pw_bands_soc","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_soc.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands_soc","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_soc.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2"},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/band_structure.json":{"_id":"26d32e68-c2b5-50e9-8933-15f684fcc039","name":"Band Structure","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"d618df45-5af3-5da5-8882-d74a27e00b04"},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2"},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/dielectric_tensor.json":{"_id":"38340b52-83ad-5862-bc18-c140bdc0cb72","name":"Compute Dielectric Function","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","fermi_energy","band_gaps","dielectric_tensor"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"nc","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"3b230ec3-0791-52f7-a4db-625390b8718f"},{"name":"Set No-Symmetry Flag","type":"assignment","operand":"NO_SYMMETRY_NO_INVERSION","value":true,"input":[],"status":"idle","statusTrack":[],"flowchartId":"3b230ec3-0791-52f7-a4db-625390b8718f","tags":[],"head":false,"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":["standard_output"],"results":["fermi_energy","band_gaps"],"name":"pw_nscf","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","rendered":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb"},{"type":"execution","name":"Compute dielectric function","head":false,"results":[{"name":"dielectric_tensor"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"epsilon.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"epsilon.x","input":[{"name":"epsilon.in"}],"monitors":["standard_output"],"results":["dielectric_tensor"],"name":"dielectric_tensor","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n","contextProviders":[],"executableName":"epsilon.x","name":"epsilon.in","rendered":"&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/dos.json":{"_id":"2cf317f3-3306-5a96-bc9b-e9103ebcd5be","name":"Density of States","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","fermi_energy","band_gaps","density_of_states"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0"},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":["standard_output"],"results":["fermi_energy","band_gaps"],"name":"pw_nscf","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","rendered":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651"},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":["standard_output"],"results":["density_of_states"],"name":"projwfc","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","rendered":"&PROJWFC\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n degauss = 0.01\n deltaE = 0.05\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/electronic_density_mesh.json":{"_id":"e2749c5a-fcd9-589c-819b-8b88c5c90924","name":"Electronic Density Mesh","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061"},{"type":"execution","name":"pp_density","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_density.in"}],"monitors":["standard_output"],"results":[],"name":"pp_density","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_density.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/esm_relax.json":{"_id":"69728792-afeb-50aa-9b4e-6974a90f676a","name":"Effective Screening Medium (ESM) Relax","application":{"name":"espresso"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","potential_profile","charge_density_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_esm_relax","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"a2bec506-1fdd-5125-a787-85f31cde20c1","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm_relax.in"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","potential_profile","charge_density_profile"],"name":"pw_esm_relax","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm_relax.in","rendered":"&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = 'pbc'\n fcp_mu = 0\n esm_w = 0\n esm_efield = 0\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}]}]},"espresso/esm.json":{"_id":"0de669f6-a455-5dae-b331-19dc85f7090f","name":"Effective Screening Medium (ESM)","application":{"name":"espresso"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","potential_profile","charge_density_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_esm","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"2f487bc6-c237-53e4-bad5-be60369662cb","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm.in"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","potential_profile","charge_density_profile"],"name":"pw_esm","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = 'pbc'\n fcp_mu = 0\n esm_w = 0\n esm_efield = 0\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}]}]},"espresso/espresso_extract_kpoints.json":{"_id":"a2785cc5-2427-5c7a-b30f-7077475b948c","name":"Extract KPOINTS","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Extract kpoints","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"a716b133-2d04-50b5-b497-100265e3fa24","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"espresso_extract_kpoints.py"},{"name":"requirements.txt","templateName":"requirements_empty.txt"}],"monitors":["standard_output"],"name":"espresso_extract_kpoints","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_extract_kpoints.py","rendered":"import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n","schemaVersion":"2022.8.16"}]}]},"espresso/espresso_xml_get_qpt_irr.json":{"_id":"e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a","name":"espresso-xml-get-qpt-irr","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"python","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"espresso_xml_get_qpt_irr.py"}],"monitors":["standard_output"],"name":"espresso_xml_get_qpt_irr","schemaVersion":"2022.8.16","isDefault":false},"next":"d0fd8654-2106-546b-8792-7bb46272befc","status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n{# JOB_WORK_DIR will be initialized at runtime => avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_xml_get_qpt_irr.py","rendered":"# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n\n\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","schemaVersion":"2022.8.16"}]},{"name":"assignment","type":"assignment","operand":"Q_POINTS","value":"json.loads(STDOUT)","input":[{"scope":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","name":"STDOUT"}],"status":"idle","statusTrack":[],"flowchartId":"d0fd8654-2106-546b-8792-7bb46272befc","tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]},"espresso/fixed_cell_relaxation.json":{"_id":"fb75e249-5489-5146-bd8a-786d33330d9c","name":"Fixed-cell Relaxation","application":{"name":"espresso"},"properties":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"c42871f6-ab79-5987-b228-c3bd80f16ffd","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_relax.in"}],"monitors":["standard_output","convergence_electronic","convergence_ionic"],"results":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"name":"pw_relax","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_relax.in","rendered":"&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}]}]},"espresso/gw_band_structure_band_gap_full_frequency.json":{"_id":"46bcdcc8-628e-518e-b8c3-9bf38d7a2aef","name":"Full Frequency GW Band Structure + Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure","fermi_energy","band_gaps"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{"searchText":".*dojo-oncv.*"}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e"},{"type":"execution","name":"gw_bands_full_frequency","head":false,"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"gw.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_full_frequency.in"}],"monitors":["standard_output"],"results":["band_structure","fermi_energy","band_gaps"],"name":"gw_bands_full_frequency","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_full_frequency.in","rendered":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n\n ! the grid used for the linear response\n kpt_grid = 2, 2, 2\n qpt_grid = 1, 1, 1\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n101\n 0.000000000 0.000000000 0.000000000\n 0.028867513 -0.040824829 0.050000000\n 0.057735027 -0.081649658 0.100000000\n 0.086602540 -0.122474487 0.150000000\n 0.115470054 -0.163299316 0.200000000\n 0.144337567 -0.204124145 0.250000000\n 0.173205081 -0.244948974 0.300000000\n 0.202072594 -0.285773803 0.350000000\n 0.230940108 -0.326598632 0.400000000\n 0.259807621 -0.367423461 0.450000000\n 0.288675135 -0.408248290 0.500000000\n 0.274241378 -0.387835876 0.525000000\n 0.259807621 -0.367423461 0.550000000\n 0.245373864 -0.347011047 0.575000000\n 0.230940108 -0.326598632 0.600000000\n 0.216506351 -0.306186218 0.625000000\n 0.202072594 -0.285773803 0.650000000\n 0.187638837 -0.265361389 0.675000000\n 0.173205081 -0.244948974 0.700000000\n 0.158771324 -0.224536560 0.725000000\n 0.144337567 -0.204124145 0.750000000\n 0.129903811 -0.183711731 0.750000000\n 0.115470054 -0.163299316 0.750000000\n 0.101036297 -0.142886902 0.750000000\n 0.086602540 -0.122474487 0.750000000\n 0.072168784 -0.102062073 0.750000000\n 0.057735027 -0.081649658 0.750000000\n 0.043301270 -0.061237244 0.750000000\n 0.028867513 -0.040824829 0.750000000\n 0.014433757 -0.020412415 0.750000000\n -0.000000000 -0.000000000 0.750000000\n -0.000000000 -0.000000000 0.675000000\n -0.000000000 -0.000000000 0.600000000\n -0.000000000 -0.000000000 0.525000000\n -0.000000000 -0.000000000 0.450000000\n -0.000000000 -0.000000000 0.375000000\n -0.000000000 -0.000000000 0.300000000\n -0.000000000 -0.000000000 0.225000000\n -0.000000000 -0.000000000 0.150000000\n -0.000000000 -0.000000000 0.075000000\n 0.000000000 0.000000000 0.000000000\n 0.028867513 0.020412415 0.050000000\n 0.057735027 0.040824829 0.100000000\n 0.086602540 0.061237244 0.150000000\n 0.115470054 0.081649658 0.200000000\n 0.144337567 0.102062073 0.250000000\n 0.173205081 0.122474487 0.300000000\n 0.202072594 0.142886902 0.350000000\n 0.230940108 0.163299316 0.400000000\n 0.259807621 0.183711731 0.450000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.339193283 -0.204124145 0.637500000\n 0.317542648 -0.204124145 0.650000000\n 0.295892013 -0.204124145 0.662500000\n 0.274241378 -0.204124145 0.675000000\n 0.252590743 -0.204124145 0.687500000\n 0.230940108 -0.204124145 0.700000000\n 0.209289473 -0.204124145 0.712500000\n 0.187638837 -0.204124145 0.725000000\n 0.165988202 -0.204124145 0.737500000\n 0.144337567 -0.204124145 0.750000000\n 0.158771324 -0.163299316 0.725000000\n 0.173205081 -0.122474487 0.700000000\n 0.187638837 -0.081649658 0.675000000\n 0.202072594 -0.040824829 0.650000000\n 0.216506351 -0.000000000 0.625000000\n 0.230940108 0.040824829 0.600000000\n 0.245373864 0.081649658 0.575000000\n 0.259807621 0.122474487 0.550000000\n 0.274241378 0.163299316 0.525000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.353627040 -0.224536560 0.612500000\n 0.346410162 -0.244948974 0.600000000\n 0.339193283 -0.265361389 0.587500000\n 0.331976405 -0.285773803 0.575000000\n 0.324759526 -0.306186218 0.562500000\n 0.317542648 -0.326598632 0.550000000\n 0.310325770 -0.347011047 0.537500000\n 0.303108891 -0.367423461 0.525000000\n 0.295892013 -0.387835876 0.512500000\n 0.288675135 -0.408248290 0.500000000\n\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/gw_band_structure_band_gap_plasmon_pole.json":{"_id":"72b79a87-8eef-5fe2-9d6c-6c9c256dd56c","name":"Plasmon-Pole GW Band Structure + Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure","fermi_energy","band_gaps"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{"searchText":".*dojo-oncv.*"}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"f9910952-eca9-5a5f-ae03-a0060ae2fc78"},{"type":"execution","name":"gw_bands_plasmon_pole","head":false,"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"gw.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_plasmon_pole.in"}],"monitors":["standard_output"],"results":["band_structure","fermi_energy","band_gaps"],"name":"gw_bands_plasmon_pole","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_plasmon_pole.in","rendered":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n\n ! the grid used for the linear response\n kpt_grid = 2, 2, 2\n qpt_grid = 1, 1, 1\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n101\n 0.000000000 0.000000000 0.000000000\n 0.028867513 -0.040824829 0.050000000\n 0.057735027 -0.081649658 0.100000000\n 0.086602540 -0.122474487 0.150000000\n 0.115470054 -0.163299316 0.200000000\n 0.144337567 -0.204124145 0.250000000\n 0.173205081 -0.244948974 0.300000000\n 0.202072594 -0.285773803 0.350000000\n 0.230940108 -0.326598632 0.400000000\n 0.259807621 -0.367423461 0.450000000\n 0.288675135 -0.408248290 0.500000000\n 0.274241378 -0.387835876 0.525000000\n 0.259807621 -0.367423461 0.550000000\n 0.245373864 -0.347011047 0.575000000\n 0.230940108 -0.326598632 0.600000000\n 0.216506351 -0.306186218 0.625000000\n 0.202072594 -0.285773803 0.650000000\n 0.187638837 -0.265361389 0.675000000\n 0.173205081 -0.244948974 0.700000000\n 0.158771324 -0.224536560 0.725000000\n 0.144337567 -0.204124145 0.750000000\n 0.129903811 -0.183711731 0.750000000\n 0.115470054 -0.163299316 0.750000000\n 0.101036297 -0.142886902 0.750000000\n 0.086602540 -0.122474487 0.750000000\n 0.072168784 -0.102062073 0.750000000\n 0.057735027 -0.081649658 0.750000000\n 0.043301270 -0.061237244 0.750000000\n 0.028867513 -0.040824829 0.750000000\n 0.014433757 -0.020412415 0.750000000\n -0.000000000 -0.000000000 0.750000000\n -0.000000000 -0.000000000 0.675000000\n -0.000000000 -0.000000000 0.600000000\n -0.000000000 -0.000000000 0.525000000\n -0.000000000 -0.000000000 0.450000000\n -0.000000000 -0.000000000 0.375000000\n -0.000000000 -0.000000000 0.300000000\n -0.000000000 -0.000000000 0.225000000\n -0.000000000 -0.000000000 0.150000000\n -0.000000000 -0.000000000 0.075000000\n 0.000000000 0.000000000 0.000000000\n 0.028867513 0.020412415 0.050000000\n 0.057735027 0.040824829 0.100000000\n 0.086602540 0.061237244 0.150000000\n 0.115470054 0.081649658 0.200000000\n 0.144337567 0.102062073 0.250000000\n 0.173205081 0.122474487 0.300000000\n 0.202072594 0.142886902 0.350000000\n 0.230940108 0.163299316 0.400000000\n 0.259807621 0.183711731 0.450000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.339193283 -0.204124145 0.637500000\n 0.317542648 -0.204124145 0.650000000\n 0.295892013 -0.204124145 0.662500000\n 0.274241378 -0.204124145 0.675000000\n 0.252590743 -0.204124145 0.687500000\n 0.230940108 -0.204124145 0.700000000\n 0.209289473 -0.204124145 0.712500000\n 0.187638837 -0.204124145 0.725000000\n 0.165988202 -0.204124145 0.737500000\n 0.144337567 -0.204124145 0.750000000\n 0.158771324 -0.163299316 0.725000000\n 0.173205081 -0.122474487 0.700000000\n 0.187638837 -0.081649658 0.675000000\n 0.202072594 -0.040824829 0.650000000\n 0.216506351 -0.000000000 0.625000000\n 0.230940108 0.040824829 0.600000000\n 0.245373864 0.081649658 0.575000000\n 0.259807621 0.122474487 0.550000000\n 0.274241378 0.163299316 0.525000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.353627040 -0.224536560 0.612500000\n 0.346410162 -0.244948974 0.600000000\n 0.339193283 -0.265361389 0.587500000\n 0.331976405 -0.285773803 0.575000000\n 0.324759526 -0.306186218 0.562500000\n 0.317542648 -0.326598632 0.550000000\n 0.310325770 -0.347011047 0.537500000\n 0.303108891 -0.367423461 0.525000000\n 0.295892013 -0.387835876 0.512500000\n 0.288675135 -0.408248290 0.500000000\n\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/kpoint_convergence.json":{"_id":"ff6a8fbc-2202-5786-9a26-67c843417d0b","name":"K-point Convergence","application":{"name":"espresso"},"properties":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"flowchartId":"init-tolerance","status":"idle","statusTrack":[],"tags":[],"head":true,"next":"init-increment","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"flowchartId":"init-increment","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"init-result","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"flowchartId":"init-result","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"init-parameter","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"flowchartId":"init-parameter","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"pwscf-kpoint-convergence","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"pw_scf_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"pwscf-kpoint-convergence","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_kpt_conv.in"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor"],"name":"pw_scf_kpt_conv","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0{% endraw %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_kpt_conv.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0\n","schemaVersion":"2022.8.16"}],"next":"store-result"},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"pwscf-kpoint-convergence"}],"flowchartId":"store-result","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"check-convergence","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"check convergence","type":"condition","input":[],"results":[],"preProcessors":[],"postProcessors":[],"then":"convergence-is-reached","else":"update-result","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"flowchartId":"check-convergence","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"update-result","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"flowchartId":"update-result","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"increment-parameter","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"flowchartId":"increment-parameter","next":"pwscf-kpoint-convergence","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"flowchartId":"convergence-is-reached","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}}]},"espresso/neb.json":{"isMultiMaterial":true,"_id":"c9034468-df28-5357-8912-02226f919042","name":"Nudged Elastic Band (NEB)","application":{"name":"espresso"},"properties":["reaction_energy_barrier","reaction_energy_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"neb","head":true,"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9f273ca0-d240-5b1f-89a9-64dd579304ac","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"neb.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"neb.x","input":[{"name":"neb.in"}],"monitors":["standard_output"],"results":["reaction_energy_barrier","reaction_energy_profile"],"name":"neb","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = {{ 2 + (input.INTERMEDIATE_IMAGES.length or neb.nImages) }},\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\n{{ input.FIRST_IMAGE }}\n{%- for IMAGE in input.INTERMEDIATE_IMAGES %}\nINTERMEDIATE_IMAGE\nATOMIC_POSITIONS crystal\n{{ IMAGE }}\n{%- endfor %}\nLAST_IMAGE\nATOMIC_POSITIONS crystal\n{{ input.LAST_IMAGE }}\nEND_POSITIONS\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nEND_ENGINE_INPUT\nEND\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"NEBFormDataManager"},{"name":"QENEBInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"neb.x","name":"neb.in","rendered":"BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = 3,\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\nSi 28.0855 \nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nLAST_IMAGE\nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nEND_POSITIONS\nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \nEND_ENGINE_INPUT\nEND\n","schemaVersion":"2022.8.16"}]}]},"espresso/ph_init_qpoints.json":{"_id":"2f017bcb-f4ba-55b8-b939-1f780679a88e","name":"ph-init-qpoints","application":{"name":"espresso"},"properties":[],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"ph_init_qpoints","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"b8ea6a33-38f3-5434-b17e-b5eae8fff9fc","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_init_qpoints.in"}],"monitors":["standard_output"],"results":[],"name":"ph_init_qpoints","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_init_qpoints.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/ph_single_irr_qpt.json":{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","name":"ph-single-irr-qpt","application":{"name":"espresso"},"properties":[],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"ph_single_irr_qpt","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"8db9af08-d935-57a0-a824-e7db6d936de8","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_single_irr_qpt.in"}],"monitors":["standard_output"],"results":[],"name":"ph_single_irr_qpt","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_single_irr_qpt.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n \n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n \n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = '{{ JOB_SCRATCH_DIR }}/outdir'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/phonon_dispersions.json":{"_id":"bfb69b48-8fbf-5a0d-8949-448f20754766","name":"Phonon Dispersions","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","phonon_dos","phonon_dispersions"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"13bcafce-56ef-5b47-b079-317495eb6933"},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":["standard_output"],"results":["phonon_dos"],"name":"ph_grid","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n ldisp = .true.\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"next":"3b4507a7-9244-540b-abe0-66bceab700f5"},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":["standard_output"],"results":[],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","rendered":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","schemaVersion":"2022.8.16"}],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1"},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":["standard_output"],"results":["phonon_dispersions"],"name":"matdyn_path","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","rendered":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}]}]},"espresso/phonon_dos_dispersion.json":{"_id":"291d25cd-378a-5be7-9d85-c8013a4b165b","name":"Phonon Density of States + Dispersions","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","phonon_dos","phonon_dispersions"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"13bcafce-56ef-5b47-b079-317495eb6933"},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":["standard_output"],"results":["phonon_dos"],"name":"ph_grid","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n ldisp = .true.\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"next":"3b4507a7-9244-540b-abe0-66bceab700f5"},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":["standard_output"],"results":[],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","rendered":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","schemaVersion":"2022.8.16"}],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2"},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":["standard_output"],"results":["phonon_dos"],"name":"matdyn_grid","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","rendered":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n","schemaVersion":"2022.8.16"}],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1"},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":["standard_output"],"results":["phonon_dispersions"],"name":"matdyn_path","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","rendered":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}]}]},"espresso/phonon_dos.json":{"_id":"2232051b-9f2a-5a48-9b4d-6231eb6e8297","name":"Phonon Density of States","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","phonon_dos"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"13bcafce-56ef-5b47-b079-317495eb6933"},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":["standard_output"],"results":["phonon_dos"],"name":"ph_grid","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n ldisp = .true.\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"next":"3b4507a7-9244-540b-abe0-66bceab700f5"},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":["standard_output"],"results":[],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","rendered":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","schemaVersion":"2022.8.16"}],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2"},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":["standard_output"],"results":["phonon_dos"],"name":"matdyn_grid","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","rendered":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n","schemaVersion":"2022.8.16"}]}]},"espresso/phonon_reduce.json":{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","name":"reduce","application":{"name":"espresso"},"properties":["phonon_dos","phonon_dispersions"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"ph_grid_restart","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb206177-a4af-599a-81ba-6c88d24253b6","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid_restart.in"}],"monitors":["standard_output"],"results":[],"name":"ph_grid_restart","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid_restart.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"next":"3b4507a7-9244-540b-abe0-66bceab700f5"},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":["standard_output"],"results":[],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","rendered":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","schemaVersion":"2022.8.16"}],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2"},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":["standard_output"],"results":["phonon_dos"],"name":"matdyn_grid","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","rendered":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n","schemaVersion":"2022.8.16"}],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1"},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":["standard_output"],"results":["phonon_dispersions"],"name":"matdyn_path","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","rendered":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}]}]},"espresso/plot_wavefunction.json":{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","name":"Plot Wavefunction","application":{"name":"espresso"},"properties":["file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"plot WFN","head":true,"results":[{"name":"file_content","basename":"wf_r.png","filetype":"image"}],"monitors":[{"name":"standard_output"}],"flowchartId":"57fca898-8e8b-5ef2-81a5-9d2b612bc18d","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"monitors":["standard_output"],"results":[{"name":"file_content"}],"name":"plot_wavefunction","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"script.py","rendered":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","schemaVersion":"2022.8.16"}]}]},"espresso/post_processor.json":{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","name":"post-processor","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_collect_dynmat.sh"}],"monitors":["standard_output"],"name":"espresso_collect_dynmat","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_collect_dynmat.sh","rendered":"\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n\n","schemaVersion":"2022.8.16"}]}]},"espresso/pre_processor.json":{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","name":"pre-processor","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_link_outdir_save.sh"}],"monitors":["standard_output"],"name":"espresso_link_outdir_save","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_link_outdir_save.sh","rendered":"\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n\n","schemaVersion":"2022.8.16"}]}]},"espresso/pw_scf.json":{"_id":"f52b8039-83d0-5485-a1f1-0bc37cb01ed3","name":"pw-scf","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}]}]},"espresso/recalculate_bands.json":{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","name":"Recalculate Bands","application":{"name":"espresso"},"properties":["band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_bands","head":true,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2"},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}]}]},"espresso/surface_energy.json":{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","name":"Surface Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"name":"io-slab","type":"io","subtype":"input","head":true,"results":[],"monitors":[],"flowchartId":"e463ef46-a36e-5168-87dd-e21eb980dfb8","preProcessors":[],"postProcessors":[],"source":"api","input":[{"endpoint":"materials","endpoint_options":{"params":{"query":"{'_id': MATERIAL_ID}","projection":"{}"}},"name":"DATA"}],"next":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"slab","type":"assignment","operand":"SLAB","value":"DATA[0]","input":[{"name":"DATA","scope":"e463ef46-a36e-5168-87dd-e21eb980dfb8"}],"head":false,"results":[],"monitors":[],"flowchartId":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","preProcessors":[],"postProcessors":[],"next":"44263820-0c80-5bd1-b854-9da8d198eac1","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"io-bulk","type":"io","subtype":"input","head":false,"results":[],"monitors":[],"flowchartId":"44263820-0c80-5bd1-b854-9da8d198eac1","preProcessors":[],"postProcessors":[],"source":"api","input":[{"endpoint":"materials","endpoint_options":{"params":{"query":"{'_id': SLAB.metadata.bulkId}","projection":"{}"}},"name":"DATA"}],"next":"b70656f1-a394-57f4-b4de-00096969df4b","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"bulk","type":"assignment","operand":"BULK","value":"DATA[0] if DATA else None","input":[{"name":"DATA","scope":"44263820-0c80-5bd1-b854-9da8d198eac1"}],"head":false,"results":[],"monitors":[],"flowchartId":"b70656f1-a394-57f4-b4de-00096969df4b","preProcessors":[],"postProcessors":[],"next":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"assert-bulk","type":"assertion","statement":"BULK != None","errorMessage":"Bulk material does not exist!","head":false,"results":[],"monitors":[],"flowchartId":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","preProcessors":[],"postProcessors":[],"next":"490635e0-c593-5809-9eb2-c794b96cfed1","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"io-e-bulk","type":"io","subtype":"input","head":false,"results":[],"monitors":[],"flowchartId":"490635e0-c593-5809-9eb2-c794b96cfed1","preProcessors":[],"postProcessors":[],"source":"api","input":[{"endpoint":"refined-properties","endpoint_options":{"params":{"query":"{ 'exabyteId': BULK.exabyteId, 'data.name': 'total_energy', 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} }","projection":"{'sort': {'precision.value': -1}, 'limit': 1}"}},"name":"DATA"}],"next":"bbe13b97-4243-5a85-8f61-a279d0b797aa","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"e-bulk","type":"assignment","operand":"E_BULK","value":"DATA[0].data.value if DATA else None","input":[{"name":"DATA","scope":"490635e0-c593-5809-9eb2-c794b96cfed1"}],"head":false,"results":[],"monitors":[],"flowchartId":"bbe13b97-4243-5a85-8f61-a279d0b797aa","preProcessors":[],"postProcessors":[],"next":"a06c9f43-7670-5fd0-ac42-7028a472235a","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"assert-e-bulk","type":"assertion","statement":"E_BULK != None","errorMessage":"E_BULK does not exist!","head":false,"results":[],"monitors":[],"flowchartId":"a06c9f43-7670-5fd0-ac42-7028a472235a","preProcessors":[],"postProcessors":[],"next":"cdf210be-26ed-585a-b4ac-d55795ba2975","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"surface","type":"assignment","operand":"A","value":"np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))","input":[],"head":false,"results":[],"monitors":[],"flowchartId":"cdf210be-26ed-585a-b4ac-d55795ba2975","preProcessors":[],"postProcessors":[],"next":"ffa8e43d-096a-555b-b8d0-6d283365ef47","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"n-bulk","type":"assignment","operand":"N_BULK","value":"len(BULK.basis.elements)","input":[],"head":false,"results":[],"monitors":[],"flowchartId":"ffa8e43d-096a-555b-b8d0-6d283365ef47","preProcessors":[],"postProcessors":[],"next":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"n-slab","type":"assignment","operand":"N_SLAB","value":"len(SLAB.basis.elements)","input":[],"head":false,"results":[],"monitors":[],"flowchartId":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","preProcessors":[],"postProcessors":[],"next":"9fc7a088-5533-5f70-bb33-f676ec65f565","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"fcd88119-817c-5ac1-a430-ba892ac743eb"},{"name":"e-slab","type":"assignment","operand":"E_SLAB","value":"total_energy","input":[{"name":"total_energy","scope":"9fc7a088-5533-5f70-bb33-f676ec65f565"}],"head":false,"results":[],"monitors":[],"flowchartId":"fcd88119-817c-5ac1-a430-ba892ac743eb","preProcessors":[],"postProcessors":[],"next":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"surface-energy","type":"assignment","operand":"SURFACE_ENERGY","value":"1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))","input":[],"head":false,"results":[{"name":"surface_energy"}],"monitors":[],"flowchartId":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]}]},"espresso/total_energy.json":{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","name":"Total Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}]}],"tags":["default"]},"espresso/valence_band_offset_calc_from_previous_esp_vbm.json":{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","name":"Calculate VBO","application":{"name":"espresso"},"properties":["valence_band_offset"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Difference of valence band maxima","type":"assignment","operand":"VBM_DIFF","value":"VBM_LEFT - VBM_RIGHT","input":[],"status":"idle","statusTrack":[],"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","tags":[],"head":true,"next":"2626f7bb-d392-5fd4-ab71-329b508de347","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Difference of macroscopically averaged ESP in bulk","type":"assignment","operand":"AVG_ESP_DIFF","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]","input":[],"status":"idle","statusTrack":[],"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","tags":[],"head":false,"next":"b7307787-53e2-599b-ad12-d627b04074b4","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Lineup of macroscopically averaged ESP in interface","type":"assignment","operand":"ESP_LINEUP","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])","input":[],"status":"idle","statusTrack":[],"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","tags":[],"head":false,"next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Valence Band Offset","type":"assignment","operand":"VALENCE_BAND_OFFSET","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))","input":[],"results":[{"name":"valence_band_offset"}],"status":"idle","statusTrack":[],"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]},"espresso/variable_cell_relaxation.json":{"systemName":"espresso-variable-cell-relaxation","_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","name":"Variable-cell Relaxation","application":{"name":"espresso"},"properties":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_vc-relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"monitors":["standard_output","convergence_electronic","convergence_ionic"],"results":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"name":"pw_vc-relax","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","rendered":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}]}],"tags":["variable-cell_relaxation"]},"espresso/wavefunction_amplitude.json":{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","name":"Wavefunction Amplitude","application":{"name":"espresso"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"band_structure"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"pw-scf","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"extract-band-energies"},{"name":"Extract Band Energies","type":"assignment","operand":"band_energies","value":"[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]","input":[{"name":"band_structure","scope":"pw-scf"}],"flowchartId":"extract-band-energies","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"indices-below-fermi","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Find Indices Below Fermi","type":"assignment","operand":"indices_below_fermi","value":"[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]","input":[{"name":"fermi_energy","scope":"pw-scf"}],"flowchartId":"indices-below-fermi","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"8771dc7f-878e-5f13-a840-a3a416854f1e","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Store Band Below EF","type":"assignment","operand":"KBAND_VALUE_BELOW_EF","value":"indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1","input":[],"status":"idle","statusTrack":[],"flowchartId":"8771dc7f-878e-5f13-a840-a3a416854f1e","tags":[],"head":false,"next":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Select Band","type":"assignment","operand":"KBAND_VALUE","value":"KBAND_VALUE_BELOW_EF","input":[],"status":"idle","statusTrack":[],"flowchartId":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","tags":[],"head":false,"next":"pp-wfn","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"pp_wfn","head":false,"results":[{"name":"wavefunction_amplitude"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pp-wfn","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"monitors":["standard_output"],"results":["wavefunction_amplitude"],"name":"pp_wfn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_wfn.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {{ KBAND_VALUE | default(1) }}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = NaN\n nx = 200\n/\n","schemaVersion":"2022.8.16"}]}],"tags":["wfn","wfn_plot"]},"espresso/zero_point_energy.json":{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","name":"Zero Point Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"107595d1-490f-53a2-8432-7f8a12f14d96"},{"type":"execution","name":"ph_zpe","head":false,"results":[{"name":"zero_point_energy"}],"monitors":[{"name":"standard_output"}],"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"monitors":["standard_output"],"results":["zero_point_energy"],"name":"ph_gamma","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n/\n0 0 0\n","schemaVersion":"2022.8.16"}]}]},"nwchem/total_energy.json":{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","name":"Total Energy","application":{"name":"nwchem"},"properties":["total_energy","total_energy_contributions"],"model":{"type":"dft","subtype":"gga","method":{"type":"localorbital","subtype":"pople","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"nwchem_total_energy","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","preProcessors":[],"postProcessors":[],"application":{"name":"nwchem","shortName":"nwchem","summary":"NWChem","build":"GNU","isDefault":true,"version":"7.0.2","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":["standard_output"],"postProcessors":["error_handler"],"name":"nwchem","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":["standard_output"],"results":["total_energy","total_energy_contributions"],"name":"nwchem_total_energy","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","rendered":" start nwchem\n title \"Test\"\n charge 0\n geometry units au noautosym\n Si 0.000000000 0.000000000 0.000000000 \nSi 1.116306745 0.789348070 1.933500000 \n end\n basis\n * library 6-31G\n end\n dft\n xc B3LYP\n mult 1\n end\n task dft energy\n","schemaVersion":"2022.8.16"}]}]},"python/ml/classification_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["workflow:pyml_predict","file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"enableRender":true,"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3"},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"7fff5212-6c6d-586b-9997-4d4485e09383"},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02"},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a"},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["workflow:pyml_predict"],"name":"pyml:model:random_forest_classification:sklearn","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"35436b4a-cd9c-5089-ab42-665c4f9ba049"},{"type":"execution","name":"ROC Curve Plot","head":false,"results":[{"basename":"my_roc_plot.png","filetype":"image","name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["file_content"],"name":"pyml:post_processing:roc_curve:sklearn","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}]}]},"python/ml/clustering_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["workflow:pyml_predict","file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"enableRender":true,"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3"},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"7fff5212-6c6d-586b-9997-4d4485e09383"},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02"},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a"},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_k_means_clustering_sklearn.py","templateName":"model_k_means_clustering_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["workflow:pyml_predict"],"name":"pyml:model:k_means_clustering:sklearn","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_k_means_clustering_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"9c95c27b-c8bd-5e8b-8829-d354611decef"},{"type":"execution","name":"2D PCA Clusters Plot","head":false,"results":[{"basename":"train_test_split.png","filetype":"image","name":"file_content"},{"basename":"train_clusters.png","filetype":"image","name":"file_content"},{"basename":"test_clusters.png","filetype":"image","name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9c95c27b-c8bd-5e8b-8829-d354611decef","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_pca_2d_clusters_matplotlib.py","templateName":"post_processing_pca_2d_clusters_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["file_content"],"name":"pyml:post_processing:pca_2d_clusters:matplotlib","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_pca_2d_clusters_matplotlib.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}]}]},"python/ml/regression_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["workflow:pyml_predict","file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"enableRender":true,"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3"},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"7fff5212-6c6d-586b-9997-4d4485e09383"},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02"},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a"},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["workflow:pyml_predict"],"name":"pyml:model:multilayer_perceptron:sklearn","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c"},{"type":"execution","name":"Parity Plot","head":false,"results":[{"basename":"my_parity_plot.png","filetype":"image","name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["file_content"],"name":"pyml:post_processing:parity_plot:matplotlib","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}]}]},"python/ml/train_head.json":{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"flowchartId":"head-set-predict-status","tags":["pyml:workflow-type-setter"],"status":"idle","statusTrack":[],"head":true,"next":"head-fetch-training-data","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Fetch Dataset","type":"io","subtype":"input","enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"head-branch-on-predict-status","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"results":[],"preProcessors":[],"postProcessors":[],"then":"head-fetch-trained-model","else":"end-of-ml-train-head","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"flowchartId":"head-branch-on-predict-status","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"head-fetch-trained-model","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","tags":["set-io-unit-filenames"],"status":"idle","statusTrack":[],"head":false,"next":"end-of-ml-train-head","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"flowchartId":"end-of-ml-train-head","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]},"python/python_script.json":{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","name":"Python Script","application":{"name":"python"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"python","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":["standard_output"],"name":"hello_world","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","rendered":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","schemaVersion":"2022.8.16"}]}]},"shell/batch_espresso_pwscf.json":{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","name":"Shell Batch Job (Espresso PWSCF)","application":{"name":"shell"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"monitors":["standard_output"],"name":"job_espresso_pw_scf","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","rendered":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","schemaVersion":"2022.8.16"}]}]},"shell/hello_world.json":{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","name":"Shell Hello World","application":{"name":"shell"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":["standard_output"],"name":"hello_world","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","rendered":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","schemaVersion":"2022.8.16"}]}]},"vasp/band_gap.json":{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","name":"Band Gap","application":{"name":"vasp"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_gaps","fermi_energy"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"f0d65517-9592-5bc8-948e-a0851a766cbb"},{"type":"execution","name":"vasp_nscf","head":false,"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":["standard_output","convergence_electronic"],"results":["band_gaps","fermi_energy"],"name":"vasp_nscf","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]},"vasp/band_structure_dos.json":{"_id":"d38fea11-9781-5151-8dae-d705381498be","name":"Band Structure + Density of States","application":{"name":"vasp"},"properties":["density_of_states","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108"},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":["standard_output","convergence_electronic"],"results":["band_structure"],"name":"vasp_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]},"vasp/band_structure.json":{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","name":"Band Structure","application":{"name":"vasp"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108"},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":["standard_output","convergence_electronic"],"results":["band_structure"],"name":"vasp_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]},"vasp/dos.json":{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","name":"Density of States","application":{"name":"vasp"},"properties":["density_of_states","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]},"vasp/fixed_cell_relaxation.json":{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","name":"Fixed-cell Relaxation","application":{"name":"vasp"},"properties":["total_energy","atomic_forces","fermi_energy","pressure","stress_tensor","total_force","final_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp_relax","head":true,"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":["standard_output","convergence_electronic","convergence_ionic"],"postProcessors":["prepare_restart"],"results":["total_energy","atomic_forces","fermi_energy","pressure","stress_tensor","total_force","final_structure"],"name":"vasp_relax","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]},"vasp/initial_final_total_energies.json":{"isMultiMaterial":true,"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","name":"Initial/Final Total Energies","application":{"name":"vasp"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp_neb_initial","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp_neb_initial","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"e65a17ce-10c8-5710-ad4d-fb3d42434091"},{"type":"execution","name":"vasp_neb_final","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp_neb_final","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]},"vasp/kpoint_convergence.json":{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","name":"K-point Convergence","application":{"name":"vasp"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"flowchartId":"init-tolerance","status":"idle","statusTrack":[],"tags":[],"head":true,"next":"init-increment","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"flowchartId":"init-increment","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"init-result","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"flowchartId":"init-result","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"init-parameter","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"flowchartId":"init-parameter","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"vasp-kpoint-convergence","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"type":"execution","name":"vasp_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"vasp-kpoint-convergence","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp_kpt_conv","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic Mesh\n0\nGamma\n{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}\n0 0 0\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"store-result"},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"flowchartId":"store-result","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"check-convergence","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"check convergence","type":"condition","input":[],"results":[],"preProcessors":[],"postProcessors":[],"then":"convergence-is-reached","else":"update-result","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"flowchartId":"check-convergence","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"update-result","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"flowchartId":"update-result","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"increment-parameter","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"flowchartId":"increment-parameter","next":"vasp-kpoint-convergence","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"flowchartId":"convergence-is-reached","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}}]},"vasp/neb_subworkflow.json":{"isMultiMaterial":true,"_id":"e6215fb9-e60c-541b-b73e-b077d64b3a95","name":"Nudged Elastic Band (NEB)","application":{"name":"vasp"},"properties":["reaction_energy_barrier","reaction_energy_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp_neb","head":true,"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9a1660ab-8067-5fad-9fb8-7c039f634636","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB"},{"name":"KPOINTS","templateName":"KPOINTS"}],"monitors":["standard_output"],"results":["reaction_energy_barrier","reaction_energy_profile"],"name":"vasp_neb","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISTART = 0\nIBRION = 1\nEDIFFG = -0.001\nENCUT = 500\nNELM = 100\nNSW = 100\nIMAGES = {{ input.INTERMEDIATE_IMAGES.length or neb.nImages }}\nSPRING = -5\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISTART = 0\nIBRION = 1\nEDIFFG = -0.001\nENCUT = 500\nNELM = 100\nNSW = 100\nIMAGES = 1\nSPRING = -5\nISPIN = 2\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"}]}]},"vasp/prepare_images.json":{"isMultiMaterial":true,"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","name":"Prepare Directories","application":{"name":"vasp"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"prepare-neb-images","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"monitors":["standard_output"],"name":"bash_vasp_prepare_neb_images","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < 00/POSCAR < 01/POSCAR <=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/average_electrostatic_potential_via_band_structure.json":{"isMultiMaterial":true,"_id":"09f5f4ff-7dbd-59ae-ad27-5af1bdfc2bd0","name":"Band Structure + average ESP","application":{"name":"espresso"},"properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"name":"Set Material Index","type":"assignment","operand":"MATERIAL_INDEX","value":0,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"2d360607-c739-54ad-97a0-8a83f0971f2c","head":true,"next":"9fc7a088-5533-5f70-bb33-f676ec65f565","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"pw-bands-calculate-band-gap","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a667d9fd-35d5-5897-be0e-fa0247233649","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"pp_electrostatic_potential","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"average-electrostatic-potential","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"average_potential","results":[{"name":"average_potential_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/average_electrostatic_potential.json":{"_id":"7f2f8a38-c3bd-5aa9-b3b0-2c367287dd60","name":"Average Electrostatic Potential","application":{"name":"espresso"},"properties":["atomic_forces","average_potential_profile","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"pp_electrostatic_potential","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"average-electrostatic-potential","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"average_potential","results":[{"name":"average_potential_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_gap_hse_dos.json":{"_id":"f1341a29-777d-5ca3-8933-78a5e0d3f6f2","name":"HSE Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"hybrid","functional":"hse06","method":{"type":"pseudopotential","subtype":"us","data":{}}},"units":[{"type":"execution","name":"pw_scf_hse","head":true,"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f494cdb2-304f-5da2-b979-ce3fbba3a6c4","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf_hse","results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_hse.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = {% if kgrid.dimensions[0]%2 == 0 %}{{kgrid.dimensions[0]/2}}{% else %}{{(kgrid.dimensions[0]+1)/2}}{% endif %}, nqx2 = {% if kgrid.dimensions[1]%2 == 0 %}{{kgrid.dimensions[1]/2}}{% else %}{{(kgrid.dimensions[1]+1)/2}}{% endif %}, nqx3 = {% if kgrid.dimensions[2]%2 == 0 %}{{kgrid.dimensions[2]/2}}{% else %}{{(kgrid.dimensions[2]+1)/2}}{% endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{% if d%2 == 0 %}{{d}} {% else %}{{d+1}} {% endif %}{% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_hse.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"projwfc","results":[{"name":"density_of_states"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_gap.json":{"_id":"233bb8cf-3b4a-5378-84d9-a6a95a2ab43d","name":"Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_nscf","results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_structure_dos.json":{"_id":"fa594399-6b98-5d79-986c-0713601dc06c","name":"Band Structure + Density of States","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"d618df45-5af3-5da5-8882-d74a27e00b04","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_nscf","results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"projwfc","results":[{"name":"density_of_states"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_structure_hse.json":{"_id":"ef3089f3-7460-56f2-9aa2-172d5339d3be","name":"Band Structure - HSE","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"hybrid","functional":"hse06","method":{"type":"pseudopotential","subtype":"us","data":{}}},"units":[{"type":"execution","name":"pw_scf_bands_hse","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"08bd7e4a-2454-53b7-8cc9-9a95975f7e6f","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf_bands_hse","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_bands_hse.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n {% for d in qgrid.dimensions -%}\n nqx{{loop.index}} = {{d}}\n {% endfor %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal\n{{ '{{' }} {{ explicitKPath.length }} {% raw %} + KPOINTS|length {% endraw %} {{ '}}' }}\n{% raw %}\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n{% endraw %}\n{% for point in explicitKPath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}0.0000001\n{% endfor %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPathFormDataManager"}],"executableName":"pw.x","name":"pw_scf_bands_hse.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_structure_magn.json":{"_id":"4a7dced1-224e-57d7-a616-cbad99062c7b","name":"Spin magnetic bandstructure","application":{"name":"espresso"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf_magn","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"c229d2a0-3c19-5f13-b3e0-ceb86cb9fbc1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf_magn","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_magn.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_magn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands_magn","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands_magn","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_magn.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_magn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands_spin_up","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands_spin_up","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_up.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_up.dat'{% endraw %}\n spin_component = 1\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_up.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands_spin_dn","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands_spin_dn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_dn.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_dn.dat'{% endraw %}\n spin_component = 2\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_dn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_structure_soc.json":{"_id":"51e6fb82-538a-58ee-8d4e-991c8446f657","name":"Spin orbit coupling bandstructure","application":{"name":"espresso"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"nc-fr","data":{"searchText":"nc-fr"}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf_soc","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"74ec024a-f247-5f15-9c21-cc169bcb62c7","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf_soc","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_soc.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_soc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands_soc","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands_soc","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_soc.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_soc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_structure.json":{"_id":"26d32e68-c2b5-50e9-8933-15f684fcc039","name":"Band Structure","application":{"name":"espresso"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"d618df45-5af3-5da5-8882-d74a27e00b04","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/dielectric_tensor.json":{"_id":"38340b52-83ad-5862-bc18-c140bdc0cb72","name":"Compute Dielectric Function","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","dielectric_tensor","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"nc","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b230ec3-0791-52f7-a4db-625390b8718f","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set No-Symmetry Flag","type":"assignment","operand":"NO_SYMMETRY_NO_INVERSION","value":true,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"3b230ec3-0791-52f7-a4db-625390b8718f","head":false,"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_nscf","results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Compute dielectric function","head":false,"results":[{"name":"dielectric_tensor"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"epsilon.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"dielectric_tensor","results":[{"name":"dielectric_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"epsilon.x","input":[{"name":"epsilon.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n","contextProviders":[],"executableName":"epsilon.x","name":"epsilon.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/dos.json":{"_id":"2cf317f3-3306-5a96-bc9b-e9103ebcd5be","name":"Density of States","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_nscf","results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"projwfc","results":[{"name":"density_of_states"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/electronic_density_mesh.json":{"_id":"e2749c5a-fcd9-589c-819b-8b88c5c90924","name":"Electronic Density Mesh","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pp_density","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"pp_density","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_density.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_density.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/esm_relax.json":{"_id":"69728792-afeb-50aa-9b4e-6974a90f676a","name":"Effective Screening Medium (ESM) Relax","application":{"name":"espresso"},"properties":["atomic_forces","charge_density_profile","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_esm_relax","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"a2bec506-1fdd-5125-a787-85f31cde20c1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_esm_relax","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm_relax.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/esm.json":{"_id":"0de669f6-a455-5dae-b331-19dc85f7090f","name":"Effective Screening Medium (ESM)","application":{"name":"espresso"},"properties":["atomic_forces","charge_density_profile","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_esm","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"2f487bc6-c237-53e4-bad5-be60369662cb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_esm","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/espresso_extract_kpoints.json":{"_id":"a2785cc5-2427-5c7a-b30f-7077475b948c","name":"Extract KPOINTS","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Extract kpoints","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"a716b133-2d04-50b5-b497-100265e3fa24","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"espresso_extract_kpoints","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"espresso_extract_kpoints.py"},{"name":"requirements.txt","templateName":"requirements_empty.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_extract_kpoints.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/espresso_xml_get_qpt_irr.json":{"_id":"e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a","name":"espresso-xml-get-qpt-irr","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[],"schemaVersion":"2022.8.16","isDraft":false},"espresso/fixed_cell_relaxation.json":{"_id":"fb75e249-5489-5146-bd8a-786d33330d9c","name":"Fixed-cell Relaxation","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"c42871f6-ab79-5987-b228-c3bd80f16ffd","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_relax","results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_relax.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/gw_band_structure_band_gap_full_frequency.json":{"_id":"46bcdcc8-628e-518e-b8c3-9bf38d7a2aef","name":"Full Frequency GW Band Structure + Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{"searchText":".*dojo-oncv.*"}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"gw_bands_full_frequency","head":false,"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"gw.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"gw_bands_full_frequency","results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_full_frequency.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_full_frequency.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/gw_band_structure_band_gap_plasmon_pole.json":{"_id":"72b79a87-8eef-5fe2-9d6c-6c9c256dd56c","name":"Plasmon-Pole GW Band Structure + Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{"searchText":".*dojo-oncv.*"}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"gw_bands_plasmon_pole","head":false,"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"gw.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"gw_bands_plasmon_pole","results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_plasmon_pole.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_plasmon_pole.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/kpoint_convergence.json":{"_id":"ff6a8fbc-2202-5786-9a26-67c843417d0b","name":"K-point Convergence","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-tolerance","head":true,"next":"init-increment","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-increment","head":false,"next":"init-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-result","head":false,"next":"init-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-parameter","head":false,"next":"pwscf-kpoint-convergence","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"pwscf-kpoint-convergence","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf_kpt_conv","results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_kpt_conv.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0{% endraw %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_kpt_conv.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"store-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"pwscf-kpoint-convergence"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"store-result","head":false,"next":"check-convergence","schemaVersion":"2022.8.16","isDefault":false},{"name":"check convergence","type":"condition","input":[],"statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"check-convergence","then":"convergence-is-reached","else":"update-result","head":false,"next":"update-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"update-result","head":false,"next":"increment-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"increment-parameter","next":"pwscf-kpoint-convergence","head":false,"schemaVersion":"2022.8.16","isDefault":false},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"convergence-is-reached","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/neb.json":{"isMultiMaterial":true,"_id":"c9034468-df28-5357-8912-02226f919042","name":"Nudged Elastic Band (NEB)","application":{"name":"espresso"},"properties":["reaction_energy_barrier","reaction_energy_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"neb","head":true,"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9f273ca0-d240-5b1f-89a9-64dd579304ac","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"neb.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"neb","results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"neb.x","input":[{"name":"neb.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = {{ 2 + (input.INTERMEDIATE_IMAGES.length or neb.nImages) }},\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_first = false %}\n{%- for position in input.FIRST_IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_first = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.FIRST_IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_first %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n{%- for IMAGE in input.INTERMEDIATE_IMAGES %}\nINTERMEDIATE_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_intermediate = false %}\n{%- for position in IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_intermediate = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_intermediate %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n{%- endfor %}\nLAST_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_last = false %}\n{%- for position in input.LAST_IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_last = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.LAST_IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_last %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nEND_POSITIONS\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nEND_ENGINE_INPUT\nEND\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"NEBFormDataManager"},{"name":"QENEBInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"neb.x","name":"neb.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/ph_init_qpoints.json":{"_id":"2f017bcb-f4ba-55b8-b939-1f780679a88e","name":"ph-init-qpoints","application":{"name":"espresso"},"properties":[],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"ph_init_qpoints","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"b8ea6a33-38f3-5434-b17e-b5eae8fff9fc","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_init_qpoints","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_init_qpoints.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_init_qpoints.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/ph_single_irr_qpt.json":{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","name":"ph-single-irr-qpt","application":{"name":"espresso"},"properties":[],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"ph_single_irr_qpt","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"8db9af08-d935-57a0-a824-e7db6d936de8","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_single_irr_qpt","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_single_irr_qpt.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_single_irr_qpt.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/phonon_dispersions.json":{"_id":"bfb69b48-8fbf-5a0d-8949-448f20754766","name":"Phonon Dispersions","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"13bcafce-56ef-5b47-b079-317495eb6933","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_grid","results":[{"name":"phonon_dos"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"q2r","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"matdyn_path","results":[{"name":"phonon_dispersions"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/phonon_dos_dispersion.json":{"_id":"291d25cd-378a-5be7-9d85-c8013a4b165b","name":"Phonon Density of States + Dispersions","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"13bcafce-56ef-5b47-b079-317495eb6933","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_grid","results":[{"name":"phonon_dos"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"q2r","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"matdyn_grid","results":[{"name":"phonon_dos"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"matdyn_path","results":[{"name":"phonon_dispersions"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/phonon_dos.json":{"_id":"2232051b-9f2a-5a48-9b4d-6231eb6e8297","name":"Phonon Density of States","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"13bcafce-56ef-5b47-b079-317495eb6933","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_grid","results":[{"name":"phonon_dos"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"q2r","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"matdyn_grid","results":[{"name":"phonon_dos"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/phonon_reduce.json":{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","name":"reduce","application":{"name":"espresso"},"properties":["phonon_dispersions","phonon_dos"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"ph_grid_restart","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb206177-a4af-599a-81ba-6c88d24253b6","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_grid_restart","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid_restart.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid_restart.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"q2r","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"matdyn_grid","results":[{"name":"phonon_dos"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"matdyn_path","results":[{"name":"phonon_dispersions"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/plot_wavefunction.json":{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","name":"Plot Wavefunction","application":{"name":"espresso"},"properties":["file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"plot WFN","head":true,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"57fca898-8e8b-5ef2-81a5-9d2b612bc18d","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"plot_wavefunction","results":[{"name":"file_content"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/post_processor.json":{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","name":"post-processor","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"name":"espresso_collect_dynmat","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_collect_dynmat.sh"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_collect_dynmat.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/pre_processor.json":{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","name":"pre-processor","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"name":"espresso_link_outdir_save","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_link_outdir_save.sh"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_link_outdir_save.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/pw_scf.json":{"_id":"f52b8039-83d0-5485-a1f1-0bc37cb01ed3","name":"pw-scf","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/recalculate_bands.json":{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","name":"Recalculate Bands","application":{"name":"espresso"},"properties":["band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_bands","head":true,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/surface_energy.json":{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","name":"Surface Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/total_energy.json":{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","name":"Total Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false,"tags":["default"]},"espresso/valence_band_offset_calc_from_previous_esp_vbm.json":{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","name":"Calculate VBO","application":{"name":"espresso"},"properties":["valence_band_offset"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Difference of valence band maxima","type":"assignment","operand":"VBM_DIFF","value":"VBM_LEFT - VBM_RIGHT","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","head":true,"next":"2626f7bb-d392-5fd4-ab71-329b508de347","schemaVersion":"2022.8.16","isDefault":false},{"name":"Difference of macroscopically averaged ESP in bulk","type":"assignment","operand":"AVG_ESP_DIFF","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","head":false,"next":"b7307787-53e2-599b-ad12-d627b04074b4","schemaVersion":"2022.8.16","isDefault":false},{"name":"Lineup of macroscopically averaged ESP in interface","type":"assignment","operand":"ESP_LINEUP","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","head":false,"next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","schemaVersion":"2022.8.16","isDefault":false},{"name":"Valence Band Offset","type":"assignment","operand":"VALENCE_BAND_OFFSET","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))","input":[],"results":[{"name":"valence_band_offset"}],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/variable_cell_relaxation.json":{"systemName":"espresso-variable-cell-relaxation","_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","name":"Variable-cell Relaxation","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_vc-relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_vc-relax","results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false,"tags":["variable-cell_relaxation"]},"espresso/wavefunction_amplitude.json":{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","name":"Wavefunction Amplitude","application":{"name":"espresso"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"band_structure"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"pw-scf","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"extract-band-energies","schemaVersion":"2022.8.16","isDefault":false},{"name":"Extract Band Energies","type":"assignment","operand":"band_energies","value":"[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]","input":[{"name":"band_structure","scope":"pw-scf"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"extract-band-energies","head":false,"next":"indices-below-fermi","schemaVersion":"2022.8.16","isDefault":false},{"name":"Find Indices Below Fermi","type":"assignment","operand":"indices_below_fermi","value":"[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]","input":[{"name":"fermi_energy","scope":"pw-scf"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"indices-below-fermi","head":false,"next":"8771dc7f-878e-5f13-a840-a3a416854f1e","schemaVersion":"2022.8.16","isDefault":false},{"name":"Store Band Below EF","type":"assignment","operand":"KBAND_VALUE_BELOW_EF","value":"indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8771dc7f-878e-5f13-a840-a3a416854f1e","head":false,"next":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select Band","type":"assignment","operand":"KBAND_VALUE","value":"KBAND_VALUE_BELOW_EF","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","head":false,"next":"pp-wfn","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pp_wfn","head":false,"results":[{"name":"wavefunction_amplitude"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pp-wfn","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"pp_wfn","results":[{"name":"wavefunction_amplitude"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_wfn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false,"tags":["wfn","wfn_plot"]},"espresso/zero_point_energy.json":{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","name":"Zero Point Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"107595d1-490f-53a2-8432-7f8a12f14d96","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_zpe","head":false,"results":[{"name":"zero_point_energy"}],"monitors":[{"name":"standard_output"}],"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_gamma","results":[{"name":"zero_point_energy"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"nwchem/total_energy.json":{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","name":"Total Energy","application":{"name":"nwchem"},"properties":["total_energy","total_energy_contributions"],"model":{"type":"dft","subtype":"gga","method":{"type":"localorbital","subtype":"pople","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"nwchem_total_energy","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"nwchem","shortName":"nwchem","summary":"NWChem","build":"GNU","isDefault":true,"version":"7.0.2","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"}],"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem","schemaVersion":"2022.8.16"},"flavor":{"name":"nwchem_total_energy","results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"preProcessors":[],"postProcessors":[],"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"python/ml/classification_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:setup_variables_packages","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:read_csv:pandas","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:train_test_split:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:pre_processing:standardization:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:model:random_forest_classification:sklearn","results":[{"name":"workflow:pyml_predict"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ROC Curve Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:post_processing:roc_curve:sklearn","results":[{"name":"file_content"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"python/ml/clustering_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:setup_variables_packages","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:read_csv:pandas","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:train_test_split:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:pre_processing:standardization:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:model:k_means_clustering:sklearn","results":[{"name":"workflow:pyml_predict"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"model_k_means_clustering_sklearn.py","templateName":"model_k_means_clustering_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_k_means_clustering_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"9c95c27b-c8bd-5e8b-8829-d354611decef","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"2D PCA Clusters Plot","head":false,"results":[{"name":"file_content"},{"name":"file_content"},{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9c95c27b-c8bd-5e8b-8829-d354611decef","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:post_processing:pca_2d_clusters:matplotlib","results":[{"name":"file_content"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_pca_2d_clusters_matplotlib.py","templateName":"post_processing_pca_2d_clusters_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_pca_2d_clusters_matplotlib.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"python/ml/regression_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:setup_variables_packages","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:read_csv:pandas","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:train_test_split:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:pre_processing:standardization:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:model:multilayer_perceptron:sklearn","results":[{"name":"workflow:pyml_predict"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Parity Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:post_processing:parity_plot:matplotlib","results":[{"name":"file_content"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"python/ml/train_head.json":{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"flowchartId":"head-set-predict-status","head":true,"next":"head-fetch-training-data","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Dataset","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"type":"object_storage","basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"head-branch-on-predict-status","schemaVersion":"2022.8.16","isDefault":false},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","then":"head-fetch-trained-model","head":false,"next":"head-fetch-trained-model","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["set-io-unit-filenames"],"enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"type":"object_storage","basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"end-of-ml-train-head","schemaVersion":"2022.8.16","isDefault":false},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"end-of-ml-train-head","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"python/python_script.json":{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","name":"Python Script","application":{"name":"python"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"python","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"hello_world","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"shell/batch_espresso_pwscf.json":{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","name":"Shell Batch Job (Espresso PWSCF)","application":{"name":"shell"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"name":"job_espresso_pw_scf","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"shell/hello_world.json":{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","name":"Shell Hello World","application":{"name":"shell"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"name":"hello_world","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/band_gap.json":{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","name":"Band Gap","application":{"name":"vasp"},"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"f0d65517-9592-5bc8-948e-a0851a766cbb","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_nscf","head":false,"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_nscf","results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/band_structure_dos.json":{"_id":"d38fea11-9781-5151-8dae-d705381498be","name":"Band Structure + Density of States","application":{"name":"vasp"},"properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/band_structure.json":{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","name":"Band Structure","application":{"name":"vasp"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/dos.json":{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","name":"Density of States","application":{"name":"vasp"},"properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/fixed_cell_relaxation.json":{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","name":"Fixed-cell Relaxation","application":{"name":"vasp"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_relax","head":true,"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_relax","results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/initial_final_total_energies.json":{"isMultiMaterial":true,"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","name":"Initial/Final Total Energies","application":{"name":"vasp"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_neb_initial","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_neb_initial","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"e65a17ce-10c8-5710-ad4d-fb3d42434091","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_neb_final","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_neb_final","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"compute":{"ppn":1,"nodes":1,"queue":"D","timeLimit":"01:00:00","notify":"n","cluster":{"fqdn":""},"timeLimitType":"per single attempt","isRestartable":true,"arguments":{"nimage":1,"npools":1,"nband":1,"ntg":1,"ndiag":1}},"schemaVersion":"2022.8.16","isDraft":false},"vasp/kpoint_convergence.json":{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","name":"K-point Convergence","application":{"name":"vasp"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-tolerance","head":true,"next":"init-increment","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-increment","head":false,"next":"init-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-result","head":false,"next":"init-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-parameter","head":false,"next":"vasp-kpoint-convergence","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"vasp-kpoint-convergence","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_kpt_conv","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"store-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"store-result","head":false,"next":"check-convergence","schemaVersion":"2022.8.16","isDefault":false},{"name":"check convergence","type":"condition","input":[],"statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"check-convergence","then":"convergence-is-reached","else":"update-result","head":false,"next":"update-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"update-result","head":false,"next":"increment-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"increment-parameter","next":"vasp-kpoint-convergence","head":false,"schemaVersion":"2022.8.16","isDefault":false},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"convergence-is-reached","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/neb_subworkflow.json":{"isMultiMaterial":true,"_id":"e6215fb9-e60c-541b-b73e-b077d64b3a95","name":"Nudged Elastic Band (NEB)","application":{"name":"vasp"},"properties":["reaction_energy_barrier","reaction_energy_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_neb","head":true,"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9a1660ab-8067-5fad-9fb8-7c039f634636","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_neb","results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB"},{"name":"KPOINTS","templateName":"KPOINTS"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nIBRION = 1\nEDIFFG = -0.001\nENCUT = 500\nNELM = 100\nNSW = 100\nIMAGES = {{ input.INTERMEDIATE_IMAGES.length or neb.nImages }}\nSPRING = -5\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/prepare_images.json":{"isMultiMaterial":true,"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","name":"Prepare Directories","application":{"name":"vasp"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"prepare-neb-images","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"name":"bash_vasp_prepare_neb_images","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_xml_get_qpt_irr.py","rendered":"# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n\n\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","schemaVersion":"2022.8.16"}]},{"name":"assignment","type":"assignment","operand":"Q_POINTS","value":"json.loads(STDOUT)","input":[{"scope":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","name":"STDOUT"}],"status":"idle","statusTrack":[],"flowchartId":"d0fd8654-2106-546b-8792-7bb46272befc","tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]},{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","name":"reduce","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["phonon_dos","phonon_dispersions"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"ph_grid_restart","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb206177-a4af-599a-81ba-6c88d24253b6","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid_restart.in"}],"monitors":["standard_output"],"results":[],"name":"ph_grid_restart","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid_restart.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"next":"3b4507a7-9244-540b-abe0-66bceab700f5"},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":["standard_output"],"results":[],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","rendered":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","schemaVersion":"2022.8.16"}],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2"},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":["standard_output"],"results":["phonon_dos"],"name":"matdyn_grid","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","rendered":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n","schemaVersion":"2022.8.16"}],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1"},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":["standard_output"],"results":["phonon_dispersions"],"name":"matdyn_path","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","rendered":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Preliminary SCF Calculation","type":"subworkflow","_id":"79f2cb6a-7994-5369-8c85-af07c55ad26f","status":"idle","statusTrack":[],"flowchartId":"b6a2b27a-0fec-5e0e-8974-073ee9d2ad83","tags":[],"head":true,"next":"4bb74dfb-46a6-5bf4-a477-5d374dc2e271"},{"name":"ph-init-qpoints","type":"subworkflow","_id":"2f017bcb-f4ba-55b8-b939-1f780679a88e","status":"idle","statusTrack":[],"flowchartId":"4bb74dfb-46a6-5bf4-a477-5d374dc2e271","tags":[],"head":false,"next":"9894b91f-6e97-5ee6-af02-0bef26bd62c0"},{"name":"espresso-xml-get-qpt-irr","type":"subworkflow","_id":"e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a","status":"idle","statusTrack":[],"flowchartId":"9894b91f-6e97-5ee6-af02-0bef26bd62c0","tags":[],"head":false,"next":"24e3c1f0-8090-512e-9727-8770071d17c8"},{"name":"map","type":"map","workflowId":"731d3397-3278-516a-b28e-53626ef50f0a","input":{"target":"MAP_DATA","scope":"global","name":"Q_POINTS","values":[],"useValues":false},"status":"idle","statusTrack":[],"flowchartId":"24e3c1f0-8090-512e-9727-8770071d17c8","tags":[],"head":false,"next":"55a9e9fb-3545-5c4b-a1bb-b64a899b78c6"},{"name":"reduce","type":"subworkflow","_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","status":"idle","statusTrack":[],"flowchartId":"55a9e9fb-3545-5c4b-a1bb-b64a899b78c6","tags":[],"head":false}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"_id":"23b9058b-884c-52d4-82a8-ee162b9761e0","workflows":[{"name":"pre-processor","subworkflows":[{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","name":"pre-processor","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_link_outdir_save.sh"}],"monitors":["standard_output"],"name":"espresso_link_outdir_save","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_link_outdir_save.sh","rendered":"\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n\n","schemaVersion":"2022.8.16"}]}]},{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","name":"ph-single-irr-qpt","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"ph_single_irr_qpt","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"8db9af08-d935-57a0-a824-e7db6d936de8","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_single_irr_qpt.in"}],"monitors":["standard_output"],"results":[],"name":"ph_single_irr_qpt","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_single_irr_qpt.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n \n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n \n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = '{{ JOB_SCRATCH_DIR }}/outdir'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}]}]},{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","name":"post-processor","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cd5c3e29-511b-5ef8-949d-ad884f210301","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_collect_dynmat.sh"}],"monitors":["standard_output"],"name":"espresso_collect_dynmat","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_collect_dynmat.sh","rendered":"\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"pre-processor","type":"subworkflow","_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","status":"idle","statusTrack":[],"flowchartId":"e9a790f4-dec6-52c1-b951-014f0ff01cb4","tags":[],"head":true,"next":"c2195045-7a5c-54d3-ab88-211c82de09f1"},{"name":"ph-single-irr-qpt","type":"subworkflow","_id":"e68db280-8636-53e3-81a0-88396ba6147d","status":"idle","statusTrack":[],"flowchartId":"c2195045-7a5c-54d3-ab88-211c82de09f1","tags":[],"head":false,"next":"e483c7fb-2a29-5e91-819a-7465ead70134"},{"name":"post-processor","type":"subworkflow","_id":"7239fc3a-b343-513f-af35-e8687e1829da","status":"idle","statusTrack":[],"flowchartId":"e483c7fb-2a29-5e91-819a-7465ead70134","tags":[],"head":false}],"properties":[],"_id":"731d3397-3278-516a-b28e-53626ef50f0a","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"compute":{"ppn":1,"nodes":1,"queue":"D","timeLimit":"01:00:00","notify":"n","cluster":{"fqdn":""}}}],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/recalculate_bands.json":{"name":"Recalculate Bands","subworkflows":[{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","name":"Recalculate Bands","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_bands","head":true,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2"},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Recalculate Bands","type":"subworkflow","_id":"64551dfb-e529-5d8d-9092-ff268f4da134","status":"idle","statusTrack":[],"flowchartId":"e8b72a45-765e-565f-ab17-c91a21aec09d","tags":[],"head":true}],"properties":["band_structure"],"_id":"42b2b964-8ccc-5b36-9e33-41a954abc2ba","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/surface_energy.json":{"name":"Surface Energy","subworkflows":[{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","name":"Surface Energy","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"name":"io-slab","type":"io","subtype":"input","head":true,"results":[],"monitors":[],"flowchartId":"e463ef46-a36e-5168-87dd-e21eb980dfb8","preProcessors":[],"postProcessors":[],"source":"api","input":[{"endpoint":"materials","endpoint_options":{"params":{"query":"{'_id': MATERIAL_ID}","projection":"{}"}},"name":"DATA"}],"next":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"slab","type":"assignment","operand":"SLAB","value":"DATA[0]","input":[{"name":"DATA","scope":"e463ef46-a36e-5168-87dd-e21eb980dfb8"}],"head":false,"results":[],"monitors":[],"flowchartId":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","preProcessors":[],"postProcessors":[],"next":"44263820-0c80-5bd1-b854-9da8d198eac1","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"io-bulk","type":"io","subtype":"input","head":false,"results":[],"monitors":[],"flowchartId":"44263820-0c80-5bd1-b854-9da8d198eac1","preProcessors":[],"postProcessors":[],"source":"api","input":[{"endpoint":"materials","endpoint_options":{"params":{"query":"{'_id': SLAB.metadata.bulkId}","projection":"{}"}},"name":"DATA"}],"next":"b70656f1-a394-57f4-b4de-00096969df4b","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"bulk","type":"assignment","operand":"BULK","value":"DATA[0] if DATA else None","input":[{"name":"DATA","scope":"44263820-0c80-5bd1-b854-9da8d198eac1"}],"head":false,"results":[],"monitors":[],"flowchartId":"b70656f1-a394-57f4-b4de-00096969df4b","preProcessors":[],"postProcessors":[],"next":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"assert-bulk","type":"assertion","statement":"BULK != None","errorMessage":"Bulk material does not exist!","head":false,"results":[],"monitors":[],"flowchartId":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","preProcessors":[],"postProcessors":[],"next":"490635e0-c593-5809-9eb2-c794b96cfed1","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"io-e-bulk","type":"io","subtype":"input","head":false,"results":[],"monitors":[],"flowchartId":"490635e0-c593-5809-9eb2-c794b96cfed1","preProcessors":[],"postProcessors":[],"source":"api","input":[{"endpoint":"refined-properties","endpoint_options":{"params":{"query":"{ 'exabyteId': BULK.exabyteId, 'data.name': 'total_energy', 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} }","projection":"{'sort': {'precision.value': -1}, 'limit': 1}"}},"name":"DATA"}],"next":"bbe13b97-4243-5a85-8f61-a279d0b797aa","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"e-bulk","type":"assignment","operand":"E_BULK","value":"DATA[0].data.value if DATA else None","input":[{"name":"DATA","scope":"490635e0-c593-5809-9eb2-c794b96cfed1"}],"head":false,"results":[],"monitors":[],"flowchartId":"bbe13b97-4243-5a85-8f61-a279d0b797aa","preProcessors":[],"postProcessors":[],"next":"a06c9f43-7670-5fd0-ac42-7028a472235a","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"assert-e-bulk","type":"assertion","statement":"E_BULK != None","errorMessage":"E_BULK does not exist!","head":false,"results":[],"monitors":[],"flowchartId":"a06c9f43-7670-5fd0-ac42-7028a472235a","preProcessors":[],"postProcessors":[],"next":"cdf210be-26ed-585a-b4ac-d55795ba2975","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"surface","type":"assignment","operand":"A","value":"np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))","input":[],"head":false,"results":[],"monitors":[],"flowchartId":"cdf210be-26ed-585a-b4ac-d55795ba2975","preProcessors":[],"postProcessors":[],"next":"ffa8e43d-096a-555b-b8d0-6d283365ef47","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"n-bulk","type":"assignment","operand":"N_BULK","value":"len(BULK.basis.elements)","input":[],"head":false,"results":[],"monitors":[],"flowchartId":"ffa8e43d-096a-555b-b8d0-6d283365ef47","preProcessors":[],"postProcessors":[],"next":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"n-slab","type":"assignment","operand":"N_SLAB","value":"len(SLAB.basis.elements)","input":[],"head":false,"results":[],"monitors":[],"flowchartId":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","preProcessors":[],"postProcessors":[],"next":"9fc7a088-5533-5f70-bb33-f676ec65f565","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"fcd88119-817c-5ac1-a430-ba892ac743eb"},{"name":"e-slab","type":"assignment","operand":"E_SLAB","value":"total_energy","input":[{"name":"total_energy","scope":"9fc7a088-5533-5f70-bb33-f676ec65f565"}],"head":false,"results":[],"monitors":[],"flowchartId":"fcd88119-817c-5ac1-a430-ba892ac743eb","preProcessors":[],"postProcessors":[],"next":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"surface-energy","type":"assignment","operand":"SURFACE_ENERGY","value":"1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))","input":[],"head":false,"results":[{"name":"surface_energy"}],"monitors":[],"flowchartId":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]}]}],"units":[{"name":"Surface Energy","type":"subworkflow","_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","status":"idle","statusTrack":[],"flowchartId":"d81dc9ce-bb50-5bc6-af1d-e5ede03bb0a6","tags":[],"head":true}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force"],"_id":"68512987-de73-5614-bab2-0f8b575cffa3","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/total_energy.json":{"name":"Total Energy","subworkflows":[{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","name":"Total Energy","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Total Energy","type":"subworkflow","_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","status":"idle","statusTrack":[],"flowchartId":"6059d61a-6a92-5657-9130-02208639aff8","tags":[],"head":true}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"_id":"4e36ca25-fa46-5628-a227-27d22dea8553","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"tags":["default"],"application":{"name":"espresso"}},"espresso/valence_band_offset.json":{"name":"Valence Band Offset (2D)","subworkflows":[{"isMultiMaterial":true,"_id":"9c65d03e-6a30-58f3-947a-f174342be0c3","name":"BS + Avg ESP (Interface)","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_gaps","average_potential_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"name":"Set Material Index (Interface)","type":"assignment","operand":"MATERIAL_INDEX","value":"0","input":[],"status":"idle","statusTrack":[],"flowchartId":"0f21d8c4-ab32-53ba-b40d-fc9b6608e1b9","tags":[],"head":true,"next":"9fc7a088-5533-5f70-bb33-f676ec65f565","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"pw-bands-calculate-band-gap"},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"a667d9fd-35d5-5897-be0e-fa0247233649"},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap"}],"status":"idle","statusTrack":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","tags":[],"head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"status":"idle","statusTrack":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","tags":[],"head":false,"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde"},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":["standard_output"],"results":[],"name":"pp_electrostatic_potential","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","schemaVersion":"2022.8.16"}],"next":"average-electrostatic-potential"},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":["standard_output"],"results":["average_potential_profile"],"name":"average_potential","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","rendered":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","schemaVersion":"2022.8.16"}],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9"},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential"}],"status":"idle","statusTrack":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","tags":[],"head":false,"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}}]},{"_id":"ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7","name":"Find ESP Values (Interface)","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Find Extrema","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"python-find-extrema","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":["standard_output"],"name":"generic:processing:find_extrema:scipy","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","rendered":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\nY = np.array({{array_from_context}})\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","schemaVersion":"2022.8.16"}],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d"},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP_INTERFACE","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema"}],"status":"idle","statusTrack":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]},{"isMultiMaterial":true,"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","name":"BS + Avg ESP (interface left)","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_gaps","average_potential_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"name":"Set Material Index (Interface left)","type":"assignment","operand":"MATERIAL_INDEX","value":"1","input":[],"status":"idle","statusTrack":[],"flowchartId":"0bd31760-f6e4-5826-b282-882c06c97f94","tags":[],"head":true,"next":"3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"pw-bands-calculate-band-gap-left"},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap-left","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"a667d9fd-35d5-5897-be0e-fa0247233649"},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-left"}],"status":"idle","statusTrack":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","tags":[],"head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM_LEFT","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"status":"idle","statusTrack":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","tags":[],"head":false,"next":"dfc4f1c5-5856-588a-99df-6d5fb46bb429","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"dfc4f1c5-5856-588a-99df-6d5fb46bb429","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"next":"b1bb2b3e-3197-5bcd-85b0-959cc357c8d3"},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"b1bb2b3e-3197-5bcd-85b0-959cc357c8d3","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":["standard_output"],"results":[],"name":"pp_electrostatic_potential","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","schemaVersion":"2022.8.16"}],"next":"average-electrostatic-potential-left"},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential-left","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":["standard_output"],"results":["average_potential_profile"],"name":"average_potential","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","rendered":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","schemaVersion":"2022.8.16"}],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9"},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-left"}],"status":"idle","statusTrack":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","tags":[],"head":false,"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}}]},{"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","name":"Find ESP Value (Interface left)","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Find Extrema","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"python-find-extrema-left","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":["standard_output"],"name":"generic:processing:find_extrema:scipy","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","rendered":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\nY = np.array({{array_from_context}})\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","schemaVersion":"2022.8.16"}],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d"},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP_LEFT","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema-left"}],"status":"idle","statusTrack":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]},{"isMultiMaterial":true,"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","name":"BS + Avg ESP (interface right)","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_gaps","average_potential_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"name":"Set Material Index (Interface right)","type":"assignment","operand":"MATERIAL_INDEX","value":"2","input":[],"status":"idle","statusTrack":[],"flowchartId":"a05809d1-cc0d-5a0b-bf5e-d43b90a6ac4b","tags":[],"head":true,"next":"b89d6348-3915-5c24-9fbb-350bc98ac708","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"b89d6348-3915-5c24-9fbb-350bc98ac708","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"pw-bands-calculate-band-gap-right"},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap-right","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"a667d9fd-35d5-5897-be0e-fa0247233649"},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-right"}],"status":"idle","statusTrack":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","tags":[],"head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM_RIGHT","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"status":"idle","statusTrack":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","tags":[],"head":false,"next":"bc3f514c-4bed-521b-85a3-4e0edfdc3585","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"bc3f514c-4bed-521b-85a3-4e0edfdc3585","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"next":"28bb682d-d287-5beb-8a67-826449c474ee"},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"28bb682d-d287-5beb-8a67-826449c474ee","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":["standard_output"],"results":[],"name":"pp_electrostatic_potential","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","schemaVersion":"2022.8.16"}],"next":"average-electrostatic-potential-right"},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential-right","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":["standard_output"],"results":["average_potential_profile"],"name":"average_potential","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","rendered":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","schemaVersion":"2022.8.16"}],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9"},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-right"}],"status":"idle","statusTrack":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","tags":[],"head":false,"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}}]},{"_id":"736295e8-2ee0-5974-83bc-362061ac0688","name":"Find ESP Value (Interface right)","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Find Extrema","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"python-find-extrema-right","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":["standard_output"],"name":"generic:processing:find_extrema:scipy","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","rendered":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\nY = np.array({{array_from_context}})\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","schemaVersion":"2022.8.16"}],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d"},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP_RIGHT","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema-right"}],"status":"idle","statusTrack":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]},{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","name":"Calculate VBO","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["valence_band_offset"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Difference of valence band maxima","type":"assignment","operand":"VBM_DIFF","value":"VBM_LEFT - VBM_RIGHT","input":[],"status":"idle","statusTrack":[],"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","tags":[],"head":true,"next":"2626f7bb-d392-5fd4-ab71-329b508de347","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Difference of macroscopically averaged ESP in bulk","type":"assignment","operand":"AVG_ESP_DIFF","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]","input":[],"status":"idle","statusTrack":[],"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","tags":[],"head":false,"next":"b7307787-53e2-599b-ad12-d627b04074b4","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Lineup of macroscopically averaged ESP in interface","type":"assignment","operand":"ESP_LINEUP","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])","input":[],"status":"idle","statusTrack":[],"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","tags":[],"head":false,"next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Valence Band Offset","type":"assignment","operand":"VALENCE_BAND_OFFSET","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))","input":[],"results":[{"name":"valence_band_offset"}],"status":"idle","statusTrack":[],"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]}],"units":[{"name":"BS + Avg ESP (Interface)","type":"subworkflow","_id":"9c65d03e-6a30-58f3-947a-f174342be0c3","status":"idle","statusTrack":[],"flowchartId":"fd622b5c-5c02-594e-b582-b245c17ca9a4","tags":[],"head":true,"next":"ad3b1e4c-5965-5605-a067-dd0c59907c4b"},{"name":"Find ESP Values (Interface)","type":"subworkflow","_id":"ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7","status":"idle","statusTrack":[],"flowchartId":"ad3b1e4c-5965-5605-a067-dd0c59907c4b","tags":[],"head":false,"next":"8d5b4734-edfd-55cc-ad80-aaa72487398d"},{"name":"BS + Avg ESP (interface left)","type":"subworkflow","_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","status":"idle","statusTrack":[],"flowchartId":"8d5b4734-edfd-55cc-ad80-aaa72487398d","tags":[],"head":false,"next":"102ec582-5b75-52f5-8b39-19ca725ed47a"},{"name":"Find ESP Value (Interface left)","type":"subworkflow","_id":"6c303926-905c-5749-81d5-2d2964fdf09a","status":"idle","statusTrack":[],"flowchartId":"102ec582-5b75-52f5-8b39-19ca725ed47a","tags":[],"head":false,"next":"603c45db-93aa-54ce-a7fe-6e9b65b0037d"},{"name":"BS + Avg ESP (interface right)","type":"subworkflow","_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","status":"idle","statusTrack":[],"flowchartId":"603c45db-93aa-54ce-a7fe-6e9b65b0037d","tags":[],"head":false,"next":"e3444d35-cc41-59f5-8481-78d0c383b84e"},{"name":"Find ESP Value (Interface right)","type":"subworkflow","_id":"736295e8-2ee0-5974-83bc-362061ac0688","status":"idle","statusTrack":[],"flowchartId":"e3444d35-cc41-59f5-8481-78d0c383b84e","tags":[],"head":false,"next":"0e0b141a-39ca-52bc-9094-e5f96dc72f39"},{"name":"Calculate VBO","type":"subworkflow","_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","status":"idle","statusTrack":[],"flowchartId":"0e0b141a-39ca-52bc-9094-e5f96dc72f39","tags":[],"head":false}],"properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"_id":"d8e08cac-7747-50aa-b925-41f214d722c6","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/variable_cell_relaxation.json":{"name":"Variable-cell Relaxation","subworkflows":[{"systemName":"espresso-variable-cell-relaxation","_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","name":"Variable-cell Relaxation","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_vc-relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"monitors":["standard_output","convergence_electronic","convergence_ionic"],"results":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"name":"pw_vc-relax","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","rendered":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Variable-cell Relaxation","type":"subworkflow","_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","status":"idle","statusTrack":[],"flowchartId":"8f6e9590-6a87-584b-abd7-1fb98253054c","tags":[],"head":true}],"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"_id":"c45dcef1-d16b-59d1-9318-cedd0b1acf08","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"tags":["variable-cell_relaxation"],"application":{"name":"espresso"}},"espresso/wavefunction_amplitude.json":{"name":"Wavefunction Amplitude","subworkflows":[{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","name":"Wavefunction Amplitude","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"band_structure"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"pw-scf","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"extract-band-energies"},{"name":"Extract Band Energies","type":"assignment","operand":"band_energies","value":"[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]","input":[{"name":"band_structure","scope":"pw-scf"}],"flowchartId":"extract-band-energies","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"indices-below-fermi","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Find Indices Below Fermi","type":"assignment","operand":"indices_below_fermi","value":"[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]","input":[{"name":"fermi_energy","scope":"pw-scf"}],"flowchartId":"indices-below-fermi","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"8771dc7f-878e-5f13-a840-a3a416854f1e","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Store Band Below EF","type":"assignment","operand":"KBAND_VALUE_BELOW_EF","value":"indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1","input":[],"status":"idle","statusTrack":[],"flowchartId":"8771dc7f-878e-5f13-a840-a3a416854f1e","tags":[],"head":false,"next":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Select Band","type":"assignment","operand":"KBAND_VALUE","value":"KBAND_VALUE_BELOW_EF","input":[],"status":"idle","statusTrack":[],"flowchartId":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","tags":[],"head":false,"next":"pp-wfn","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"pp_wfn","head":false,"results":[{"name":"wavefunction_amplitude"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pp-wfn","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"monitors":["standard_output"],"results":["wavefunction_amplitude"],"name":"pp_wfn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_wfn.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {{ KBAND_VALUE | default(1) }}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = NaN\n nx = 200\n/\n","schemaVersion":"2022.8.16"}]}]},{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","name":"Plot Wavefunction","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"plot WFN","head":true,"results":[{"name":"file_content","basename":"wf_r.png","filetype":"image"}],"monitors":[{"name":"standard_output"}],"flowchartId":"57fca898-8e8b-5ef2-81a5-9d2b612bc18d","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"monitors":["standard_output"],"results":[{"name":"file_content"}],"name":"plot_wavefunction","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"script.py","rendered":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Wavefunction Amplitude","type":"subworkflow","_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","status":"idle","statusTrack":[],"flowchartId":"36467db9-279f-52a3-a6ef-ffdc26d875ed","tags":[],"head":true,"next":"4ce49281-e731-550e-af66-6d2408db8237"},{"name":"Plot Wavefunction","type":"subworkflow","_id":"e4ec581f-1cb3-5036-b698-999a96711559","status":"idle","statusTrack":[],"flowchartId":"4ce49281-e731-550e-af66-6d2408db8237","tags":[],"head":false}],"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"_id":"196d364a-5a30-549b-a898-8b9704b50ff1","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"tags":["wfn","wfn_plot"],"application":{"name":"espresso"}},"espresso/zero_point_energy.json":{"name":"Zero Point Energy","subworkflows":[{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","name":"Zero Point Energy","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"107595d1-490f-53a2-8432-7f8a12f14d96"},{"type":"execution","name":"ph_zpe","head":false,"results":[{"name":"zero_point_energy"}],"monitors":[{"name":"standard_output"}],"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"monitors":["standard_output"],"results":["zero_point_energy"],"name":"ph_gamma","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n/\n0 0 0\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Zero Point Energy","type":"subworkflow","_id":"151538cc-9e71-5269-8b9e-cb5977151227","status":"idle","statusTrack":[],"flowchartId":"d906bd20-eb92-5a01-a0e2-c81a2d9b2a41","tags":[],"head":true}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"_id":"3158c78d-58bb-5675-8c7f-6f2337061015","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"nwchem/total_energy.json":{"name":"Total Energy","subworkflows":[{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","name":"Total Energy","application":{"name":"nwchem","shortName":"nwchem","summary":"NWChem","build":"GNU","isDefault":true,"version":"7.0.2","schemaVersion":"2022.8.16"},"properties":["total_energy","total_energy_contributions"],"model":{"type":"dft","subtype":"gga","method":{"type":"localorbital","subtype":"pople","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"nwchem_total_energy","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","preProcessors":[],"postProcessors":[],"application":{"name":"nwchem","shortName":"nwchem","summary":"NWChem","build":"GNU","isDefault":true,"version":"7.0.2","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":["standard_output"],"postProcessors":["error_handler"],"name":"nwchem","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":["standard_output"],"results":["total_energy","total_energy_contributions"],"name":"nwchem_total_energy","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","rendered":" start nwchem\n title \"Test\"\n charge 0\n geometry units au noautosym\n Si 0.000000000 0.000000000 0.000000000 \nSi 1.116306745 0.789348070 1.933500000 \n end\n basis\n * library 6-31G\n end\n dft\n xc B3LYP\n mult 1\n end\n task dft energy\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Total Energy","type":"subworkflow","_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","status":"idle","statusTrack":[],"flowchartId":"6059d61a-6a92-5657-9130-02208639aff8","tags":[],"head":true}],"properties":["total_energy","total_energy_contributions"],"_id":"937fbac8-2dec-5fb1-a46f-b8a0cc3d3d05","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"nwchem"}},"python/ml/classification_workflow.json":{"name":"Python ML Train Classification","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"flowchartId":"head-set-predict-status","tags":["pyml:workflow-type-setter"],"status":"idle","statusTrack":[],"head":true,"next":"head-fetch-training-data","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Fetch Dataset","type":"io","subtype":"input","enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"head-branch-on-predict-status","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"results":[],"preProcessors":[],"postProcessors":[],"then":"head-fetch-trained-model","else":"end-of-ml-train-head","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"flowchartId":"head-branch-on-predict-status","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"head-fetch-trained-model","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","tags":["set-io-unit-filenames"],"status":"idle","statusTrack":[],"head":false,"next":"end-of-ml-train-head","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"flowchartId":"end-of-ml-train-head","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["workflow:pyml_predict","file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"enableRender":true,"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3"},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"7fff5212-6c6d-586b-9997-4d4485e09383"},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02"},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a"},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["workflow:pyml_predict"],"name":"pyml:model:random_forest_classification:sklearn","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"35436b4a-cd9c-5089-ab42-665c4f9ba049"},{"type":"execution","name":"ROC Curve Plot","head":false,"results":[{"basename":"my_roc_plot.png","filetype":"image","name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["file_content"],"name":"pyml:post_processing:roc_curve:sklearn","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Set Up the Job","type":"subworkflow","_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","status":"idle","statusTrack":[],"flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","tags":[],"head":true,"next":"90738aae-daac-599f-913f-29fb6acdff00"},{"name":"Machine Learning","type":"subworkflow","_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","status":"idle","statusTrack":[],"flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","tags":[],"head":false}],"properties":[],"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","workflows":[],"isUsingDataset":true,"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"python/ml/clustering_workflow.json":{"name":"Python ML Train Clustering","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"flowchartId":"head-set-predict-status","tags":["pyml:workflow-type-setter"],"status":"idle","statusTrack":[],"head":true,"next":"head-fetch-training-data","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Fetch Dataset","type":"io","subtype":"input","enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"head-branch-on-predict-status","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"results":[],"preProcessors":[],"postProcessors":[],"then":"head-fetch-trained-model","else":"end-of-ml-train-head","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"flowchartId":"head-branch-on-predict-status","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"head-fetch-trained-model","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","tags":["set-io-unit-filenames"],"status":"idle","statusTrack":[],"head":false,"next":"end-of-ml-train-head","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"flowchartId":"end-of-ml-train-head","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["workflow:pyml_predict","file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"enableRender":true,"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3"},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"7fff5212-6c6d-586b-9997-4d4485e09383"},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02"},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a"},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["workflow:pyml_predict"],"name":"pyml:model:random_forest_classification:sklearn","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"35436b4a-cd9c-5089-ab42-665c4f9ba049"},{"type":"execution","name":"ROC Curve Plot","head":false,"results":[{"basename":"my_roc_plot.png","filetype":"image","name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["file_content"],"name":"pyml:post_processing:roc_curve:sklearn","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Set Up the Job","type":"subworkflow","_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","status":"idle","statusTrack":[],"flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","tags":[],"head":true,"next":"90738aae-daac-599f-913f-29fb6acdff00"},{"name":"Machine Learning","type":"subworkflow","_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","status":"idle","statusTrack":[],"flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","tags":[],"head":false}],"properties":[],"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","workflows":[],"isUsingDataset":true,"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"python/ml/regression_workflow.json":{"name":"Python ML Train Regression","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"flowchartId":"head-set-predict-status","tags":["pyml:workflow-type-setter"],"status":"idle","statusTrack":[],"head":true,"next":"head-fetch-training-data","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Fetch Dataset","type":"io","subtype":"input","enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"head-branch-on-predict-status","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"results":[],"preProcessors":[],"postProcessors":[],"then":"head-fetch-trained-model","else":"end-of-ml-train-head","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"flowchartId":"head-branch-on-predict-status","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"head-fetch-trained-model","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","tags":["set-io-unit-filenames"],"status":"idle","statusTrack":[],"head":false,"next":"end-of-ml-train-head","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"flowchartId":"end-of-ml-train-head","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["workflow:pyml_predict","file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"enableRender":true,"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3"},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"7fff5212-6c6d-586b-9997-4d4485e09383"},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02"},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a"},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["workflow:pyml_predict"],"name":"pyml:model:multilayer_perceptron:sklearn","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c"},{"type":"execution","name":"Parity Plot","head":false,"results":[{"basename":"my_parity_plot.png","filetype":"image","name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["file_content"],"name":"pyml:post_processing:parity_plot:matplotlib","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Set Up the Job","type":"subworkflow","_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","status":"idle","statusTrack":[],"flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","tags":[],"head":true,"next":"90738aae-daac-599f-913f-29fb6acdff00"},{"name":"Machine Learning","type":"subworkflow","_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","status":"idle","statusTrack":[],"flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","tags":[],"head":false}],"properties":[],"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","workflows":[],"isUsingDataset":true,"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"python/python_script.json":{"name":"Python Script","subworkflows":[{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","name":"Python Script","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"python","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":["standard_output"],"name":"hello_world","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","rendered":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Python Script","type":"subworkflow","_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","status":"idle","statusTrack":[],"flowchartId":"c50e28b2-a0c5-5324-8b6f-e99b5a546bd8","tags":[],"head":true}],"properties":[],"_id":"de816646-766b-5f97-b468-0937d4381440","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"shell/batch_espresso_pwscf.json":{"name":"Shell Batch Job (Espresso PWSCF)","subworkflows":[{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","name":"Shell Batch Job (Espresso PWSCF)","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"monitors":["standard_output"],"name":"job_espresso_pw_scf","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","rendered":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Shell Batch Job (Espresso PWSCF)","type":"subworkflow","_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","status":"idle","statusTrack":[],"flowchartId":"d884e8f7-7acf-5a03-bc9a-186903bdaa0e","tags":[],"head":true}],"properties":[],"_id":"e0046fb4-37db-5732-bf81-c48e13081a4c","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"shell"}},"shell/hello_world.json":{"name":"Shell Script","subworkflows":[{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","name":"Shell Hello World","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":["standard_output"],"name":"hello_world","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","rendered":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Shell Hello World","type":"subworkflow","_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","status":"idle","statusTrack":[],"flowchartId":"319307c2-bf22-5bf2-b4e9-a4cdf671b786","tags":[],"head":true}],"properties":[],"_id":"d2fd444c-06b4-5d66-baeb-449c680ae1bf","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"shell"}},"vasp/band_gap.json":{"name":"Band Gap","subworkflows":[{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","name":"Band Gap","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_gaps","fermi_energy"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"f0d65517-9592-5bc8-948e-a0851a766cbb"},{"type":"execution","name":"vasp_nscf","head":false,"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":["standard_output","convergence_electronic"],"results":["band_gaps","fermi_energy"],"name":"vasp_nscf","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Band Gap","type":"subworkflow","_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","status":"idle","statusTrack":[],"flowchartId":"db3b83ea-0ef5-594c-89a8-bde38dbc6105","tags":[],"head":true}],"properties":["atomic_forces","band_gaps","fermi_energy","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"_id":"16ca0232-a570-53d1-a4d3-32bbd6f3f0a2","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/band_structure_dos.json":{"name":"Band Structure + Density of States","subworkflows":[{"_id":"d38fea11-9781-5151-8dae-d705381498be","name":"Band Structure + Density of States","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["density_of_states","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108"},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":["standard_output","convergence_electronic"],"results":["band_structure"],"name":"vasp_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Band Structure + Density of States","type":"subworkflow","_id":"d38fea11-9781-5151-8dae-d705381498be","status":"idle","statusTrack":[],"flowchartId":"8a098bb9-73b1-5e84-bfc7-b783e02d0f53","tags":[],"head":true}],"properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"_id":"c8338d40-3c6e-5581-b03c-d7fb5cbb8df5","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/band_structure.json":{"name":"Band Structure","subworkflows":[{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","name":"Band Structure","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108"},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":["standard_output","convergence_electronic"],"results":["band_structure"],"name":"vasp_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Band Structure","type":"subworkflow","_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","status":"idle","statusTrack":[],"flowchartId":"c573187f-a8bb-5084-9fcf-1560bf4a7786","tags":[],"head":true}],"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"_id":"25b0ad08-87bb-5400-bea4-acd5fe2163c0","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/dos.json":{"name":"Density of States","subworkflows":[{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","name":"Density of States","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["density_of_states","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Density of States","type":"subworkflow","_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","status":"idle","statusTrack":[],"flowchartId":"3e64fdb4-ab5b-52a0-a1d5-51343c49481c","tags":[],"head":true}],"properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"_id":"629a79fb-a03f-5e34-b2ce-9c735e8ef6c0","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/fixed_cell_relaxation.json":{"name":"Fixed-cell Relaxation","subworkflows":[{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","name":"Fixed-cell Relaxation","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["total_energy","atomic_forces","fermi_energy","pressure","stress_tensor","total_force","final_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp_relax","head":true,"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":["standard_output","convergence_electronic","convergence_ionic"],"postProcessors":["prepare_restart"],"results":["total_energy","atomic_forces","fermi_energy","pressure","stress_tensor","total_force","final_structure"],"name":"vasp_relax","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]}],"units":[{"name":"Fixed-cell Relaxation","type":"subworkflow","_id":"db6cc94b-2f26-5688-ba97-80b11567b549","status":"idle","statusTrack":[],"flowchartId":"0de8c4c8-b722-5cd2-ae68-b484262e0a01","tags":[],"head":true}],"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"_id":"cb69418c-2f6c-551d-af81-0cf20ec1113d","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/kpoint_convergence.json":{"name":"K-point Convergence","subworkflows":[{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","name":"K-point Convergence","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"flowchartId":"init-tolerance","status":"idle","statusTrack":[],"tags":[],"head":true,"next":"init-increment","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"flowchartId":"init-increment","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"init-result","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"flowchartId":"init-result","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"init-parameter","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"flowchartId":"init-parameter","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"vasp-kpoint-convergence","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"type":"execution","name":"vasp_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"vasp-kpoint-convergence","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp_kpt_conv","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic Mesh\n0\nGamma\n{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}\n0 0 0\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"store-result"},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"flowchartId":"store-result","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"check-convergence","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"check convergence","type":"condition","input":[],"results":[],"preProcessors":[],"postProcessors":[],"then":"convergence-is-reached","else":"update-result","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"flowchartId":"check-convergence","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"update-result","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"flowchartId":"update-result","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"increment-parameter","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"flowchartId":"increment-parameter","next":"vasp-kpoint-convergence","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"flowchartId":"convergence-is-reached","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}}]}],"units":[{"name":"K-point Convergence","type":"subworkflow","_id":"5d736d84-d616-538f-a09b-81a32ac0777c","status":"idle","statusTrack":[],"flowchartId":"a34eec2c-cdb2-537d-88c0-ed1d7b205879","tags":[],"head":true}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"_id":"fcf105f9-5ae7-5c32-a6b3-e3579cbdf39a","workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/neb.json":{"name":"Nudged Elastic Band (NEB)","subworkflows":[{"isMultiMaterial":true,"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","name":"Initial/Final Total Energies","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp_neb_initial","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp_neb_initial","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"e65a17ce-10c8-5710-ad4d-fb3d42434091"},{"type":"execution","name":"vasp_neb_final","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp_neb_final","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]},{"isMultiMaterial":true,"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","name":"Prepare Directories","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"prepare-neb-images","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"monitors":["standard_output"],"name":"bash_vasp_prepare_neb_images","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < 00/POSCAR < 01/POSCAR <=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP_INTERFACE","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"isMultiMaterial":true,"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","name":"BS + Avg ESP (interface left)","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"name":"Set Material Index (Interface left)","type":"assignment","operand":"MATERIAL_INDEX","value":"1","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"0bd31760-f6e4-5826-b282-882c06c97f94","head":true,"next":"3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"pw-bands-calculate-band-gap-left","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap-left","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a667d9fd-35d5-5897-be0e-fa0247233649","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-left"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM_LEFT","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"next":"dfc4f1c5-5856-588a-99df-6d5fb46bb429","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"dfc4f1c5-5856-588a-99df-6d5fb46bb429","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"b1bb2b3e-3197-5bcd-85b0-959cc357c8d3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"b1bb2b3e-3197-5bcd-85b0-959cc357c8d3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"pp_electrostatic_potential","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"average-electrostatic-potential-left","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential-left","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"average_potential","results":[{"name":"average_potential_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-left"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","name":"Find ESP Value (Interface left)","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Find Extrema","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"python-find-extrema-left","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"generic:processing:find_extrema:scipy","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP_LEFT","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema-left"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"isMultiMaterial":true,"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","name":"BS + Avg ESP (interface right)","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"name":"Set Material Index (Interface right)","type":"assignment","operand":"MATERIAL_INDEX","value":"2","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"a05809d1-cc0d-5a0b-bf5e-d43b90a6ac4b","head":true,"next":"b89d6348-3915-5c24-9fbb-350bc98ac708","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"b89d6348-3915-5c24-9fbb-350bc98ac708","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"pw-bands-calculate-band-gap-right","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap-right","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a667d9fd-35d5-5897-be0e-fa0247233649","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-right"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM_RIGHT","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"next":"bc3f514c-4bed-521b-85a3-4e0edfdc3585","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"bc3f514c-4bed-521b-85a3-4e0edfdc3585","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"28bb682d-d287-5beb-8a67-826449c474ee","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"28bb682d-d287-5beb-8a67-826449c474ee","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"pp_electrostatic_potential","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"average-electrostatic-potential-right","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential-right","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"average_potential","results":[{"name":"average_potential_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-right"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"736295e8-2ee0-5974-83bc-362061ac0688","name":"Find ESP Value (Interface right)","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Find Extrema","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"python-find-extrema-right","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"generic:processing:find_extrema:scipy","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP_RIGHT","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema-right"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","name":"Calculate VBO","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["valence_band_offset"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Difference of valence band maxima","type":"assignment","operand":"VBM_DIFF","value":"VBM_LEFT - VBM_RIGHT","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","head":true,"next":"2626f7bb-d392-5fd4-ab71-329b508de347","schemaVersion":"2022.8.16","isDefault":false},{"name":"Difference of macroscopically averaged ESP in bulk","type":"assignment","operand":"AVG_ESP_DIFF","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","head":false,"next":"b7307787-53e2-599b-ad12-d627b04074b4","schemaVersion":"2022.8.16","isDefault":false},{"name":"Lineup of macroscopically averaged ESP in interface","type":"assignment","operand":"ESP_LINEUP","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","head":false,"next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","schemaVersion":"2022.8.16","isDefault":false},{"name":"Valence Band Offset","type":"assignment","operand":"VALENCE_BAND_OFFSET","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))","input":[],"results":[{"name":"valence_band_offset"}],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"9c65d03e-6a30-58f3-947a-f174342be0c3","type":"subworkflow","name":"BS + Avg ESP (Interface)","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"fd622b5c-5c02-594e-b582-b245c17ca9a4","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Find ESP Values (Interface)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7","flowchartId":"ad3b1e4c-5965-5605-a067-dd0c59907c4b","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"BS + Avg ESP (interface left)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","flowchartId":"8d5b4734-edfd-55cc-ad80-aaa72487398d","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Find ESP Value (Interface left)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","flowchartId":"102ec582-5b75-52f5-8b39-19ca725ed47a","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"BS + Avg ESP (interface right)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","flowchartId":"603c45db-93aa-54ce-a7fe-6e9b65b0037d","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Find ESP Value (Interface right)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"736295e8-2ee0-5974-83bc-362061ac0688","flowchartId":"e3444d35-cc41-59f5-8481-78d0c383b84e","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Calculate VBO","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","flowchartId":"0e0b141a-39ca-52bc-9094-e5f96dc72f39","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/variable_cell_relaxation.json":{"name":"Variable-cell Relaxation","_id":"c45dcef1-d16b-59d1-9318-cedd0b1acf08","subworkflows":[{"systemName":"espresso-variable-cell-relaxation","_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","name":"Variable-cell Relaxation","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_vc-relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_vc-relax","results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","type":"subworkflow","name":"Variable-cell Relaxation","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"8f6e9590-6a87-584b-abd7-1fb98253054c","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"tags":["variable-cell_relaxation"],"application":{"name":"espresso"}},"espresso/wavefunction_amplitude.json":{"name":"Wavefunction Amplitude","_id":"196d364a-5a30-549b-a898-8b9704b50ff1","subworkflows":[{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","name":"Wavefunction Amplitude","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"band_structure"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"pw-scf","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"extract-band-energies","schemaVersion":"2022.8.16","isDefault":false},{"name":"Extract Band Energies","type":"assignment","operand":"band_energies","value":"[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]","input":[{"name":"band_structure","scope":"pw-scf"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"extract-band-energies","head":false,"next":"indices-below-fermi","schemaVersion":"2022.8.16","isDefault":false},{"name":"Find Indices Below Fermi","type":"assignment","operand":"indices_below_fermi","value":"[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]","input":[{"name":"fermi_energy","scope":"pw-scf"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"indices-below-fermi","head":false,"next":"8771dc7f-878e-5f13-a840-a3a416854f1e","schemaVersion":"2022.8.16","isDefault":false},{"name":"Store Band Below EF","type":"assignment","operand":"KBAND_VALUE_BELOW_EF","value":"indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8771dc7f-878e-5f13-a840-a3a416854f1e","head":false,"next":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select Band","type":"assignment","operand":"KBAND_VALUE","value":"KBAND_VALUE_BELOW_EF","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","head":false,"next":"pp-wfn","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pp_wfn","head":false,"results":[{"name":"wavefunction_amplitude"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pp-wfn","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"pp_wfn","results":[{"name":"wavefunction_amplitude"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_wfn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","name":"Plot Wavefunction","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"plot WFN","head":true,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"57fca898-8e8b-5ef2-81a5-9d2b612bc18d","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"plot_wavefunction","results":[{"name":"file_content"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","type":"subworkflow","name":"Wavefunction Amplitude","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"36467db9-279f-52a3-a6ef-ffdc26d875ed","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Plot Wavefunction","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"e4ec581f-1cb3-5036-b698-999a96711559","flowchartId":"4ce49281-e731-550e-af66-6d2408db8237","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"tags":["wfn","wfn_plot"],"application":{"name":"espresso"}},"espresso/zero_point_energy.json":{"name":"Zero Point Energy","_id":"3158c78d-58bb-5675-8c7f-6f2337061015","subworkflows":[{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","name":"Zero Point Energy","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"107595d1-490f-53a2-8432-7f8a12f14d96","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_zpe","head":false,"results":[{"name":"zero_point_energy"}],"monitors":[{"name":"standard_output"}],"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_gamma","results":[{"name":"zero_point_energy"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","type":"subworkflow","name":"Zero Point Energy","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"d906bd20-eb92-5a01-a0e2-c81a2d9b2a41","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"nwchem/total_energy.json":{"name":"Total Energy","_id":"937fbac8-2dec-5fb1-a46f-b8a0cc3d3d05","subworkflows":[{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","name":"Total Energy","application":{"name":"nwchem","shortName":"nwchem","summary":"NWChem","build":"GNU","isDefault":true,"version":"7.0.2","schemaVersion":"2022.8.16"},"properties":["total_energy","total_energy_contributions"],"model":{"type":"dft","subtype":"gga","method":{"type":"localorbital","subtype":"pople","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"nwchem_total_energy","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"nwchem","shortName":"nwchem","summary":"NWChem","build":"GNU","isDefault":true,"version":"7.0.2","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"}],"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem","schemaVersion":"2022.8.16"},"flavor":{"name":"nwchem_total_energy","results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"preProcessors":[],"postProcessors":[],"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","type":"subworkflow","name":"Total Energy","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"6059d61a-6a92-5657-9130-02208639aff8","schemaVersion":"2022.8.16","isDefault":false}],"properties":["total_energy","total_energy_contributions"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"nwchem"}},"python/ml/classification_workflow.json":{"name":"Python ML Train Classification","_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"flowchartId":"head-set-predict-status","head":true,"next":"head-fetch-training-data","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Dataset","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"type":"object_storage","basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"head-branch-on-predict-status","schemaVersion":"2022.8.16","isDefault":false},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","then":"head-fetch-trained-model","head":false,"next":"head-fetch-trained-model","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["set-io-unit-filenames"],"enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"type":"object_storage","basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"end-of-ml-train-head","schemaVersion":"2022.8.16","isDefault":false},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"end-of-ml-train-head","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:setup_variables_packages","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:read_csv:pandas","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:train_test_split:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:pre_processing:standardization:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:model:random_forest_classification:sklearn","results":[{"name":"workflow:pyml_predict"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ROC Curve Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:post_processing:roc_curve:sklearn","results":[{"name":"file_content"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","type":"subworkflow","name":"Set Up the Job","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Machine Learning","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","schemaVersion":"2022.8.16","isDefault":false}],"properties":[],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"python/ml/clustering_workflow.json":{"name":"Python ML Train Clustering","_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"flowchartId":"head-set-predict-status","head":true,"next":"head-fetch-training-data","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Dataset","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"type":"object_storage","basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"head-branch-on-predict-status","schemaVersion":"2022.8.16","isDefault":false},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","then":"head-fetch-trained-model","head":false,"next":"head-fetch-trained-model","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["set-io-unit-filenames"],"enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"type":"object_storage","basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"end-of-ml-train-head","schemaVersion":"2022.8.16","isDefault":false},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"end-of-ml-train-head","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:setup_variables_packages","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:read_csv:pandas","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:train_test_split:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:pre_processing:standardization:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:model:random_forest_classification:sklearn","results":[{"name":"workflow:pyml_predict"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ROC Curve Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:post_processing:roc_curve:sklearn","results":[{"name":"file_content"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","type":"subworkflow","name":"Set Up the Job","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Machine Learning","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","schemaVersion":"2022.8.16","isDefault":false}],"properties":[],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"python/ml/regression_workflow.json":{"name":"Python ML Train Regression","_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"flowchartId":"head-set-predict-status","head":true,"next":"head-fetch-training-data","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Dataset","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"type":"object_storage","basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"head-branch-on-predict-status","schemaVersion":"2022.8.16","isDefault":false},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","then":"head-fetch-trained-model","head":false,"next":"head-fetch-trained-model","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["set-io-unit-filenames"],"enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"type":"object_storage","basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"end-of-ml-train-head","schemaVersion":"2022.8.16","isDefault":false},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"end-of-ml-train-head","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:setup_variables_packages","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:read_csv:pandas","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:train_test_split:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:pre_processing:standardization:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:model:multilayer_perceptron:sklearn","results":[{"name":"workflow:pyml_predict"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Parity Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:post_processing:parity_plot:matplotlib","results":[{"name":"file_content"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","type":"subworkflow","name":"Set Up the Job","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Machine Learning","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","schemaVersion":"2022.8.16","isDefault":false}],"properties":[],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"python/python_script.json":{"name":"Python Script","_id":"de816646-766b-5f97-b468-0937d4381440","subworkflows":[{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","name":"Python Script","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"python","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"hello_world","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","type":"subworkflow","name":"Python Script","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"c50e28b2-a0c5-5324-8b6f-e99b5a546bd8","schemaVersion":"2022.8.16","isDefault":false}],"properties":[],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"shell/batch_espresso_pwscf.json":{"name":"Shell Batch Job (Espresso PWSCF)","_id":"e0046fb4-37db-5732-bf81-c48e13081a4c","subworkflows":[{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","name":"Shell Batch Job (Espresso PWSCF)","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"name":"job_espresso_pw_scf","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","type":"subworkflow","name":"Shell Batch Job (Espresso PWSCF)","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"d884e8f7-7acf-5a03-bc9a-186903bdaa0e","schemaVersion":"2022.8.16","isDefault":false}],"properties":[],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"shell"}},"shell/hello_world.json":{"name":"Shell Script","_id":"d2fd444c-06b4-5d66-baeb-449c680ae1bf","subworkflows":[{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","name":"Shell Hello World","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"name":"hello_world","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","type":"subworkflow","name":"Shell Hello World","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"319307c2-bf22-5bf2-b4e9-a4cdf671b786","schemaVersion":"2022.8.16","isDefault":false}],"properties":[],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"shell"}},"vasp/band_gap.json":{"name":"Band Gap","_id":"1a358471-0a73-5fcb-ad3c-7a8079029c86","subworkflows":[{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","name":"Band Gap","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"f0d65517-9592-5bc8-948e-a0851a766cbb","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_nscf","head":false,"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_nscf","results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","type":"subworkflow","name":"Band Gap","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"db3b83ea-0ef5-594c-89a8-bde38dbc6105","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/band_structure_dos.json":{"name":"Band Structure + Density of States","_id":"c8338d40-3c6e-5581-b03c-d7fb5cbb8df5","subworkflows":[{"_id":"d38fea11-9781-5151-8dae-d705381498be","name":"Band Structure + Density of States","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"d38fea11-9781-5151-8dae-d705381498be","type":"subworkflow","name":"Band Structure + Density of States","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"8a098bb9-73b1-5e84-bfc7-b783e02d0f53","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/band_structure.json":{"name":"Band Structure","_id":"25b0ad08-87bb-5400-bea4-acd5fe2163c0","subworkflows":[{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","name":"Band Structure","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","type":"subworkflow","name":"Band Structure","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"c573187f-a8bb-5084-9fcf-1560bf4a7786","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/dos.json":{"name":"Density of States","_id":"629a79fb-a03f-5e34-b2ce-9c735e8ef6c0","subworkflows":[{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","name":"Density of States","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","type":"subworkflow","name":"Density of States","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"3e64fdb4-ab5b-52a0-a1d5-51343c49481c","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/fixed_cell_relaxation.json":{"name":"Fixed-cell Relaxation","_id":"cb69418c-2f6c-551d-af81-0cf20ec1113d","subworkflows":[{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","name":"Fixed-cell Relaxation","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_relax","head":true,"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_relax","results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","type":"subworkflow","name":"Fixed-cell Relaxation","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"0de8c4c8-b722-5cd2-ae68-b484262e0a01","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/kpoint_convergence.json":{"name":"K-point Convergence","_id":"fcf105f9-5ae7-5c32-a6b3-e3579cbdf39a","subworkflows":[{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","name":"K-point Convergence","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-tolerance","head":true,"next":"init-increment","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-increment","head":false,"next":"init-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-result","head":false,"next":"init-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-parameter","head":false,"next":"vasp-kpoint-convergence","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"vasp-kpoint-convergence","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_kpt_conv","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"store-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"store-result","head":false,"next":"check-convergence","schemaVersion":"2022.8.16","isDefault":false},{"name":"check convergence","type":"condition","input":[],"statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"check-convergence","then":"convergence-is-reached","else":"update-result","head":false,"next":"update-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"update-result","head":false,"next":"increment-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"increment-parameter","next":"vasp-kpoint-convergence","head":false,"schemaVersion":"2022.8.16","isDefault":false},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"convergence-is-reached","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","type":"subworkflow","name":"K-point Convergence","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"a34eec2c-cdb2-537d-88c0-ed1d7b205879","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/neb.json":{"name":"Nudged Elastic Band (NEB)","_id":"2973908e-21ae-5424-afc9-ccb3fde477d8","subworkflows":[{"isMultiMaterial":true,"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","name":"Initial/Final Total Energies","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_neb_initial","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_neb_initial","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"e65a17ce-10c8-5710-ad4d-fb3d42434091","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_neb_final","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_neb_final","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"compute":{"ppn":1,"nodes":1,"queue":"D","timeLimit":"01:00:00","notify":"n","cluster":{"fqdn":""},"timeLimitType":"per single attempt","isRestartable":true,"arguments":{"nimage":1,"npools":1,"nband":1,"ntg":1,"ndiag":1}},"schemaVersion":"2022.8.16","isDraft":false},{"isMultiMaterial":true,"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","name":"Prepare Directories","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"prepare-neb-images","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"name":"bash_vasp_prepare_neb_images","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < Date: Mon, 23 Feb 2026 17:02:49 +0200 Subject: [PATCH 03/14] chore: cleanups --- assets/workflows/workflows/categories.yml | 15 + .../workflows/espresso/phonon_map.yml | 19 +- .../average_electrostatic_potential.json | 11 +- .../workflows/espresso/band_gap.json | 11 +- .../workflows/espresso/band_gap_dos_hse.json | 11 +- .../workflows/espresso/band_structure.json | 11 +- .../espresso/band_structure_dos.json | 11 +- .../espresso/band_structure_hse.json | 11 +- .../espresso/band_structure_magn.json | 11 +- .../espresso/band_structure_soc.json | 11 +- .../workflows/espresso/dielectric_tensor.json | 11 +- data/workflows/workflows/espresso/dos.json | 11 +- .../espresso/electronic_density_mesh.json | 11 +- data/workflows/workflows/espresso/esm.json | 11 +- .../workflows/espresso/esm_relax.json | 11 +- .../espresso/fixed_cell_relaxation.json | 11 +- ...and_structure_band_gap_full_frequency.json | 11 +- ..._band_structure_band_gap_plasmon_pole.json | 11 +- .../espresso/kpoint_convergence.json | 11 +- data/workflows/workflows/espresso/neb.json | 11 +- .../espresso/phonon_dispersions.json | 11 +- .../workflows/espresso/phonon_dos.json | 11 +- .../espresso/phonon_dos_dispersion.json | 11 +- .../workflows/espresso/phonon_map.json | 26 +- .../workflows/espresso/recalculate_bands.json | 11 +- .../workflows/espresso/surface_energy.json | 11 +- .../workflows/espresso/total_energy.json | 11 +- .../espresso/valence_band_offset.json | 14 +- .../espresso/variable_cell_relaxation.json | 11 +- .../espresso/wavefunction_amplitude.json | 14 +- .../workflows/espresso/zero_point_energy.json | 11 +- .../workflows/nwchem/total_energy.json | 11 +- .../python/ml/classification_workflow.json | 17 +- .../python/ml/clustering_workflow.json | 17 +- .../python/ml/regression_workflow.json | 17 +- .../workflows/python/python_script.json | 11 +- .../workflows/shell/batch_espresso_pwscf.json | 11 +- .../workflows/shell/hello_world.json | 11 +- data/workflows/workflows/vasp/band_gap.json | 11 +- .../workflows/vasp/band_structure.json | 11 +- .../workflows/vasp/band_structure_dos.json | 11 +- data/workflows/workflows/vasp/dos.json | 11 +- .../workflows/vasp/fixed_cell_relaxation.json | 11 +- .../workflows/vasp/kpoint_convergence.json | 11 +- data/workflows/workflows/vasp/neb.json | 15 +- .../workflows/vasp/recalculate_bands.json | 11 +- .../workflows/vasp/surface_energy.json | 11 +- .../workflows/vasp/total_energy.json | 11 +- .../vasp/variable_cell_relaxation.json | 11 +- .../workflows/vasp/zero_point_energy.json | 11 +- dist/js/application.d.ts | 1218 ++++++++--------- .../average_electrostatic_potential.json | 2 +- ...e_electrostatic_potential_find_minima.json | 2 +- ...rostatic_potential_via_band_structure.json | 2 +- .../subworkflows/espresso/band_gap.json | 2 +- .../espresso/band_gap_hse_dos.json | 2 +- .../subworkflows/espresso/band_structure.json | 2 +- .../espresso/band_structure_dos.json | 2 +- .../espresso/band_structure_hse.json | 2 +- .../espresso/band_structure_magn.json | 361 +---- .../espresso/band_structure_soc.json | 2 +- .../espresso/dielectric_tensor.json | 2 +- .../subworkflows/espresso/dos.json | 2 +- .../espresso/electronic_density_mesh.json | 2 +- .../subworkflows/espresso/esm.json | 2 +- .../subworkflows/espresso/esm_relax.json | 2 +- .../espresso/espresso_extract_kpoints.json | 2 +- .../espresso/espresso_xml_get_qpt_irr.json | 2 +- .../espresso/fixed_cell_relaxation.json | 2 +- ...and_structure_band_gap_full_frequency.json | 2 +- ..._band_structure_band_gap_plasmon_pole.json | 2 +- .../espresso/kpoint_convergence.json | 2 +- .../subworkflows/espresso/neb.json | 2 +- .../espresso/ph_init_qpoints.json | 2 +- .../espresso/ph_single_irr_qpt.json | 2 +- .../espresso/phonon_dispersions.json | 2 +- .../subworkflows/espresso/phonon_dos.json | 2 +- .../espresso/phonon_dos_dispersion.json | 2 +- .../subworkflows/espresso/phonon_reduce.json | 2 +- .../espresso/plot_wavefunction.json | 2 +- .../subworkflows/espresso/post_processor.json | 2 +- .../subworkflows/espresso/pre_processor.json | 2 +- .../subworkflows/espresso/pw_scf.json | 2 +- .../espresso/recalculate_bands.json | 2 +- .../subworkflows/espresso/surface_energy.json | 2 +- .../subworkflows/espresso/total_energy.json | 2 +- ...and_offset_calc_from_previous_esp_vbm.json | 2 +- .../espresso/variable_cell_relaxation.json | 2 +- .../espresso/wavefunction_amplitude.json | 2 +- .../espresso/zero_point_energy.json | 2 +- .../subworkflows/nwchem/total_energy.json | 2 +- .../python/ml/classification_tail.json | 2 +- .../python/ml/clustering_tail.json | 2 +- .../python/ml/regression_tail.json | 2 +- .../subworkflows/python/ml/train_head.json | 2 +- .../subworkflows/python/python_script.json | 2 +- .../shell/batch_espresso_pwscf.json | 2 +- .../subworkflows/shell/hello_world.json | 2 +- .../subworkflows/vasp/band_gap.json | 2 +- .../subworkflows/vasp/band_structure.json | 2 +- .../subworkflows/vasp/band_structure_dos.json | 2 +- .../runtime_data/subworkflows/vasp/dos.json | 2 +- .../vasp/fixed_cell_relaxation.json | 2 +- .../vasp/initial_final_total_energies.json | 2 +- .../subworkflows/vasp/kpoint_convergence.json | 2 +- .../subworkflows/vasp/neb_subworkflow.json | 2 +- .../subworkflows/vasp/prepare_images.json | 2 +- .../subworkflows/vasp/recalculate_bands.json | 2 +- .../subworkflows/vasp/surface_energy.json | 2 +- .../subworkflows/vasp/total_energy.json | 2 +- .../vasp/variable_cell_relaxation.json | 2 +- .../subworkflows/vasp/zero_point_energy.json | 2 +- dist/js/runtime_data/workflows.json | 2 +- .../workflowSubworkflowMapByApplication.json | 2 +- scripts/processors/utils/createWorkflow.ts | 134 +- scripts/processors/utils/utils.ts | 10 +- src/py/mat3ra/standata/data/workflows.py | 2 +- 117 files changed, 1111 insertions(+), 1343 deletions(-) diff --git a/assets/workflows/workflows/categories.yml b/assets/workflows/workflows/categories.yml index 1e6bc695..292ecd27 100644 --- a/assets/workflows/workflows/categories.yml +++ b/assets/workflows/workflows/categories.yml @@ -8,6 +8,7 @@ categories: - density_of_states - dielectric_tensor - fermi_energy + - file_content - final_structure - phonon_dispersions - phonon_dos @@ -20,7 +21,9 @@ categories: - total_energy - total_energy_contributions - total_force + - valence_band_offset - wavefunction_amplitude + - workflow:pyml_predict - zero_point_energy tags: - default @@ -270,6 +273,8 @@ entities: - atomic_forces - espresso - fermi_energy + - phonon_dispersions + - phonon_dos - pressure - stress_tensor - total_energy @@ -313,6 +318,7 @@ entities: - total_energy - total_energy_contributions - total_force + - valence_band_offset - filename: espresso/variable_cell_relaxation.json categories: - atomic_forces @@ -330,6 +336,7 @@ entities: - band_structure - espresso - fermi_energy + - file_content - pressure - stress_tensor - total_energy @@ -356,13 +363,19 @@ entities: - total_energy_contributions - filename: python/ml/classification_workflow.json categories: + - file_content - python + - workflow:pyml_predict - filename: python/ml/clustering_workflow.json categories: + - file_content - python + - workflow:pyml_predict - filename: python/ml/regression_workflow.json categories: + - file_content - python + - workflow:pyml_predict - filename: python/python_script.json categories: - python @@ -442,6 +455,8 @@ entities: - atomic_forces - fermi_energy - pressure + - reaction_energy_barrier + - reaction_energy_profile - stress_tensor - total_energy - total_energy_contributions diff --git a/assets/workflows/workflows/espresso/phonon_map.yml b/assets/workflows/workflows/espresso/phonon_map.yml index b80d9885..e8d82aba 100644 --- a/assets/workflows/workflows/espresso/phonon_map.yml +++ b/assets/workflows/workflows/espresso/phonon_map.yml @@ -1,22 +1,19 @@ name: Phonon Map units: - - name: phononMap + - name: pw_scf + type: subworkflow + - name: ph_init_qpoints + type: subworkflow + - name: espresso_xml_get_qpt_irr + type: subworkflow + - name: phonon_map_workflow type: workflow - units: - - name: pw_scf - type: subworkflow - - name: ph_init_qpoints - type: subworkflow - - name: espresso_xml_get_qpt_irr - type: subworkflow - - config: + config: functions: setDefaultCompute: null input: name: Q_POINTS mapUnit: true - name: phonon_map_workflow - type: workflow units: - name: pre_processor type: subworkflow diff --git a/data/workflows/workflows/espresso/average_electrostatic_potential.json b/data/workflows/workflows/espresso/average_electrostatic_potential.json index dd9afc18..e8b98b66 100644 --- a/data/workflows/workflows/espresso/average_electrostatic_potential.json +++ b/data/workflows/workflows/espresso/average_electrostatic_potential.json @@ -1,6 +1,6 @@ { - "name": "Average Electrostatic Potential", "_id": "7e865869-82fb-5769-84f0-ac9f9df354db", + "name": "Average Electrostatic Potential", "subworkflows": [ { "_id": "7f2f8a38-c3bd-5aa9-b3b0-2c367287dd60", @@ -352,13 +352,16 @@ ], "units": [ { - "_id": "7f2f8a38-c3bd-5aa9-b3b0-2c367287dd60", "type": "subworkflow", "name": "Average Electrostatic Potential", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "7f2f8a38-c3bd-5aa9-b3b0-2c367287dd60", "flowchartId": "88861e21-1e6d-557d-b080-eafe3511872f", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/espresso/band_gap.json b/data/workflows/workflows/espresso/band_gap.json index 19c7f835..a73f662f 100644 --- a/data/workflows/workflows/espresso/band_gap.json +++ b/data/workflows/workflows/espresso/band_gap.json @@ -1,6 +1,6 @@ { - "name": "Band Gap", "_id": "b18a356e-9a14-5502-80fc-30a456b1c398", + "name": "Band Gap", "subworkflows": [ { "_id": "233bb8cf-3b4a-5378-84d9-a6a95a2ab43d", @@ -302,13 +302,16 @@ ], "units": [ { - "_id": "233bb8cf-3b4a-5378-84d9-a6a95a2ab43d", "type": "subworkflow", "name": "Band Gap", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "233bb8cf-3b4a-5378-84d9-a6a95a2ab43d", "flowchartId": "db3b83ea-0ef5-594c-89a8-bde38dbc6105", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/espresso/band_gap_dos_hse.json b/data/workflows/workflows/espresso/band_gap_dos_hse.json index 62a6c6b0..210f8110 100644 --- a/data/workflows/workflows/espresso/band_gap_dos_hse.json +++ b/data/workflows/workflows/espresso/band_gap_dos_hse.json @@ -1,6 +1,6 @@ { - "name": "Band Gap + DoS - HSE", "_id": "ab28e7cf-a363-5223-ae0b-a60c82bb4f9a", + "name": "Band Gap + DoS - HSE", "subworkflows": [ { "_id": "f1341a29-777d-5ca3-8933-78a5e0d3f6f2", @@ -282,13 +282,16 @@ ], "units": [ { - "_id": "f1341a29-777d-5ca3-8933-78a5e0d3f6f2", "type": "subworkflow", "name": "HSE Band Gap", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "f1341a29-777d-5ca3-8933-78a5e0d3f6f2", "flowchartId": "f7a0860d-6f9e-59e3-b600-07bbf986998a", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/espresso/band_structure.json b/data/workflows/workflows/espresso/band_structure.json index 497ab2bd..231e3d8b 100644 --- a/data/workflows/workflows/espresso/band_structure.json +++ b/data/workflows/workflows/espresso/band_structure.json @@ -1,6 +1,6 @@ { - "name": "Band Structure", "_id": "cc901d3d-bf3f-522c-9dec-849ffc06f62a", + "name": "Band Structure", "subworkflows": [ { "_id": "26d32e68-c2b5-50e9-8933-15f684fcc039", @@ -373,13 +373,16 @@ ], "units": [ { - "_id": "26d32e68-c2b5-50e9-8933-15f684fcc039", "type": "subworkflow", "name": "Band Structure", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "26d32e68-c2b5-50e9-8933-15f684fcc039", "flowchartId": "c573187f-a8bb-5084-9fcf-1560bf4a7786", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/espresso/band_structure_dos.json b/data/workflows/workflows/espresso/band_structure_dos.json index 4530c2cb..4c085144 100644 --- a/data/workflows/workflows/espresso/band_structure_dos.json +++ b/data/workflows/workflows/espresso/band_structure_dos.json @@ -1,6 +1,6 @@ { - "name": "Band Structure + Density of States", "_id": "fbf81b2c-0a99-5062-98e5-9f41b8fba8d5", + "name": "Band Structure + Density of States", "subworkflows": [ { "_id": "fa594399-6b98-5d79-986c-0713601dc06c", @@ -572,13 +572,16 @@ ], "units": [ { - "_id": "fa594399-6b98-5d79-986c-0713601dc06c", "type": "subworkflow", "name": "Band Structure + Density of States", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "fa594399-6b98-5d79-986c-0713601dc06c", "flowchartId": "8a098bb9-73b1-5e84-bfc7-b783e02d0f53", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/espresso/band_structure_hse.json b/data/workflows/workflows/espresso/band_structure_hse.json index 5f57f8dc..4b982fd4 100644 --- a/data/workflows/workflows/espresso/band_structure_hse.json +++ b/data/workflows/workflows/espresso/band_structure_hse.json @@ -1,6 +1,6 @@ { - "name": "Band Structure - HSE", "_id": "23b9058b-884c-52d4-82a8-ee162b9761e0", + "name": "Band Structure - HSE", "subworkflows": [ { "_id": "79f2cb6a-7994-5369-8c85-af07c55ad26f", @@ -571,13 +571,16 @@ ], "units": [ { - "_id": "79f2cb6a-7994-5369-8c85-af07c55ad26f", "type": "subworkflow", "name": "Preliminary SCF Calculation", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "79f2cb6a-7994-5369-8c85-af07c55ad26f", "flowchartId": "b6a2b27a-0fec-5e0e-8974-073ee9d2ad83", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/espresso/band_structure_magn.json b/data/workflows/workflows/espresso/band_structure_magn.json index 5e2be2b7..a422b0e6 100644 --- a/data/workflows/workflows/espresso/band_structure_magn.json +++ b/data/workflows/workflows/espresso/band_structure_magn.json @@ -1,6 +1,6 @@ { - "name": "Bandstructure with spin magnetism - QE", "_id": "f2767e1a-fce7-578f-b627-8806d3cd59de", + "name": "Bandstructure with spin magnetism - QE", "subworkflows": [ { "_id": "354942f1-9f3d-57a9-b5ae-6bdf5b3a60af", @@ -456,13 +456,16 @@ ], "units": [ { - "_id": "354942f1-9f3d-57a9-b5ae-6bdf5b3a60af", "type": "subworkflow", "name": "Bandstructure with spin magnetism", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "354942f1-9f3d-57a9-b5ae-6bdf5b3a60af", "flowchartId": "41e70bc1-ba00-5871-9289-4d57c7b79452", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/espresso/band_structure_soc.json b/data/workflows/workflows/espresso/band_structure_soc.json index bcad34c8..e2600713 100644 --- a/data/workflows/workflows/espresso/band_structure_soc.json +++ b/data/workflows/workflows/espresso/band_structure_soc.json @@ -1,6 +1,6 @@ { - "name": "Bandstructure with SOC - QE", "_id": "b4587b15-eb6f-5316-8497-a79f321b3c76", + "name": "Bandstructure with SOC - QE", "subworkflows": [ { "_id": "153b4a88-5d56-553f-b7d3-40df96968eb4", @@ -381,13 +381,16 @@ ], "units": [ { - "_id": "153b4a88-5d56-553f-b7d3-40df96968eb4", "type": "subworkflow", "name": "Bandstructure with SOC", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "153b4a88-5d56-553f-b7d3-40df96968eb4", "flowchartId": "872d54a6-679c-5af5-a153-72709fcf46df", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/espresso/dielectric_tensor.json b/data/workflows/workflows/espresso/dielectric_tensor.json index ca34009d..01a9ba91 100644 --- a/data/workflows/workflows/espresso/dielectric_tensor.json +++ b/data/workflows/workflows/espresso/dielectric_tensor.json @@ -1,6 +1,6 @@ { - "name": "Dielectric Function", "_id": "554a5473-511e-5c7f-88dc-3f99f544a576", + "name": "Dielectric Function", "subworkflows": [ { "_id": "38340b52-83ad-5862-bc18-c140bdc0cb72", @@ -407,13 +407,16 @@ ], "units": [ { - "_id": "38340b52-83ad-5862-bc18-c140bdc0cb72", "type": "subworkflow", "name": "Compute Dielectric Function", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "38340b52-83ad-5862-bc18-c140bdc0cb72", "flowchartId": "8408f3c4-1c42-5ffe-bc29-bee11b5a6a05", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/espresso/dos.json b/data/workflows/workflows/espresso/dos.json index cac9d721..79719b95 100644 --- a/data/workflows/workflows/espresso/dos.json +++ b/data/workflows/workflows/espresso/dos.json @@ -1,6 +1,6 @@ { - "name": "Density of States", "_id": "e930440a-1624-5eb9-b83b-dbe1421b4f5e", + "name": "Density of States", "subworkflows": [ { "_id": "2cf317f3-3306-5a96-bc9b-e9103ebcd5be", @@ -388,13 +388,16 @@ ], "units": [ { - "_id": "2cf317f3-3306-5a96-bc9b-e9103ebcd5be", "type": "subworkflow", "name": "Density of States", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "2cf317f3-3306-5a96-bc9b-e9103ebcd5be", "flowchartId": "3e64fdb4-ab5b-52a0-a1d5-51343c49481c", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/espresso/electronic_density_mesh.json b/data/workflows/workflows/espresso/electronic_density_mesh.json index 16353e12..6d0f4a75 100644 --- a/data/workflows/workflows/espresso/electronic_density_mesh.json +++ b/data/workflows/workflows/espresso/electronic_density_mesh.json @@ -1,6 +1,6 @@ { - "name": "Electronic Density Mesh", "_id": "67b8445c-14ea-5efb-acbf-7dd7bd9df4b4", + "name": "Electronic Density Mesh", "subworkflows": [ { "_id": "e2749c5a-fcd9-589c-819b-8b88c5c90924", @@ -266,13 +266,16 @@ ], "units": [ { - "_id": "e2749c5a-fcd9-589c-819b-8b88c5c90924", "type": "subworkflow", "name": "Electronic Density Mesh", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "e2749c5a-fcd9-589c-819b-8b88c5c90924", "flowchartId": "79e421a1-18aa-5c27-b8a8-9a769c1a89a0", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/espresso/esm.json b/data/workflows/workflows/espresso/esm.json index d2b3eadc..51d5a04f 100644 --- a/data/workflows/workflows/espresso/esm.json +++ b/data/workflows/workflows/espresso/esm.json @@ -1,6 +1,6 @@ { - "name": "Effective Screening Medium (ESM)", "_id": "1f17c10d-9554-5f41-994e-fee3fc0d22a7", + "name": "Effective Screening Medium (ESM)", "subworkflows": [ { "_id": "0de669f6-a455-5dae-b331-19dc85f7090f", @@ -206,13 +206,16 @@ ], "units": [ { - "_id": "0de669f6-a455-5dae-b331-19dc85f7090f", "type": "subworkflow", "name": "Effective Screening Medium (ESM)", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "0de669f6-a455-5dae-b331-19dc85f7090f", "flowchartId": "e7893fdf-0515-58a0-a9e1-0393bdc57d33", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/espresso/esm_relax.json b/data/workflows/workflows/espresso/esm_relax.json index e535eb9e..0e8e97dc 100644 --- a/data/workflows/workflows/espresso/esm_relax.json +++ b/data/workflows/workflows/espresso/esm_relax.json @@ -1,6 +1,6 @@ { - "name": "Effective Screening Medium (ESM) Relax", "_id": "059da61f-b061-5626-92c4-c103c28b737e", + "name": "Effective Screening Medium (ESM) Relax", "subworkflows": [ { "_id": "69728792-afeb-50aa-9b4e-6974a90f676a", @@ -206,13 +206,16 @@ ], "units": [ { - "_id": "69728792-afeb-50aa-9b4e-6974a90f676a", "type": "subworkflow", "name": "Effective Screening Medium (ESM) Relax", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "69728792-afeb-50aa-9b4e-6974a90f676a", "flowchartId": "f0733dc9-f3ad-5a1c-82fc-515edc0276b6", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/espresso/fixed_cell_relaxation.json b/data/workflows/workflows/espresso/fixed_cell_relaxation.json index 2e2b1823..f1609594 100644 --- a/data/workflows/workflows/espresso/fixed_cell_relaxation.json +++ b/data/workflows/workflows/espresso/fixed_cell_relaxation.json @@ -1,6 +1,6 @@ { - "name": "Fixed-cell Relaxation", "_id": "10343bab-9cf8-51ed-a0bc-6991cc5ffa8f", + "name": "Fixed-cell Relaxation", "subworkflows": [ { "_id": "fb75e249-5489-5146-bd8a-786d33330d9c", @@ -195,13 +195,16 @@ ], "units": [ { - "_id": "fb75e249-5489-5146-bd8a-786d33330d9c", "type": "subworkflow", "name": "Fixed-cell Relaxation", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "fb75e249-5489-5146-bd8a-786d33330d9c", "flowchartId": "0de8c4c8-b722-5cd2-ae68-b484262e0a01", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/espresso/gw_band_structure_band_gap_full_frequency.json b/data/workflows/workflows/espresso/gw_band_structure_band_gap_full_frequency.json index 1ca85ab0..e39cfc66 100644 --- a/data/workflows/workflows/espresso/gw_band_structure_band_gap_full_frequency.json +++ b/data/workflows/workflows/espresso/gw_band_structure_band_gap_full_frequency.json @@ -1,6 +1,6 @@ { - "name": "Full Frequency GW Band Structure + Band Gap", "_id": "500f379f-bc9d-5f6f-8780-e28570f1ed3f", + "name": "Full Frequency GW Band Structure + Band Gap", "subworkflows": [ { "_id": "46bcdcc8-628e-518e-b8c3-9bf38d7a2aef", @@ -300,13 +300,16 @@ ], "units": [ { - "_id": "46bcdcc8-628e-518e-b8c3-9bf38d7a2aef", "type": "subworkflow", "name": "Full Frequency GW Band Structure + Band Gap", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "46bcdcc8-628e-518e-b8c3-9bf38d7a2aef", "flowchartId": "b1748925-1c8e-5c73-a8ff-ec4da33a49ce", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/espresso/gw_band_structure_band_gap_plasmon_pole.json b/data/workflows/workflows/espresso/gw_band_structure_band_gap_plasmon_pole.json index 223e17df..9ebd6fa4 100644 --- a/data/workflows/workflows/espresso/gw_band_structure_band_gap_plasmon_pole.json +++ b/data/workflows/workflows/espresso/gw_band_structure_band_gap_plasmon_pole.json @@ -1,6 +1,6 @@ { - "name": "Plasmon-Pole GW Band Structure + Band Gap", "_id": "dc9cba26-070a-57dd-aaa8-6de7bb714807", + "name": "Plasmon-Pole GW Band Structure + Band Gap", "subworkflows": [ { "_id": "72b79a87-8eef-5fe2-9d6c-6c9c256dd56c", @@ -300,13 +300,16 @@ ], "units": [ { - "_id": "72b79a87-8eef-5fe2-9d6c-6c9c256dd56c", "type": "subworkflow", "name": "Plasmon-Pole GW Band Structure + Band Gap", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "72b79a87-8eef-5fe2-9d6c-6c9c256dd56c", "flowchartId": "911d4cc1-cde5-5097-a7be-0e11f73113a7", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/espresso/kpoint_convergence.json b/data/workflows/workflows/espresso/kpoint_convergence.json index 0adc6903..c1b6010e 100644 --- a/data/workflows/workflows/espresso/kpoint_convergence.json +++ b/data/workflows/workflows/espresso/kpoint_convergence.json @@ -1,6 +1,6 @@ { - "name": "K-point Convergence", "_id": "e8141224-dcea-576b-a556-80f65ab2e230", + "name": "K-point Convergence", "subworkflows": [ { "_id": "ff6a8fbc-2202-5786-9a26-67c843417d0b", @@ -376,13 +376,16 @@ ], "units": [ { - "_id": "ff6a8fbc-2202-5786-9a26-67c843417d0b", "type": "subworkflow", "name": "K-point Convergence", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "ff6a8fbc-2202-5786-9a26-67c843417d0b", "flowchartId": "a34eec2c-cdb2-537d-88c0-ed1d7b205879", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/espresso/neb.json b/data/workflows/workflows/espresso/neb.json index 7366ec0a..d4432c37 100644 --- a/data/workflows/workflows/espresso/neb.json +++ b/data/workflows/workflows/espresso/neb.json @@ -1,6 +1,6 @@ { - "name": "Nudged Elastic Band (NEB)", "_id": "6dc0a5af-7ec5-50e4-b663-42fc5ddf0ef1", + "name": "Nudged Elastic Band (NEB)", "subworkflows": [ { "isMultiMaterial": true, @@ -141,13 +141,16 @@ ], "units": [ { - "_id": "c9034468-df28-5357-8912-02226f919042", "type": "subworkflow", "name": "Nudged Elastic Band (NEB)", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "c9034468-df28-5357-8912-02226f919042", "flowchartId": "134c70e2-aeaf-543d-aded-1585cd71b800", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/espresso/phonon_dispersions.json b/data/workflows/workflows/espresso/phonon_dispersions.json index 52c04104..1cfb6637 100644 --- a/data/workflows/workflows/espresso/phonon_dispersions.json +++ b/data/workflows/workflows/espresso/phonon_dispersions.json @@ -1,6 +1,6 @@ { - "name": "Phonon Dispersions", "_id": "8623c689-9ba3-5454-a3c8-0c6c49c402b4", + "name": "Phonon Dispersions", "subworkflows": [ { "_id": "bfb69b48-8fbf-5a0d-8949-448f20754766", @@ -446,13 +446,16 @@ ], "units": [ { - "_id": "bfb69b48-8fbf-5a0d-8949-448f20754766", "type": "subworkflow", "name": "Phonon Dispersions", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "bfb69b48-8fbf-5a0d-8949-448f20754766", "flowchartId": "2cd13237-d089-5d5e-8372-1db8bb8e383f", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/espresso/phonon_dos.json b/data/workflows/workflows/espresso/phonon_dos.json index 7b609948..2dd752a2 100644 --- a/data/workflows/workflows/espresso/phonon_dos.json +++ b/data/workflows/workflows/espresso/phonon_dos.json @@ -1,6 +1,6 @@ { - "name": "Phonon Density of States", "_id": "840eb771-6cc0-5141-9a37-9c2eef74aa20", + "name": "Phonon Density of States", "subworkflows": [ { "_id": "2232051b-9f2a-5a48-9b4d-6231eb6e8297", @@ -445,13 +445,16 @@ ], "units": [ { - "_id": "2232051b-9f2a-5a48-9b4d-6231eb6e8297", "type": "subworkflow", "name": "Phonon Density of States", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "2232051b-9f2a-5a48-9b4d-6231eb6e8297", "flowchartId": "1954e749-1d37-50e6-8ae7-7292f5ef59c0", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/espresso/phonon_dos_dispersion.json b/data/workflows/workflows/espresso/phonon_dos_dispersion.json index 0c3f60c9..ab828d43 100644 --- a/data/workflows/workflows/espresso/phonon_dos_dispersion.json +++ b/data/workflows/workflows/espresso/phonon_dos_dispersion.json @@ -1,6 +1,6 @@ { - "name": "Phonon Density of States + Dispersions", "_id": "cd3ab6a3-a56c-5626-b527-cfe002c30472", + "name": "Phonon Density of States + Dispersions", "subworkflows": [ { "_id": "291d25cd-378a-5be7-9d85-c8013a4b165b", @@ -535,13 +535,16 @@ ], "units": [ { - "_id": "291d25cd-378a-5be7-9d85-c8013a4b165b", "type": "subworkflow", "name": "Phonon Density of States + Dispersions", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "291d25cd-378a-5be7-9d85-c8013a4b165b", "flowchartId": "7897ed9a-6b48-5a79-a50e-28797f3912a5", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/espresso/phonon_map.json b/data/workflows/workflows/espresso/phonon_map.json index 860e6489..92538e32 100644 --- a/data/workflows/workflows/espresso/phonon_map.json +++ b/data/workflows/workflows/espresso/phonon_map.json @@ -1,6 +1,6 @@ { - "name": "Phonon Map", "_id": "bbf7f87c-d201-537e-8c0f-00dca0cbb7ec", + "name": "Phonon Map", "subworkflows": [ { "_id": "f52b8039-83d0-5485-a1f1-0bc37cb01ed3", @@ -691,13 +691,16 @@ ], "units": [ { - "_id": "f52b8039-83d0-5485-a1f1-0bc37cb01ed3", "type": "subworkflow", "name": "pw-scf", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "f52b8039-83d0-5485-a1f1-0bc37cb01ed3", "flowchartId": "d270b789-fb67-573c-a566-9f09fdacea23", "schemaVersion": "2022.8.16", "isDefault": false @@ -749,7 +752,7 @@ "status": "idle", "statusTrack": [], "tags": [], - "workflowId": "b58b7b6b-19b6-4fc2-b655-c3f380b70f5a", + "workflowId": "3c30219d-b8d7-4206-a4af-845815342935", "flowchartId": "24e3c1f0-8090-512e-9727-8770071d17c8", "schemaVersion": "2022.8.16", "isDefault": false @@ -777,7 +780,9 @@ "stress_tensor", "total_energy", "total_energy_contributions", - "total_force" + "total_force", + "phonon_dispersions", + "phonon_dos" ], "workflows": [ { @@ -1100,13 +1105,16 @@ ], "units": [ { - "_id": "03f3a8a3-1fd0-5007-925f-fba78be63a51", "type": "subworkflow", "name": "pre-processor", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "03f3a8a3-1fd0-5007-925f-fba78be63a51", "flowchartId": "e9a790f4-dec6-52c1-b951-014f0ff01cb4" }, { diff --git a/data/workflows/workflows/espresso/recalculate_bands.json b/data/workflows/workflows/espresso/recalculate_bands.json index 6f700f2e..81e5ac03 100644 --- a/data/workflows/workflows/espresso/recalculate_bands.json +++ b/data/workflows/workflows/espresso/recalculate_bands.json @@ -1,6 +1,6 @@ { - "name": "Recalculate Bands", "_id": "42b2b964-8ccc-5b36-9e33-41a954abc2ba", + "name": "Recalculate Bands", "subworkflows": [ { "_id": "64551dfb-e529-5d8d-9092-ff268f4da134", @@ -218,13 +218,16 @@ ], "units": [ { - "_id": "64551dfb-e529-5d8d-9092-ff268f4da134", "type": "subworkflow", "name": "Recalculate Bands", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "64551dfb-e529-5d8d-9092-ff268f4da134", "flowchartId": "e8b72a45-765e-565f-ab17-c91a21aec09d", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/espresso/surface_energy.json b/data/workflows/workflows/espresso/surface_energy.json index 77cf2bf2..cf0cfe7c 100644 --- a/data/workflows/workflows/espresso/surface_energy.json +++ b/data/workflows/workflows/espresso/surface_energy.json @@ -1,6 +1,6 @@ { - "name": "Surface Energy", "_id": "68512987-de73-5614-bab2-0f8b575cffa3", + "name": "Surface Energy", "subworkflows": [ { "_id": "3e05a2b5-4171-54a2-9d2d-9e46118a56bf", @@ -190,13 +190,16 @@ ], "units": [ { - "_id": "3e05a2b5-4171-54a2-9d2d-9e46118a56bf", "type": "subworkflow", "name": "Surface Energy", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "3e05a2b5-4171-54a2-9d2d-9e46118a56bf", "flowchartId": "d81dc9ce-bb50-5bc6-af1d-e5ede03bb0a6", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/espresso/total_energy.json b/data/workflows/workflows/espresso/total_energy.json index 6db17142..dd9a8151 100644 --- a/data/workflows/workflows/espresso/total_energy.json +++ b/data/workflows/workflows/espresso/total_energy.json @@ -1,6 +1,6 @@ { - "name": "Total Energy", "_id": "4e36ca25-fa46-5628-a227-27d22dea8553", + "name": "Total Energy", "subworkflows": [ { "_id": "a16677f9-bb5b-54b5-9f97-c2af8c073184", @@ -189,13 +189,16 @@ ], "units": [ { - "_id": "a16677f9-bb5b-54b5-9f97-c2af8c073184", "type": "subworkflow", "name": "Total Energy", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "a16677f9-bb5b-54b5-9f97-c2af8c073184", "flowchartId": "6059d61a-6a92-5657-9130-02208639aff8", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/espresso/valence_band_offset.json b/data/workflows/workflows/espresso/valence_band_offset.json index 835bab50..337a891b 100644 --- a/data/workflows/workflows/espresso/valence_band_offset.json +++ b/data/workflows/workflows/espresso/valence_band_offset.json @@ -1,6 +1,6 @@ { - "name": "Valence Band Offset (2D)", "_id": "d8e08cac-7747-50aa-b925-41f214d722c6", + "name": "Valence Band Offset (2D)", "subworkflows": [ { "isMultiMaterial": true, @@ -2396,13 +2396,16 @@ ], "units": [ { - "_id": "9c65d03e-6a30-58f3-947a-f174342be0c3", "type": "subworkflow", "name": "BS + Avg ESP (Interface)", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "9c65d03e-6a30-58f3-947a-f174342be0c3", "flowchartId": "fd622b5c-5c02-594e-b582-b245c17ca9a4", "schemaVersion": "2022.8.16", "isDefault": false @@ -2507,7 +2510,8 @@ "stress_tensor", "total_energy", "total_energy_contributions", - "total_force" + "total_force", + "valence_band_offset" ], "workflows": [], "schemaVersion": "2022.8.16", diff --git a/data/workflows/workflows/espresso/variable_cell_relaxation.json b/data/workflows/workflows/espresso/variable_cell_relaxation.json index 9480dc9a..805af817 100644 --- a/data/workflows/workflows/espresso/variable_cell_relaxation.json +++ b/data/workflows/workflows/espresso/variable_cell_relaxation.json @@ -1,6 +1,6 @@ { - "name": "Variable-cell Relaxation", "_id": "c45dcef1-d16b-59d1-9318-cedd0b1acf08", + "name": "Variable-cell Relaxation", "subworkflows": [ { "systemName": "espresso-variable-cell-relaxation", @@ -196,13 +196,16 @@ ], "units": [ { - "_id": "58709c44-47f6-5fbf-bf2e-358b9d98f75d", "type": "subworkflow", "name": "Variable-cell Relaxation", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "58709c44-47f6-5fbf-bf2e-358b9d98f75d", "flowchartId": "8f6e9590-6a87-584b-abd7-1fb98253054c", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/espresso/wavefunction_amplitude.json b/data/workflows/workflows/espresso/wavefunction_amplitude.json index 56d31737..61a32c3f 100644 --- a/data/workflows/workflows/espresso/wavefunction_amplitude.json +++ b/data/workflows/workflows/espresso/wavefunction_amplitude.json @@ -1,6 +1,6 @@ { - "name": "Wavefunction Amplitude", "_id": "196d364a-5a30-549b-a898-8b9704b50ff1", + "name": "Wavefunction Amplitude", "subworkflows": [ { "_id": "6a670ac8-6c12-5285-a6f8-9bf579fc88ee", @@ -494,13 +494,16 @@ ], "units": [ { - "_id": "6a670ac8-6c12-5285-a6f8-9bf579fc88ee", "type": "subworkflow", "name": "Wavefunction Amplitude", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "6a670ac8-6c12-5285-a6f8-9bf579fc88ee", "flowchartId": "36467db9-279f-52a3-a6ef-ffdc26d875ed", "schemaVersion": "2022.8.16", "isDefault": false @@ -530,7 +533,8 @@ "total_energy", "total_energy_contributions", "total_force", - "wavefunction_amplitude" + "wavefunction_amplitude", + "file_content" ], "workflows": [], "schemaVersion": "2022.8.16", diff --git a/data/workflows/workflows/espresso/zero_point_energy.json b/data/workflows/workflows/espresso/zero_point_energy.json index 7de8ca0e..8853afec 100644 --- a/data/workflows/workflows/espresso/zero_point_energy.json +++ b/data/workflows/workflows/espresso/zero_point_energy.json @@ -1,6 +1,6 @@ { - "name": "Zero Point Energy", "_id": "3158c78d-58bb-5675-8c7f-6f2337061015", + "name": "Zero Point Energy", "subworkflows": [ { "_id": "151538cc-9e71-5269-8b9e-cb5977151227", @@ -275,13 +275,16 @@ ], "units": [ { - "_id": "151538cc-9e71-5269-8b9e-cb5977151227", "type": "subworkflow", "name": "Zero Point Energy", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "151538cc-9e71-5269-8b9e-cb5977151227", "flowchartId": "d906bd20-eb92-5a01-a0e2-c81a2d9b2a41", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/nwchem/total_energy.json b/data/workflows/workflows/nwchem/total_energy.json index c9aa27cf..1dab2015 100644 --- a/data/workflows/workflows/nwchem/total_energy.json +++ b/data/workflows/workflows/nwchem/total_energy.json @@ -1,6 +1,6 @@ { - "name": "Total Energy", "_id": "937fbac8-2dec-5fb1-a46f-b8a0cc3d3d05", + "name": "Total Energy", "subworkflows": [ { "_id": "9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13", @@ -134,13 +134,16 @@ ], "units": [ { - "_id": "9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13", "type": "subworkflow", "name": "Total Energy", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13", "flowchartId": "6059d61a-6a92-5657-9130-02208639aff8", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/python/ml/classification_workflow.json b/data/workflows/workflows/python/ml/classification_workflow.json index 70084e60..e0cfb363 100644 --- a/data/workflows/workflows/python/ml/classification_workflow.json +++ b/data/workflows/workflows/python/ml/classification_workflow.json @@ -1,6 +1,6 @@ { - "name": "Python ML Train Classification", "_id": "f447c6df-3b7b-5b8e-a0cc-1a743847ceed", + "name": "Python ML Train Classification", "subworkflows": [ { "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", @@ -782,13 +782,16 @@ ], "units": [ { - "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", "type": "subworkflow", "name": "Set Up the Job", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", "flowchartId": "5b51df93-15dd-5440-90fd-a3ffa264b7d8", "schemaVersion": "2022.8.16", "isDefault": false @@ -809,8 +812,12 @@ "isDefault": false } ], - "properties": [], + "properties": [ + "file_content", + "workflow:pyml_predict" + ], "workflows": [], + "isUsingDataset": true, "schemaVersion": "2022.8.16", "isDefault": false, "application": { diff --git a/data/workflows/workflows/python/ml/clustering_workflow.json b/data/workflows/workflows/python/ml/clustering_workflow.json index 024a5f5b..baa680e6 100644 --- a/data/workflows/workflows/python/ml/clustering_workflow.json +++ b/data/workflows/workflows/python/ml/clustering_workflow.json @@ -1,6 +1,6 @@ { - "name": "Python ML Train Clustering", "_id": "f447c6df-3b7b-5b8e-a0cc-1a743847ceed", + "name": "Python ML Train Clustering", "subworkflows": [ { "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", @@ -782,13 +782,16 @@ ], "units": [ { - "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", "type": "subworkflow", "name": "Set Up the Job", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", "flowchartId": "5b51df93-15dd-5440-90fd-a3ffa264b7d8", "schemaVersion": "2022.8.16", "isDefault": false @@ -809,8 +812,12 @@ "isDefault": false } ], - "properties": [], + "properties": [ + "file_content", + "workflow:pyml_predict" + ], "workflows": [], + "isUsingDataset": true, "schemaVersion": "2022.8.16", "isDefault": false, "application": { diff --git a/data/workflows/workflows/python/ml/regression_workflow.json b/data/workflows/workflows/python/ml/regression_workflow.json index 81ddba61..30459247 100644 --- a/data/workflows/workflows/python/ml/regression_workflow.json +++ b/data/workflows/workflows/python/ml/regression_workflow.json @@ -1,6 +1,6 @@ { - "name": "Python ML Train Regression", "_id": "f447c6df-3b7b-5b8e-a0cc-1a743847ceed", + "name": "Python ML Train Regression", "subworkflows": [ { "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", @@ -782,13 +782,16 @@ ], "units": [ { - "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", "type": "subworkflow", "name": "Set Up the Job", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", "flowchartId": "5b51df93-15dd-5440-90fd-a3ffa264b7d8", "schemaVersion": "2022.8.16", "isDefault": false @@ -809,8 +812,12 @@ "isDefault": false } ], - "properties": [], + "properties": [ + "file_content", + "workflow:pyml_predict" + ], "workflows": [], + "isUsingDataset": true, "schemaVersion": "2022.8.16", "isDefault": false, "application": { diff --git a/data/workflows/workflows/python/python_script.json b/data/workflows/workflows/python/python_script.json index 5a564dc0..7d4a607a 100644 --- a/data/workflows/workflows/python/python_script.json +++ b/data/workflows/workflows/python/python_script.json @@ -1,6 +1,6 @@ { - "name": "Python Script", "_id": "de816646-766b-5f97-b468-0937d4381440", + "name": "Python Script", "subworkflows": [ { "_id": "64a079ba-7a12-57b7-ac06-310b2bf8d354", @@ -123,13 +123,16 @@ ], "units": [ { - "_id": "64a079ba-7a12-57b7-ac06-310b2bf8d354", "type": "subworkflow", "name": "Python Script", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "64a079ba-7a12-57b7-ac06-310b2bf8d354", "flowchartId": "c50e28b2-a0c5-5324-8b6f-e99b5a546bd8", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/shell/batch_espresso_pwscf.json b/data/workflows/workflows/shell/batch_espresso_pwscf.json index e6325829..0f68b1c0 100644 --- a/data/workflows/workflows/shell/batch_espresso_pwscf.json +++ b/data/workflows/workflows/shell/batch_espresso_pwscf.json @@ -1,6 +1,6 @@ { - "name": "Shell Batch Job (Espresso PWSCF)", "_id": "e0046fb4-37db-5732-bf81-c48e13081a4c", + "name": "Shell Batch Job (Espresso PWSCF)", "subworkflows": [ { "_id": "f0775c7b-214a-5245-b921-5b4eb53d15a9", @@ -107,13 +107,16 @@ ], "units": [ { - "_id": "f0775c7b-214a-5245-b921-5b4eb53d15a9", "type": "subworkflow", "name": "Shell Batch Job (Espresso PWSCF)", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "f0775c7b-214a-5245-b921-5b4eb53d15a9", "flowchartId": "d884e8f7-7acf-5a03-bc9a-186903bdaa0e", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/shell/hello_world.json b/data/workflows/workflows/shell/hello_world.json index a1e9a094..bfa53951 100644 --- a/data/workflows/workflows/shell/hello_world.json +++ b/data/workflows/workflows/shell/hello_world.json @@ -1,6 +1,6 @@ { - "name": "Shell Script", "_id": "d2fd444c-06b4-5d66-baeb-449c680ae1bf", + "name": "Shell Script", "subworkflows": [ { "_id": "ce33d4cf-e0d2-5020-854d-9ea1fe5c8512", @@ -107,13 +107,16 @@ ], "units": [ { - "_id": "ce33d4cf-e0d2-5020-854d-9ea1fe5c8512", "type": "subworkflow", "name": "Shell Hello World", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "ce33d4cf-e0d2-5020-854d-9ea1fe5c8512", "flowchartId": "319307c2-bf22-5bf2-b4e9-a4cdf671b786", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/vasp/band_gap.json b/data/workflows/workflows/vasp/band_gap.json index b61e6025..a5840412 100644 --- a/data/workflows/workflows/vasp/band_gap.json +++ b/data/workflows/workflows/vasp/band_gap.json @@ -1,6 +1,6 @@ { - "name": "Band Gap", "_id": "1a358471-0a73-5fcb-ad3c-7a8079029c86", + "name": "Band Gap", "subworkflows": [ { "_id": "e65f2461-5f5c-5a51-8c48-88ad37bff100", @@ -391,13 +391,16 @@ ], "units": [ { - "_id": "e65f2461-5f5c-5a51-8c48-88ad37bff100", "type": "subworkflow", "name": "Band Gap", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "e65f2461-5f5c-5a51-8c48-88ad37bff100", "flowchartId": "db3b83ea-0ef5-594c-89a8-bde38dbc6105", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/vasp/band_structure.json b/data/workflows/workflows/vasp/band_structure.json index 606dc500..7c68f66e 100644 --- a/data/workflows/workflows/vasp/band_structure.json +++ b/data/workflows/workflows/vasp/band_structure.json @@ -1,6 +1,6 @@ { - "name": "Band Structure", "_id": "25b0ad08-87bb-5400-bea4-acd5fe2163c0", + "name": "Band Structure", "subworkflows": [ { "_id": "cd6e3d59-5544-56ac-878b-fd8716a09768", @@ -385,13 +385,16 @@ ], "units": [ { - "_id": "cd6e3d59-5544-56ac-878b-fd8716a09768", "type": "subworkflow", "name": "Band Structure", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "cd6e3d59-5544-56ac-878b-fd8716a09768", "flowchartId": "c573187f-a8bb-5084-9fcf-1560bf4a7786", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/vasp/band_structure_dos.json b/data/workflows/workflows/vasp/band_structure_dos.json index cd95c20d..eb889131 100644 --- a/data/workflows/workflows/vasp/band_structure_dos.json +++ b/data/workflows/workflows/vasp/band_structure_dos.json @@ -1,6 +1,6 @@ { - "name": "Band Structure + Density of States", "_id": "c8338d40-3c6e-5581-b03c-d7fb5cbb8df5", + "name": "Band Structure + Density of States", "subworkflows": [ { "_id": "d38fea11-9781-5151-8dae-d705381498be", @@ -389,13 +389,16 @@ ], "units": [ { - "_id": "d38fea11-9781-5151-8dae-d705381498be", "type": "subworkflow", "name": "Band Structure + Density of States", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "d38fea11-9781-5151-8dae-d705381498be", "flowchartId": "8a098bb9-73b1-5e84-bfc7-b783e02d0f53", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/vasp/dos.json b/data/workflows/workflows/vasp/dos.json index a51421f1..70882012 100644 --- a/data/workflows/workflows/vasp/dos.json +++ b/data/workflows/workflows/vasp/dos.json @@ -1,6 +1,6 @@ { - "name": "Density of States", "_id": "629a79fb-a03f-5e34-b2ce-9c735e8ef6c0", + "name": "Density of States", "subworkflows": [ { "_id": "4897ca33-b023-5a8d-9a5d-9e74df0f00ad", @@ -233,13 +233,16 @@ ], "units": [ { - "_id": "4897ca33-b023-5a8d-9a5d-9e74df0f00ad", "type": "subworkflow", "name": "Density of States", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "4897ca33-b023-5a8d-9a5d-9e74df0f00ad", "flowchartId": "3e64fdb4-ab5b-52a0-a1d5-51343c49481c", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/vasp/fixed_cell_relaxation.json b/data/workflows/workflows/vasp/fixed_cell_relaxation.json index 68754dd1..3b2f9fb4 100644 --- a/data/workflows/workflows/vasp/fixed_cell_relaxation.json +++ b/data/workflows/workflows/vasp/fixed_cell_relaxation.json @@ -1,6 +1,6 @@ { - "name": "Fixed-cell Relaxation", "_id": "cb69418c-2f6c-551d-af81-0cf20ec1113d", + "name": "Fixed-cell Relaxation", "subworkflows": [ { "_id": "db6cc94b-2f26-5688-ba97-80b11567b549", @@ -246,13 +246,16 @@ ], "units": [ { - "_id": "db6cc94b-2f26-5688-ba97-80b11567b549", "type": "subworkflow", "name": "Fixed-cell Relaxation", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "db6cc94b-2f26-5688-ba97-80b11567b549", "flowchartId": "0de8c4c8-b722-5cd2-ae68-b484262e0a01", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/vasp/kpoint_convergence.json b/data/workflows/workflows/vasp/kpoint_convergence.json index 3726ba84..188b26ed 100644 --- a/data/workflows/workflows/vasp/kpoint_convergence.json +++ b/data/workflows/workflows/vasp/kpoint_convergence.json @@ -1,6 +1,6 @@ { - "name": "K-point Convergence", "_id": "fcf105f9-5ae7-5c32-a6b3-e3579cbdf39a", + "name": "K-point Convergence", "subworkflows": [ { "_id": "5d736d84-d616-538f-a09b-81a32ac0777c", @@ -429,13 +429,16 @@ ], "units": [ { - "_id": "5d736d84-d616-538f-a09b-81a32ac0777c", "type": "subworkflow", "name": "K-point Convergence", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "5d736d84-d616-538f-a09b-81a32ac0777c", "flowchartId": "a34eec2c-cdb2-537d-88c0-ed1d7b205879", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/vasp/neb.json b/data/workflows/workflows/vasp/neb.json index 93711f63..d879f213 100644 --- a/data/workflows/workflows/vasp/neb.json +++ b/data/workflows/workflows/vasp/neb.json @@ -1,6 +1,6 @@ { - "name": "Nudged Elastic Band (NEB)", "_id": "2973908e-21ae-5424-afc9-ccb3fde477d8", + "name": "Nudged Elastic Band (NEB)", "subworkflows": [ { "isMultiMaterial": true, @@ -730,13 +730,16 @@ ], "units": [ { - "_id": "792e8c42-86ce-5f01-812a-66378ec4f379", "type": "subworkflow", "name": "Initial/Final Total Energies", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "792e8c42-86ce-5f01-812a-66378ec4f379", "flowchartId": "427b4671-7c37-50f7-82c8-4d781b846fd8", "schemaVersion": "2022.8.16", "isDefault": false @@ -779,7 +782,9 @@ "stress_tensor", "total_energy", "total_energy_contributions", - "total_force" + "total_force", + "reaction_energy_barrier", + "reaction_energy_profile" ], "workflows": [], "schemaVersion": "2022.8.16", diff --git a/data/workflows/workflows/vasp/recalculate_bands.json b/data/workflows/workflows/vasp/recalculate_bands.json index 21cc7273..fd41e9c1 100644 --- a/data/workflows/workflows/vasp/recalculate_bands.json +++ b/data/workflows/workflows/vasp/recalculate_bands.json @@ -1,6 +1,6 @@ { - "name": "Recalculate Bands", "_id": "ba449bac-8bef-5315-a667-cd919930ab28", + "name": "Recalculate Bands", "subworkflows": [ { "_id": "12f70885-f81a-5ff4-ae18-7ef4aaa27fc2", @@ -190,13 +190,16 @@ ], "units": [ { - "_id": "12f70885-f81a-5ff4-ae18-7ef4aaa27fc2", "type": "subworkflow", "name": "Recalculate Bands", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "12f70885-f81a-5ff4-ae18-7ef4aaa27fc2", "flowchartId": "e8b72a45-765e-565f-ab17-c91a21aec09d", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/vasp/surface_energy.json b/data/workflows/workflows/vasp/surface_energy.json index 829a9b9f..92666115 100644 --- a/data/workflows/workflows/vasp/surface_energy.json +++ b/data/workflows/workflows/vasp/surface_energy.json @@ -1,6 +1,6 @@ { - "name": "Surface Energy", "_id": "24b4e6d1-0846-55dd-ae27-624bab5057b4", + "name": "Surface Energy", "subworkflows": [ { "_id": "257d53c6-c3b6-564c-95ce-dd0514d26c63", @@ -231,13 +231,16 @@ ], "units": [ { - "_id": "257d53c6-c3b6-564c-95ce-dd0514d26c63", "type": "subworkflow", "name": "Surface Energy", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "257d53c6-c3b6-564c-95ce-dd0514d26c63", "flowchartId": "d81dc9ce-bb50-5bc6-af1d-e5ede03bb0a6", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/vasp/total_energy.json b/data/workflows/workflows/vasp/total_energy.json index 3ff27449..6f16bc7e 100644 --- a/data/workflows/workflows/vasp/total_energy.json +++ b/data/workflows/workflows/vasp/total_energy.json @@ -1,6 +1,6 @@ { - "name": "Total Energy", "_id": "7a65612a-d06b-5c80-bb24-55e2b969a262", + "name": "Total Energy", "subworkflows": [ { "_id": "1cd988fa-03f2-5b8c-aa72-8d7e50554988", @@ -229,13 +229,16 @@ ], "units": [ { - "_id": "1cd988fa-03f2-5b8c-aa72-8d7e50554988", "type": "subworkflow", "name": "Total Energy", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "1cd988fa-03f2-5b8c-aa72-8d7e50554988", "flowchartId": "6059d61a-6a92-5657-9130-02208639aff8", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/vasp/variable_cell_relaxation.json b/data/workflows/workflows/vasp/variable_cell_relaxation.json index 24bb0460..991d7382 100644 --- a/data/workflows/workflows/vasp/variable_cell_relaxation.json +++ b/data/workflows/workflows/vasp/variable_cell_relaxation.json @@ -1,6 +1,6 @@ { - "name": "Variable-cell Relaxation", "_id": "6edf0e69-36dd-5206-a331-320becf75266", + "name": "Variable-cell Relaxation", "subworkflows": [ { "systemName": "vasp-variable-cell-relaxation", @@ -247,13 +247,16 @@ ], "units": [ { - "_id": "542f7e87-cf65-5579-952c-ddd9611ac558", "type": "subworkflow", "name": "Variable-cell Relaxation", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "542f7e87-cf65-5579-952c-ddd9611ac558", "flowchartId": "8f6e9590-6a87-584b-abd7-1fb98253054c", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/vasp/zero_point_energy.json b/data/workflows/workflows/vasp/zero_point_energy.json index 5bdf3701..01a9859f 100644 --- a/data/workflows/workflows/vasp/zero_point_energy.json +++ b/data/workflows/workflows/vasp/zero_point_energy.json @@ -1,6 +1,6 @@ { - "name": "Zero Point Energy", "_id": "f25b44b7-74ba-59ca-b86a-abcc53530e5f", + "name": "Zero Point Energy", "subworkflows": [ { "_id": "2667054e-3c04-50a9-bd95-55c530d727c9", @@ -238,13 +238,16 @@ ], "units": [ { - "_id": "2667054e-3c04-50a9-bd95-55c530d727c9", "type": "subworkflow", "name": "Zero Point Energy", + "results": [], + "monitors": [], "preProcessors": [], "postProcessors": [], - "monitors": [], - "results": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "_id": "2667054e-3c04-50a9-bd95-55c530d727c9", "flowchartId": "d906bd20-eb92-5a01-a0e2-c81a2d9b2a41", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/dist/js/application.d.ts b/dist/js/application.d.ts index a5916a5d..0f299a83 100644 --- a/dist/js/application.d.ts +++ b/dist/js/application.d.ts @@ -85,297 +85,301 @@ export declare class ApplicationStandata extends Standata { getAllAppTree(): { espresso: { "abcoeff_to_eps.x": { + monitors: { + name: string; + }[]; + results: never[]; flavors: { abcoeff_to_eps_simple: { - applicationName: string; - executableName: string; input: { name: string; }[]; + results: never[]; monitors: { name: string; }[]; - results: never[]; + applicationName: string; + executableName: string; }; }; + }; + "average.x": { monitors: { name: string; }[]; - results: never[]; - }; - "average.x": { + results: { + name: string; + }[]; flavors: { average: { - applicationName: string; - executableName: string; input: { name: string; }[]; + results: never[]; monitors: { name: string; }[]; - results: never[]; - }; - average_potential: { applicationName: string; executableName: string; + }; + average_potential: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; + applicationName: string; + executableName: string; }; }; + }; + "bands.x": { monitors: { name: string; }[]; results: { name: string; }[]; - }; - "bands.x": { flavors: { bands: { - applicationName: string; - executableName: string; input: { name: string; }[]; monitors: { name: string; }[]; - }; - bands_spin_dn: { applicationName: string; executableName: string; + }; + bands_spin_up: { input: { name: string; }[]; monitors: { name: string; }[]; - }; - bands_spin_up: { applicationName: string; executableName: string; + }; + bands_spin_dn: { input: { name: string; }[]; monitors: { name: string; }[]; + applicationName: string; + executableName: string; }; }; + }; + "cp.x": { monitors: { name: string; }[]; - results: { - name: string; - }[]; - }; - "cp.x": { + results: never[]; flavors: { cp: { - applicationName: string; - executableName: string; + isDefault: boolean; input: { name: string; }[]; - isDefault: boolean; + results: never[]; monitors: { name: string; }[]; - results: never[]; - }; - cp_wf: { applicationName: string; executableName: string; + }; + cp_wf: { input: { name: string; }[]; + results: never[]; monitors: { name: string; }[]; - results: never[]; + applicationName: string; + executableName: string; }; }; + }; + "dos.x": { monitors: { name: string; }[]; - results: never[]; - }; - "dos.x": { + results: { + name: string; + }[]; flavors: { dos: { - applicationName: string; - executableName: string; input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; + applicationName: string; + executableName: string; }; }; + }; + "dynmat.x": { monitors: { name: string; }[]; - results: { - name: string; - }[]; - }; - "dynmat.x": { + results: never[]; flavors: { dynmat: { - applicationName: string; - executableName: string; input: { name: string; }[]; + results: never[]; monitors: { name: string; }[]; - results: never[]; + applicationName: string; + executableName: string; }; }; + }; + "epsilon.x": { monitors: { name: string; }[]; - results: never[]; - }; - "epsilon.x": { + results: { + name: string; + }[]; flavors: { dielectric_tensor: { - applicationName: string; - executableName: string; input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; + applicationName: string; + executableName: string; }; }; + }; + "gw.x": { monitors: { name: string; }[]; results: { name: string; }[]; - }; - "gw.x": { flavors: { - gw_bands_full_frequency: { - applicationName: string; - executableName: string; + gw_bands_plasmon_pole: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - gw_bands_plasmon_pole: { applicationName: string; executableName: string; + }; + gw_bands_full_frequency: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; + applicationName: string; + executableName: string; }; }; + }; + "gww.x": { monitors: { name: string; }[]; - results: { - name: string; - }[]; - }; - "gww.x": { + results: never[]; flavors: { gww_simple: { - applicationName: string; - executableName: string; input: { name: string; }[]; + results: never[]; monitors: { name: string; }[]; - results: never[]; + applicationName: string; + executableName: string; }; }; + }; + "head.x": { monitors: { name: string; }[]; results: never[]; - }; - "head.x": { flavors: { head_simple: { - applicationName: string; - executableName: string; input: { name: string; }[]; + results: never[]; monitors: { name: string; }[]; - results: never[]; + applicationName: string; + executableName: string; }; }; + }; + "hp.x": { monitors: { name: string; }[]; - results: never[]; - }; - "hp.x": { + results: { + name: string; + }[]; flavors: { hp: { - applicationName: string; - executableName: string; input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; + applicationName: string; + executableName: string; }; }; + supportedApplicationVersions: string[]; + }; + "matdyn.x": { monitors: { name: string; }[]; results: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - "matdyn.x": { flavors: { matdyn_grid: { - applicationName: string; - executableName: string; input: { name: string; }[]; @@ -385,10 +389,10 @@ export declare class ApplicationStandata extends Standata { results: { name: string; }[]; - }; - matdyn_path: { applicationName: string; executableName: string; + }; + matdyn_path: { input: { name: string; }[]; @@ -398,683 +402,688 @@ export declare class ApplicationStandata extends Standata { results: { name: string; }[]; + applicationName: string; + executableName: string; }; }; + }; + "neb.x": { monitors: { name: string; }[]; results: { name: string; }[]; - }; - "neb.x": { flavors: { neb: { - applicationName: string; - executableName: string; + isMultiMaterial: boolean; input: { name: string; }[]; - isMultiMaterial: boolean; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; + applicationName: string; + executableName: string; }; }; + }; + "ph.x": { monitors: { name: string; }[]; results: { name: string; }[]; - }; - "ph.x": { flavors: { - ph_gamma: { - applicationName: string; - executableName: string; + ph_path: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - ph_grid: { applicationName: string; executableName: string; + }; + ph_grid: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - ph_grid_restart: { applicationName: string; executableName: string; + }; + ph_gamma: { input: { name: string; }[]; + results: { + name: string; + }[]; monitors: { name: string; }[]; - results: never[]; - }; - ph_init_qpoints: { applicationName: string; executableName: string; + }; + ph_init_qpoints: { input: { name: string; }[]; + results: never[]; monitors: { name: string; }[]; - results: never[]; - }; - ph_path: { applicationName: string; executableName: string; + }; + ph_grid_restart: { input: { name: string; }[]; + results: never[]; monitors: { name: string; }[]; - results: { - name: string; - }[]; - }; - ph_single_irr_qpt: { applicationName: string; executableName: string; + }; + ph_single_irr_qpt: { input: { name: string; }[]; + results: never[]; monitors: { name: string; }[]; - results: never[]; + applicationName: string; + executableName: string; }; }; + }; + "pp.x": { monitors: { name: string; }[]; - results: { - name: string; - }[]; - }; - "pp.x": { + results: never[]; flavors: { pp_density: { - applicationName: string; - executableName: string; input: { name: string; }[]; + results: never[]; monitors: { name: string; }[]; - results: never[]; - }; - pp_electrostatic_potential: { applicationName: string; executableName: string; + }; + pp_electrostatic_potential: { input: { name: string; }[]; + results: never[]; monitors: { name: string; }[]; - results: never[]; - }; - pp_wfn: { applicationName: string; executableName: string; + }; + pp_wfn: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; + applicationName: string; + executableName: string; }; }; + }; + "projwfc.x": { monitors: { name: string; }[]; - results: never[]; - }; - "projwfc.x": { + results: { + name: string; + }[]; flavors: { projwfc: { - applicationName: string; - executableName: string; input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; + applicationName: string; + executableName: string; }; }; + }; + "pw.x": { + isDefault: boolean; + hasAdvancedComputeOptions: boolean; + postProcessors: { + name: string; + }[]; monitors: { name: string; }[]; results: { name: string; }[]; - }; - "pw.x": { flavors: { - pw_bands: { - applicationName: string; - executableName: string; + pw_scf: { + isDefault: boolean; input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - "pw_bands_dft_u+j_magn": { applicationName: string; executableName: string; + }; + pw_scf_bands_hse: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - "pw_bands_dft_u+v_magn": { applicationName: string; executableName: string; + }; + pw_scf_hse: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - pw_bands_dft_u_magn: { applicationName: string; executableName: string; + }; + pw_scf_kpt_conv: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - pw_bands_dft_u_magn_legacy: { applicationName: string; executableName: string; + }; + pw_scf_dft_u: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - pw_bands_dft_u_soc: { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + "pw_scf_dft_u+v": { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - pw_bands_dft_u_soc_legacy: { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + "pw_scf_dft_u+j": { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - pw_bands_magn: { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + pw_scf_dft_u_legacy: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - pw_bands_soc: { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + pw_scf_magn: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - pw_esm: { applicationName: string; executableName: string; + }; + pw_scf_soc: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - pw_esm_relax: { applicationName: string; executableName: string; + }; + pw_scf_dft_u_magn: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - pw_md: { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + pw_scf_dft_u_soc: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - pw_nscf: { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + "pw_scf_dft_u+v_magn": { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - "pw_nscf_dft_u+j_magn": { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + "pw_scf_dft_u+j_magn": { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - "pw_nscf_dft_u+v_magn": { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + pw_scf_dft_u_magn_legacy: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - pw_nscf_dft_u_magn: { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + pw_scf_dft_u_soc_legacy: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - pw_nscf_dft_u_magn_legacy: { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + pw_esm: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - pw_nscf_dft_u_soc: { applicationName: string; executableName: string; + }; + pw_esm_relax: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - pw_nscf_dft_u_soc_legacy: { applicationName: string; executableName: string; + }; + pw_nscf: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - pw_nscf_magn: { applicationName: string; executableName: string; + }; + pw_nscf_magn: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - pw_nscf_soc: { applicationName: string; executableName: string; + }; + pw_nscf_soc: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - pw_relax: { applicationName: string; executableName: string; + }; + pw_nscf_dft_u_magn: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - pw_scf: { applicationName: string; executableName: string; - input: { - name: string; - }[]; - isDefault: boolean; - monitors: { + supportedApplicationVersions: string[]; + }; + "pw_nscf_dft_u+v_magn": { + input: { name: string; }[]; results: { name: string; }[]; - }; - pw_scf_bands_hse: { + monitors: { + name: string; + }[]; applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + "pw_nscf_dft_u+j_magn": { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - pw_scf_dft_u: { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + pw_nscf_dft_u_magn_legacy: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - "pw_scf_dft_u+j": { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + pw_nscf_dft_u_soc: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - "pw_scf_dft_u+j_magn": { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + pw_nscf_dft_u_soc_legacy: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - "pw_scf_dft_u+v": { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + pw_bands: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - "pw_scf_dft_u+v_magn": { applicationName: string; executableName: string; + }; + pw_bands_magn: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - pw_scf_dft_u_legacy: { applicationName: string; executableName: string; + }; + pw_bands_soc: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - pw_scf_dft_u_magn: { applicationName: string; executableName: string; + }; + pw_bands_dft_u_magn: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - pw_scf_dft_u_magn_legacy: { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + "pw_bands_dft_u+v_magn": { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - pw_scf_dft_u_soc: { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + "pw_bands_dft_u+j_magn": { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - pw_scf_dft_u_soc_legacy: { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + pw_bands_dft_u_magn_legacy: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - pw_scf_hse: { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + pw_bands_dft_u_soc: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - pw_scf_kpt_conv: { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + pw_bands_dft_u_soc_legacy: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - pw_scf_magn: { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + pw_relax: { input: { name: string; }[]; @@ -1084,10 +1093,10 @@ export declare class ApplicationStandata extends Standata { results: { name: string; }[]; - }; - pw_scf_soc: { applicationName: string; executableName: string; + }; + "pw_vc-relax": { input: { name: string; }[]; @@ -1097,227 +1106,228 @@ export declare class ApplicationStandata extends Standata { results: { name: string; }[]; - }; - "pw_vc-relax": { applicationName: string; executableName: string; + }; + pw_md: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; + applicationName: string; + executableName: string; }; }; - hasAdvancedComputeOptions: boolean; - isDefault: boolean; + }; + "pw4gww.x": { monitors: { name: string; }[]; - postProcessors: { - name: string; - }[]; - results: { - name: string; - }[]; - }; - "pw4gww.x": { + results: never[]; flavors: { pw4gww_simple: { - applicationName: string; - executableName: string; input: { name: string; }[]; + results: never[]; monitors: { name: string; }[]; - results: never[]; + applicationName: string; + executableName: string; }; }; + }; + "q2r.x": { monitors: { name: string; }[]; results: never[]; - }; - "q2r.x": { flavors: { q2r: { - applicationName: string; - executableName: string; input: { name: string; }[]; + results: never[]; monitors: { name: string; }[]; - results: never[]; + applicationName: string; + executableName: string; }; }; + }; + "simple.x": { monitors: { name: string; }[]; results: never[]; - }; - "simple.x": { flavors: { simple: { - applicationName: string; - executableName: string; input: { name: string; }[]; + results: never[]; monitors: { name: string; }[]; - results: never[]; + applicationName: string; + executableName: string; }; }; + }; + "simple_bse.x": { monitors: { name: string; }[]; results: never[]; - }; - "simple_bse.x": { flavors: { simple_bse: { - applicationName: string; - executableName: string; input: { name: string; }[]; + results: never[]; monitors: { name: string; }[]; - results: never[]; + applicationName: string; + executableName: string; }; }; + }; + "simple_ip.x": { monitors: { name: string; }[]; results: never[]; - }; - "simple_ip.x": { flavors: { simple_ip: { - applicationName: string; - executableName: string; input: { name: string; }[]; + results: never[]; monitors: { name: string; }[]; - results: never[]; + applicationName: string; + executableName: string; }; }; - monitors: { - name: string; - }[]; - results: never[]; }; }; nwchem: { nwchem: { + isDefault: boolean; + hasAdvancedComputeOptions: boolean; + postProcessors: { + name: string; + }[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; flavors: { nwchem_total_energy: { - applicationName: string; - executableName: string; + isDefault: boolean; input: { name: string; }[]; - isDefault: boolean; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; + applicationName: string; + executableName: string; }; }; - hasAdvancedComputeOptions: boolean; + }; + }; + python: { + python: { isDefault: boolean; monitors: { name: string; }[]; - postProcessors: { - name: string; - }[]; results: { name: string; }[]; - }; - }; - python: { - python: { flavors: { - espresso_extract_kpoints: { - applicationName: string; - executableName: string; + hello_world: { + isDefault: boolean; input: ({ name: string; - templateName?: undefined; + templateName: string; } | { name: string; - templateName: string; + templateName?: undefined; })[]; monitors: { name: string; }[]; - }; - espresso_xml_get_qpt_irr: { applicationName: string; executableName: string; + }; + espresso_xml_get_qpt_irr: { input: { name: string; }[]; monitors: { name: string; }[]; - }; - "generic:post_processing:plot:matplotlib": { applicationName: string; executableName: string; - input: { + }; + espresso_extract_kpoints: { + input: ({ + name: string; + templateName?: undefined; + } | { name: string; templateName: string; - }[]; + })[]; monitors: { name: string; }[]; - }; - "generic:processing:find_extrema:scipy": { applicationName: string; executableName: string; + }; + plot_wavefunction: { input: { name: string; templateName: string; }[]; + results: { + name: string; + filetype: string; + basename: string; + }[]; monitors: { name: string; }[]; - }; - hello_world: { applicationName: string; executableName: string; - input: ({ + }; + "generic:post_processing:plot:matplotlib": { + input: { name: string; templateName: string; - } | { - name: string; - templateName?: undefined; - })[]; - isDefault: boolean; + }[]; monitors: { name: string; }[]; - }; - plot_wavefunction: { applicationName: string; executableName: string; + }; + "generic:processing:find_extrema:scipy": { input: { name: string; templateName: string; @@ -1325,15 +1335,10 @@ export declare class ApplicationStandata extends Standata { monitors: { name: string; }[]; - results: { - basename: string; - filetype: string; - name: string; - }[]; - }; - "pyml:custom": { applicationName: string; executableName: string; + }; + "pyml:setup_variables_packages": { input: { name: string; templateName: string; @@ -1341,10 +1346,10 @@ export declare class ApplicationStandata extends Standata { monitors: { name: string; }[]; - }; - "pyml:data_input:read_csv:pandas": { applicationName: string; executableName: string; + }; + "pyml:custom": { input: { name: string; templateName: string; @@ -1352,10 +1357,10 @@ export declare class ApplicationStandata extends Standata { monitors: { name: string; }[]; - }; - "pyml:data_input:train_test_split:sklearn": { applicationName: string; executableName: string; + }; + "pyml:data_input:read_csv:pandas": { input: { name: string; templateName: string; @@ -1363,10 +1368,10 @@ export declare class ApplicationStandata extends Standata { monitors: { name: string; }[]; - }; - "pyml:model:adaboosted_trees_regression:sklearn": { applicationName: string; executableName: string; + }; + "pyml:data_input:train_test_split:sklearn": { input: { name: string; templateName: string; @@ -1374,13 +1379,10 @@ export declare class ApplicationStandata extends Standata { monitors: { name: string; }[]; - results: { - name: string; - }[]; - }; - "pyml:model:bagged_trees_regression:sklearn": { applicationName: string; executableName: string; + }; + "pyml:pre_processing:min_max_scaler:sklearn": { input: { name: string; templateName: string; @@ -1388,13 +1390,10 @@ export declare class ApplicationStandata extends Standata { monitors: { name: string; }[]; - results: { - name: string; - }[]; - }; - "pyml:model:extreme_gradboosted_trees_classification:sklearn": { applicationName: string; executableName: string; + }; + "pyml:pre_processing:remove_duplicates:pandas": { input: { name: string; templateName: string; @@ -1402,13 +1401,10 @@ export declare class ApplicationStandata extends Standata { monitors: { name: string; }[]; - results: { - name: string; - }[]; - }; - "pyml:model:extreme_gradboosted_trees_regression:sklearn": { applicationName: string; executableName: string; + }; + "pyml:pre_processing:remove_missing:pandas": { input: { name: string; templateName: string; @@ -1416,13 +1412,10 @@ export declare class ApplicationStandata extends Standata { monitors: { name: string; }[]; - results: { - name: string; - }[]; - }; - "pyml:model:gradboosted_trees_classification:sklearn": { applicationName: string; executableName: string; + }; + "pyml:pre_processing:standardization:sklearn": { input: { name: string; templateName: string; @@ -1430,13 +1423,10 @@ export declare class ApplicationStandata extends Standata { monitors: { name: string; }[]; - results: { - name: string; - }[]; - }; - "pyml:model:gradboosted_trees_regression:sklearn": { applicationName: string; executableName: string; + }; + "pyml:model:adaboosted_trees_regression:sklearn": { input: { name: string; templateName: string; @@ -1447,203 +1437,224 @@ export declare class ApplicationStandata extends Standata { results: { name: string; }[]; - }; - "pyml:model:k_means_clustering:sklearn": { applicationName: string; executableName: string; + }; + "pyml:model:bagged_trees_regression:sklearn": { input: { name: string; templateName: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - "pyml:model:kernel_ridge_regression:sklearn": { applicationName: string; executableName: string; + }; + "pyml:model:gradboosted_trees_regression:sklearn": { input: { name: string; templateName: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - "pyml:model:lasso_regression:sklearn": { applicationName: string; executableName: string; + }; + "pyml:model:extreme_gradboosted_trees_regression:sklearn": { input: { name: string; templateName: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - "pyml:model:multilayer_perceptron:sklearn": { applicationName: string; executableName: string; + }; + "pyml:model:k_means_clustering:sklearn": { input: { name: string; templateName: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - "pyml:model:random_forest_classification:sklearn": { applicationName: string; executableName: string; + }; + "pyml:model:kernel_ridge_regression:sklearn": { input: { name: string; templateName: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - "pyml:model:random_forest_regression:sklearn": { applicationName: string; executableName: string; + }; + "pyml:model:lasso_regression:sklearn": { input: { name: string; templateName: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - "pyml:model:ridge_regression:sklearn": { applicationName: string; executableName: string; + }; + "pyml:model:multilayer_perceptron:sklearn": { input: { name: string; templateName: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - "pyml:post_processing:parity_plot:matplotlib": { applicationName: string; executableName: string; + }; + "pyml:model:random_forest_classification:sklearn": { input: { name: string; templateName: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - "pyml:post_processing:pca_2d_clusters:matplotlib": { applicationName: string; executableName: string; + }; + "pyml:model:gradboosted_trees_classification:sklearn": { input: { name: string; templateName: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - "pyml:post_processing:roc_curve:sklearn": { applicationName: string; executableName: string; + }; + "pyml:model:extreme_gradboosted_trees_classification:sklearn": { input: { name: string; templateName: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - "pyml:pre_processing:min_max_scaler:sklearn": { applicationName: string; executableName: string; + }; + "pyml:model:random_forest_regression:sklearn": { input: { name: string; templateName: string; }[]; + results: { + name: string; + }[]; monitors: { name: string; }[]; - }; - "pyml:pre_processing:remove_duplicates:pandas": { applicationName: string; executableName: string; + }; + "pyml:model:ridge_regression:sklearn": { input: { name: string; templateName: string; }[]; + results: { + name: string; + }[]; monitors: { name: string; }[]; - }; - "pyml:pre_processing:remove_missing:pandas": { applicationName: string; executableName: string; + }; + "pyml:post_processing:parity_plot:matplotlib": { input: { name: string; templateName: string; }[]; + results: { + name: string; + }[]; monitors: { name: string; }[]; - }; - "pyml:pre_processing:standardization:sklearn": { applicationName: string; executableName: string; + }; + "pyml:post_processing:pca_2d_clusters:matplotlib": { input: { name: string; templateName: string; }[]; + results: { + name: string; + }[]; monitors: { name: string; }[]; - }; - "pyml:setup_variables_packages": { applicationName: string; executableName: string; + }; + "pyml:post_processing:roc_curve:sklearn": { input: { name: string; templateName: string; }[]; + results: { + name: string; + }[]; monitors: { name: string; }[]; + applicationName: string; + executableName: string; }; }; + }; + }; + shell: { + sh: { isDefault: boolean; monitors: { name: string; @@ -1651,122 +1662,136 @@ export declare class ApplicationStandata extends Standata { results: { name: string; }[]; - }; - }; - shell: { - sh: { flavors: { - bash_vasp_prepare_neb_images: { - applicationName: string; - executableName: string; + hello_world: { + isDefault: boolean; input: { name: string; }[]; - isMultiMaterial: boolean; monitors: { name: string; }[]; - }; - espresso_collect_dynmat: { applicationName: string; executableName: string; + }; + job_espresso_pw_scf: { input: { name: string; }[]; monitors: { name: string; }[]; - }; - espresso_link_outdir_save: { applicationName: string; executableName: string; + }; + espresso_link_outdir_save: { input: { name: string; }[]; monitors: { name: string; }[]; - }; - hello_world: { applicationName: string; executableName: string; + }; + espresso_collect_dynmat: { input: { name: string; }[]; - isDefault: boolean; monitors: { name: string; }[]; - }; - job_espresso_pw_scf: { applicationName: string; executableName: string; + }; + bash_vasp_prepare_neb_images: { + isMultiMaterial: boolean; input: { name: string; }[]; monitors: { name: string; }[]; + applicationName: string; + executableName: string; }; }; + }; + }; + vasp: { + vasp: { isDefault: boolean; + postProcessors: { + name: string; + }[]; monitors: { name: string; }[]; results: { name: string; }[]; - }; - }; - vasp: { - vasp: { flavors: { vasp: { - applicationName: string; - executableName: string; + isDefault: boolean; input: { name: string; }[]; - isDefault: boolean; + results: { + name: string; + }[]; monitors: { name: string; }[]; + applicationName: string; + executableName: string; + }; + vasp_symprec: { + input: ({ + name: string; + templateName: string; + } | { + name: string; + templateName?: undefined; + })[]; results: { name: string; }[]; - }; - vasp_bands: { + monitors: { + name: string; + }[]; applicationName: string; executableName: string; + }; + vasp_bands: { input: { name: string; templateName: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - vasp_bands_hse: { applicationName: string; executableName: string; + }; + vasp_nscf: { input: { name: string; templateName: string; }[]; - isDefault: boolean; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - vasp_hse: { applicationName: string; executableName: string; + }; + vasp_hse: { + isDefault: boolean; input: ({ name: string; templateName: string; @@ -1774,128 +1799,138 @@ export declare class ApplicationStandata extends Standata { name: string; templateName?: undefined; })[]; - isDefault: boolean; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - vasp_kpt_conv: { applicationName: string; executableName: string; + }; + vasp_bands_hse: { + isDefault: boolean; input: { name: string; templateName: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - vasp_neb: { applicationName: string; executableName: string; + }; + vasp_nscf_hse: { + isDefault: boolean; input: { name: string; templateName: string; }[]; - isMultiMaterial: boolean; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - vasp_neb_final: { applicationName: string; executableName: string; - input: ({ + }; + vasp_relax: { + input: { name: string; templateName: string; - } | { + }[]; + results: { name: string; - templateName?: undefined; - })[]; - isMultiMaterial: boolean; + }[]; monitors: { name: string; }[]; - results: { + postProcessors: { name: string; }[]; - }; - vasp_neb_initial: { applicationName: string; executableName: string; - input: ({ + }; + vasp_vc_relax: { + input: { name: string; templateName: string; - } | { + }[]; + results: { name: string; - templateName?: undefined; - })[]; - isMultiMaterial: boolean; + }[]; monitors: { name: string; }[]; - results: { + postProcessors: { name: string; }[]; - }; - vasp_nscf: { applicationName: string; executableName: string; + }; + vasp_zpe: { input: { name: string; templateName: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - vasp_nscf_hse: { applicationName: string; executableName: string; + }; + vasp_kpt_conv: { input: { name: string; templateName: string; }[]; - isDefault: boolean; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - vasp_relax: { applicationName: string; executableName: string; + }; + vasp_vc_relax_conv: { input: { name: string; templateName: string; }[]; + results: { + name: string; + }[]; monitors: { name: string; }[]; - postProcessors: { + applicationName: string; + executableName: string; + }; + vasp_neb: { + isMultiMaterial: boolean; + input: { name: string; + templateName: string; }[]; results: { name: string; }[]; - }; - vasp_symprec: { + monitors: { + name: string; + }[]; applicationName: string; executableName: string; + }; + vasp_neb_initial: { + isMultiMaterial: boolean; input: ({ name: string; templateName: string; @@ -1903,69 +1938,34 @@ export declare class ApplicationStandata extends Standata { name: string; templateName?: undefined; })[]; - monitors: { - name: string; - }[]; results: { name: string; }[]; - }; - vasp_vc_relax: { - applicationName: string; - executableName: string; - input: { - name: string; - templateName: string; - }[]; monitors: { name: string; }[]; - postProcessors: { - name: string; - }[]; - results: { - name: string; - }[]; - }; - vasp_vc_relax_conv: { applicationName: string; executableName: string; - input: { + }; + vasp_neb_final: { + isMultiMaterial: boolean; + input: ({ name: string; templateName: string; - }[]; - monitors: { + } | { name: string; - }[]; + templateName?: undefined; + })[]; results: { name: string; }[]; - }; - vasp_zpe: { - applicationName: string; - executableName: string; - input: { - name: string; - templateName: string; - }[]; monitors: { name: string; }[]; - results: { - name: string; - }[]; + applicationName: string; + executableName: string; }; }; - isDefault: boolean; - monitors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - results: { - name: string; - }[]; }; }; }; diff --git a/dist/js/runtime_data/subworkflows/espresso/average_electrostatic_potential.json b/dist/js/runtime_data/subworkflows/espresso/average_electrostatic_potential.json index 4486533f..e934ed79 100644 --- a/dist/js/runtime_data/subworkflows/espresso/average_electrostatic_potential.json +++ b/dist/js/runtime_data/subworkflows/espresso/average_electrostatic_potential.json @@ -1 +1 @@ -{"_id":"7f2f8a38-c3bd-5aa9-b3b0-2c367287dd60","name":"Average Electrostatic Potential","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","average_potential_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde"},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":["standard_output"],"results":[],"name":"pp_electrostatic_potential","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","schemaVersion":"2022.8.16"}],"next":"average-electrostatic-potential"},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":["standard_output"],"results":["average_potential_profile"],"name":"average_potential","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","rendered":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"7f2f8a38-c3bd-5aa9-b3b0-2c367287dd60","name":"Average Electrostatic Potential","application":{"name":"espresso"},"properties":["atomic_forces","average_potential_profile","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"pp_electrostatic_potential","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"average-electrostatic-potential","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"average_potential","results":[{"name":"average_potential_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/average_electrostatic_potential_find_minima.json b/dist/js/runtime_data/subworkflows/espresso/average_electrostatic_potential_find_minima.json index 9253bf72..12aff240 100644 --- a/dist/js/runtime_data/subworkflows/espresso/average_electrostatic_potential_find_minima.json +++ b/dist/js/runtime_data/subworkflows/espresso/average_electrostatic_potential_find_minima.json @@ -1 +1 @@ -{"_id":"e5bee93f-2b6b-5d91-9a53-5ed309a918d3","name":"Find ESP Value","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Find Extrema","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"python-find-extrema","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":["standard_output"],"name":"generic:processing:find_extrema:scipy","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","rendered":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\nY = np.array({{array_from_context}})\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","schemaVersion":"2022.8.16"}],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d"},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema"}],"status":"idle","statusTrack":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]} +{"_id":"e5bee93f-2b6b-5d91-9a53-5ed309a918d3","name":"Find ESP Value","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Find Extrema","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"python-find-extrema","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"generic:processing:find_extrema:scipy","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/average_electrostatic_potential_via_band_structure.json b/dist/js/runtime_data/subworkflows/espresso/average_electrostatic_potential_via_band_structure.json index 40cc9d25..67a886c1 100644 --- a/dist/js/runtime_data/subworkflows/espresso/average_electrostatic_potential_via_band_structure.json +++ b/dist/js/runtime_data/subworkflows/espresso/average_electrostatic_potential_via_band_structure.json @@ -1 +1 @@ -{"isMultiMaterial":true,"_id":"09f5f4ff-7dbd-59ae-ad27-5af1bdfc2bd0","name":"Band Structure + average ESP","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_gaps","average_potential_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"name":"Set Material Index","type":"assignment","operand":"MATERIAL_INDEX","value":0,"input":[],"status":"idle","statusTrack":[],"flowchartId":"2d360607-c739-54ad-97a0-8a83f0971f2c","tags":[],"head":true,"next":"9fc7a088-5533-5f70-bb33-f676ec65f565","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"pw-bands-calculate-band-gap"},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"a667d9fd-35d5-5897-be0e-fa0247233649"},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap"}],"status":"idle","statusTrack":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","tags":[],"head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"status":"idle","statusTrack":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","tags":[],"head":false,"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde"},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":["standard_output"],"results":[],"name":"pp_electrostatic_potential","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","schemaVersion":"2022.8.16"}],"next":"average-electrostatic-potential"},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":["standard_output"],"results":["average_potential_profile"],"name":"average_potential","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","rendered":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","schemaVersion":"2022.8.16"}],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9"},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential"}],"status":"idle","statusTrack":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","tags":[],"head":false,"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}}]} +{"isMultiMaterial":true,"_id":"09f5f4ff-7dbd-59ae-ad27-5af1bdfc2bd0","name":"Band Structure + average ESP","application":{"name":"espresso"},"properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"name":"Set Material Index","type":"assignment","operand":"MATERIAL_INDEX","value":0,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"2d360607-c739-54ad-97a0-8a83f0971f2c","head":true,"next":"9fc7a088-5533-5f70-bb33-f676ec65f565","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"pw-bands-calculate-band-gap","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a667d9fd-35d5-5897-be0e-fa0247233649","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"pp_electrostatic_potential","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"average-electrostatic-potential","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"average_potential","results":[{"name":"average_potential_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/band_gap.json b/dist/js/runtime_data/subworkflows/espresso/band_gap.json index 8d4e3ddf..5e08d5ac 100644 --- a/dist/js/runtime_data/subworkflows/espresso/band_gap.json +++ b/dist/js/runtime_data/subworkflows/espresso/band_gap.json @@ -1 +1 @@ -{"_id":"233bb8cf-3b4a-5378-84d9-a6a95a2ab43d","name":"Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","fermi_energy","band_gaps"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0"},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":["standard_output"],"results":["fermi_energy","band_gaps"],"name":"pw_nscf","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","rendered":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}]}]} +{"_id":"233bb8cf-3b4a-5378-84d9-a6a95a2ab43d","name":"Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_nscf","results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/band_gap_hse_dos.json b/dist/js/runtime_data/subworkflows/espresso/band_gap_hse_dos.json index 52ea42cb..c9f8edd3 100644 --- a/dist/js/runtime_data/subworkflows/espresso/band_gap_hse_dos.json +++ b/dist/js/runtime_data/subworkflows/espresso/band_gap_hse_dos.json @@ -1 +1 @@ -{"_id":"f1341a29-777d-5ca3-8933-78a5e0d3f6f2","name":"HSE Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","density_of_states"],"model":{"type":"dft","subtype":"hybrid","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"hse06"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf_hse","head":true,"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f494cdb2-304f-5da2-b979-ce3fbba3a6c4","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_hse.in"}],"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf_hse","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = {% if kgrid.dimensions[0]%2 == 0 %}{{kgrid.dimensions[0]/2}}{% else %}{{(kgrid.dimensions[0]+1)/2}}{% endif %}, nqx2 = {% if kgrid.dimensions[1]%2 == 0 %}{{kgrid.dimensions[1]/2}}{% else %}{{(kgrid.dimensions[1]+1)/2}}{% endif %}, nqx3 = {% if kgrid.dimensions[2]%2 == 0 %}{{kgrid.dimensions[2]/2}}{% else %}{{(kgrid.dimensions[2]+1)/2}}{% endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{% if d%2 == 0 %}{{d}} {% else %}{{d+1}} {% endif %}{% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_hse.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = 1, nqx2 = 1, nqx3 = 1\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651"},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":["standard_output"],"results":["density_of_states"],"name":"projwfc","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","rendered":"&PROJWFC\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n degauss = 0.01\n deltaE = 0.05\n/\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"f1341a29-777d-5ca3-8933-78a5e0d3f6f2","name":"HSE Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"hybrid","functional":"hse06","method":{"type":"pseudopotential","subtype":"us","data":{}}},"units":[{"type":"execution","name":"pw_scf_hse","head":true,"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f494cdb2-304f-5da2-b979-ce3fbba3a6c4","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf_hse","results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_hse.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = {% if kgrid.dimensions[0]%2 == 0 %}{{kgrid.dimensions[0]/2}}{% else %}{{(kgrid.dimensions[0]+1)/2}}{% endif %}, nqx2 = {% if kgrid.dimensions[1]%2 == 0 %}{{kgrid.dimensions[1]/2}}{% else %}{{(kgrid.dimensions[1]+1)/2}}{% endif %}, nqx3 = {% if kgrid.dimensions[2]%2 == 0 %}{{kgrid.dimensions[2]/2}}{% else %}{{(kgrid.dimensions[2]+1)/2}}{% endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{% if d%2 == 0 %}{{d}} {% else %}{{d+1}} {% endif %}{% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_hse.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"projwfc","results":[{"name":"density_of_states"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/band_structure.json b/dist/js/runtime_data/subworkflows/espresso/band_structure.json index 32109a37..f12c9b75 100644 --- a/dist/js/runtime_data/subworkflows/espresso/band_structure.json +++ b/dist/js/runtime_data/subworkflows/espresso/band_structure.json @@ -1 +1 @@ -{"_id":"26d32e68-c2b5-50e9-8933-15f684fcc039","name":"Band Structure","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"d618df45-5af3-5da5-8882-d74a27e00b04"},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2"},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"26d32e68-c2b5-50e9-8933-15f684fcc039","name":"Band Structure","application":{"name":"espresso"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"d618df45-5af3-5da5-8882-d74a27e00b04","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/band_structure_dos.json b/dist/js/runtime_data/subworkflows/espresso/band_structure_dos.json index ec2069e7..c8153eba 100644 --- a/dist/js/runtime_data/subworkflows/espresso/band_structure_dos.json +++ b/dist/js/runtime_data/subworkflows/espresso/band_structure_dos.json @@ -1 +1 @@ -{"_id":"fa594399-6b98-5d79-986c-0713601dc06c","name":"Band Structure + Density of States","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure","fermi_energy","band_gaps","density_of_states"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"d618df45-5af3-5da5-8882-d74a27e00b04"},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2"},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0"},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":["standard_output"],"results":["fermi_energy","band_gaps"],"name":"pw_nscf","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","rendered":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651"},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":["standard_output"],"results":["density_of_states"],"name":"projwfc","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","rendered":"&PROJWFC\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n degauss = 0.01\n deltaE = 0.05\n/\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"fa594399-6b98-5d79-986c-0713601dc06c","name":"Band Structure + Density of States","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"d618df45-5af3-5da5-8882-d74a27e00b04","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_nscf","results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"projwfc","results":[{"name":"density_of_states"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/band_structure_hse.json b/dist/js/runtime_data/subworkflows/espresso/band_structure_hse.json index 1b4a157e..a552b514 100644 --- a/dist/js/runtime_data/subworkflows/espresso/band_structure_hse.json +++ b/dist/js/runtime_data/subworkflows/espresso/band_structure_hse.json @@ -1 +1 @@ -{"_id":"ef3089f3-7460-56f2-9aa2-172d5339d3be","name":"Band Structure - HSE","application":{"name":"espresso"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"model":{"type":"dft","subtype":"hybrid","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"hse06"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf_bands_hse","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"08bd7e4a-2454-53b7-8cc9-9a95975f7e6f","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_bands_hse.in"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"pw_scf_bands_hse","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n {% for d in qgrid.dimensions -%}\n nqx{{loop.index}} = {{d}}\n {% endfor %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal\n{{ '{{' }} {{ explicitKPath.length }} {% raw %} + KPOINTS|length {% endraw %} {{ '}}' }}\n{% raw %}\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n{% endraw %}\n{% for point in explicitKPath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}0.0000001\n{% endfor %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPathFormDataManager"}],"executableName":"pw.x","name":"pw_scf_bands_hse.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n nqx1 = 1\n nqx2 = 1\n nqx3 = 1\n \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal\n{{ 101 + KPOINTS|length }}\n\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n\n 0.000000000 0.000000000 0.000000000 0.0000001\n 0.050000000 0.000000000 0.050000000 0.0000001\n 0.100000000 0.000000000 0.100000000 0.0000001\n 0.150000000 0.000000000 0.150000000 0.0000001\n 0.200000000 0.000000000 0.200000000 0.0000001\n 0.250000000 0.000000000 0.250000000 0.0000001\n 0.300000000 0.000000000 0.300000000 0.0000001\n 0.350000000 0.000000000 0.350000000 0.0000001\n 0.400000000 0.000000000 0.400000000 0.0000001\n 0.450000000 0.000000000 0.450000000 0.0000001\n 0.500000000 0.000000000 0.500000000 0.0000001\n 0.500000000 0.025000000 0.525000000 0.0000001\n 0.500000000 0.050000000 0.550000000 0.0000001\n 0.500000000 0.075000000 0.575000000 0.0000001\n 0.500000000 0.100000000 0.600000000 0.0000001\n 0.500000000 0.125000000 0.625000000 0.0000001\n 0.500000000 0.150000000 0.650000000 0.0000001\n 0.500000000 0.175000000 0.675000000 0.0000001\n 0.500000000 0.200000000 0.700000000 0.0000001\n 0.500000000 0.225000000 0.725000000 0.0000001\n 0.500000000 0.250000000 0.750000000 0.0000001\n 0.487500000 0.262500000 0.750000000 0.0000001\n 0.475000000 0.275000000 0.750000000 0.0000001\n 0.462500000 0.287500000 0.750000000 0.0000001\n 0.450000000 0.300000000 0.750000000 0.0000001\n 0.437500000 0.312500000 0.750000000 0.0000001\n 0.425000000 0.325000000 0.750000000 0.0000001\n 0.412500000 0.337500000 0.750000000 0.0000001\n 0.400000000 0.350000000 0.750000000 0.0000001\n 0.387500000 0.362500000 0.750000000 0.0000001\n 0.375000000 0.375000000 0.750000000 0.0000001\n 0.337500000 0.337500000 0.675000000 0.0000001\n 0.300000000 0.300000000 0.600000000 0.0000001\n 0.262500000 0.262500000 0.525000000 0.0000001\n 0.225000000 0.225000000 0.450000000 0.0000001\n 0.187500000 0.187500000 0.375000000 0.0000001\n 0.150000000 0.150000000 0.300000000 0.0000001\n 0.112500000 0.112500000 0.225000000 0.0000001\n 0.075000000 0.075000000 0.150000000 0.0000001\n 0.037500000 0.037500000 0.075000000 0.0000001\n 0.000000000 0.000000000 0.000000000 0.0000001\n 0.050000000 0.050000000 0.050000000 0.0000001\n 0.100000000 0.100000000 0.100000000 0.0000001\n 0.150000000 0.150000000 0.150000000 0.0000001\n 0.200000000 0.200000000 0.200000000 0.0000001\n 0.250000000 0.250000000 0.250000000 0.0000001\n 0.300000000 0.300000000 0.300000000 0.0000001\n 0.350000000 0.350000000 0.350000000 0.0000001\n 0.400000000 0.400000000 0.400000000 0.0000001\n 0.450000000 0.450000000 0.450000000 0.0000001\n 0.500000000 0.500000000 0.500000000 0.0000001\n 0.512500000 0.475000000 0.512500000 0.0000001\n 0.525000000 0.450000000 0.525000000 0.0000001\n 0.537500000 0.425000000 0.537500000 0.0000001\n 0.550000000 0.400000000 0.550000000 0.0000001\n 0.562500000 0.375000000 0.562500000 0.0000001\n 0.575000000 0.350000000 0.575000000 0.0000001\n 0.587500000 0.325000000 0.587500000 0.0000001\n 0.600000000 0.300000000 0.600000000 0.0000001\n 0.612500000 0.275000000 0.612500000 0.0000001\n 0.625000000 0.250000000 0.625000000 0.0000001\n 0.612500000 0.250000000 0.637500000 0.0000001\n 0.600000000 0.250000000 0.650000000 0.0000001\n 0.587500000 0.250000000 0.662500000 0.0000001\n 0.575000000 0.250000000 0.675000000 0.0000001\n 0.562500000 0.250000000 0.687500000 0.0000001\n 0.550000000 0.250000000 0.700000000 0.0000001\n 0.537500000 0.250000000 0.712500000 0.0000001\n 0.525000000 0.250000000 0.725000000 0.0000001\n 0.512500000 0.250000000 0.737500000 0.0000001\n 0.500000000 0.250000000 0.750000000 0.0000001\n 0.500000000 0.275000000 0.725000000 0.0000001\n 0.500000000 0.300000000 0.700000000 0.0000001\n 0.500000000 0.325000000 0.675000000 0.0000001\n 0.500000000 0.350000000 0.650000000 0.0000001\n 0.500000000 0.375000000 0.625000000 0.0000001\n 0.500000000 0.400000000 0.600000000 0.0000001\n 0.500000000 0.425000000 0.575000000 0.0000001\n 0.500000000 0.450000000 0.550000000 0.0000001\n 0.500000000 0.475000000 0.525000000 0.0000001\n 0.500000000 0.500000000 0.500000000 0.0000001\n 0.512500000 0.475000000 0.512500000 0.0000001\n 0.525000000 0.450000000 0.525000000 0.0000001\n 0.537500000 0.425000000 0.537500000 0.0000001\n 0.550000000 0.400000000 0.550000000 0.0000001\n 0.562500000 0.375000000 0.562500000 0.0000001\n 0.575000000 0.350000000 0.575000000 0.0000001\n 0.587500000 0.325000000 0.587500000 0.0000001\n 0.600000000 0.300000000 0.600000000 0.0000001\n 0.612500000 0.275000000 0.612500000 0.0000001\n 0.625000000 0.250000000 0.625000000 0.0000001\n 0.612500000 0.225000000 0.612500000 0.0000001\n 0.600000000 0.200000000 0.600000000 0.0000001\n 0.587500000 0.175000000 0.587500000 0.0000001\n 0.575000000 0.150000000 0.575000000 0.0000001\n 0.562500000 0.125000000 0.562500000 0.0000001\n 0.550000000 0.100000000 0.550000000 0.0000001\n 0.537500000 0.075000000 0.537500000 0.0000001\n 0.525000000 0.050000000 0.525000000 0.0000001\n 0.512500000 0.025000000 0.512500000 0.0000001\n 0.500000000 0.000000000 0.500000000 0.0000001\n\n","schemaVersion":"2022.8.16"}],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2"},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"ef3089f3-7460-56f2-9aa2-172d5339d3be","name":"Band Structure - HSE","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"hybrid","functional":"hse06","method":{"type":"pseudopotential","subtype":"us","data":{}}},"units":[{"type":"execution","name":"pw_scf_bands_hse","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"08bd7e4a-2454-53b7-8cc9-9a95975f7e6f","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf_bands_hse","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_bands_hse.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n {% for d in qgrid.dimensions -%}\n nqx{{loop.index}} = {{d}}\n {% endfor %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal\n{{ '{{' }} {{ explicitKPath.length }} {% raw %} + KPOINTS|length {% endraw %} {{ '}}' }}\n{% raw %}\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n{% endraw %}\n{% for point in explicitKPath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}0.0000001\n{% endfor %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPathFormDataManager"}],"executableName":"pw.x","name":"pw_scf_bands_hse.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/band_structure_magn.json b/dist/js/runtime_data/subworkflows/espresso/band_structure_magn.json index ea2e51b3..f3bbf528 100644 --- a/dist/js/runtime_data/subworkflows/espresso/band_structure_magn.json +++ b/dist/js/runtime_data/subworkflows/espresso/band_structure_magn.json @@ -1,360 +1 @@ -{ - "_id": "4a7dced1-224e-57d7-a616-cbad99062c7b", - "name": "Spin magnetic bandstructure", - "application": { - "name": "espresso" - }, - "properties": [ - "atomic_forces", - "fermi_energy", - "pressure", - "stress_tensor", - "total_energy", - "total_energy_contributions", - "total_force", - "band_structure" - ], - "model": { - "type": "dft", - "subtype": "gga", - "method": { - "type": "pseudopotential", - "subtype": "us", - "data": {} - }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] - }, - "units": [ - { - "type": "execution", - "name": "pw_scf_magn", - "head": true, - "results": [ - { - "name": "atomic_forces" - }, - { - "name": "fermi_energy" - }, - { - "name": "pressure" - }, - { - "name": "stress_tensor" - }, - { - "name": "total_energy" - }, - { - "name": "total_energy_contributions" - }, - { - "name": "total_force" - } - ], - "monitors": [ - { - "name": "standard_output" - }, - { - "name": "convergence_electronic" - } - ], - "flowchartId": "c229d2a0-3c19-5f13-b3e0-ceb86cb9fbc1", - "preProcessors": [], - "postProcessors": [], - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - }, - "executable": { - "hasAdvancedComputeOptions": true, - "isDefault": true, - "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" - ], - "name": "pw.x", - "schemaVersion": "2022.8.16" - }, - "flavor": { - "applicationName": "espresso", - "executableName": "pw.x", - "input": [ - { - "name": "pw_scf_magn.in" - } - ], - "monitors": [ - "standard_output", - "convergence_electronic" - ], - "results": [ - "atomic_forces", - "fermi_energy", - "pressure", - "stress_tensor", - "total_energy", - "total_energy_contributions", - "total_force" - ], - "name": "pw_scf_magn", - "schemaVersion": "2022.8.16", - "isDefault": false - }, - "status": "idle", - "statusTrack": [], - "tags": [], - "input": [ - { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", - "contextProviders": [ - { - "name": "KGridFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - }, - { - "name": "CollinearMagnetizationDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_scf_magn.in", - "rendered": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n nspin = 2\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n", - "schemaVersion": "2022.8.16" - } - ], - "next": "ea06c333-0cc7-51d4-bd98-cc53fa0844d1" - }, - { - "type": "execution", - "name": "pw_bands_magn", - "head": false, - "results": [ - { - "name": "band_structure" - } - ], - "monitors": [ - { - "name": "standard_output" - } - ], - "flowchartId": "ea06c333-0cc7-51d4-bd98-cc53fa0844d1", - "preProcessors": [], - "postProcessors": [], - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - }, - "executable": { - "hasAdvancedComputeOptions": true, - "isDefault": true, - "monitors": [ - "standard_output", - "convergence_ionic", - "convergence_electronic" - ], - "postProcessors": [ - "remove_non_zero_weight_kpoints" - ], - "name": "pw.x", - "schemaVersion": "2022.8.16" - }, - "flavor": { - "applicationName": "espresso", - "executableName": "pw.x", - "input": [ - { - "name": "pw_bands_magn.in" - } - ], - "monitors": [ - "standard_output" - ], - "results": [ - "band_structure" - ], - "name": "pw_bands_magn", - "schemaVersion": "2022.8.16", - "isDefault": false - }, - "status": "idle", - "statusTrack": [], - "tags": [], - "input": [ - { - "applicationName": "espresso", - "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", - "contextProviders": [ - { - "name": "KPathFormDataManager" - }, - { - "name": "QEPWXInputDataManager" - }, - { - "name": "PlanewaveCutoffDataManager" - }, - { - "name": "CollinearMagnetizationDataManager" - } - ], - "executableName": "pw.x", - "name": "pw_bands_magn.in", - "rendered": "&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n nspin = 2\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n", - "schemaVersion": "2022.8.16" - } - ], - "next": "a8e4de4b-1f55-50e8-a712-ce0b37c04752" - }, - { - "type": "execution", - "name": "bands_spin_up", - "head": false, - "results": [], - "monitors": [ - { - "name": "standard_output" - } - ], - "flowchartId": "a8e4de4b-1f55-50e8-a712-ce0b37c04752", - "preProcessors": [], - "postProcessors": [], - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - }, - "executable": { - "monitors": [ - "standard_output" - ], - "name": "bands.x", - "schemaVersion": "2022.8.16", - "isDefault": false - }, - "flavor": { - "applicationName": "espresso", - "executableName": "bands.x", - "input": [ - { - "name": "bands_spin_up.in" - } - ], - "monitors": [ - "standard_output" - ], - "name": "bands_spin_up", - "schemaVersion": "2022.8.16", - "isDefault": false - }, - "status": "idle", - "statusTrack": [], - "tags": [], - "input": [ - { - "applicationName": "espresso", - "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_up.dat'{% endraw %}\n spin_component = 1\n no_overlap = .true.\n/\n", - "contextProviders": [], - "executableName": "bands.x", - "name": "bands_spin_up.in", - "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands_up.dat'\n spin_component = 1\n no_overlap = .true.\n/\n", - "schemaVersion": "2022.8.16" - } - ], - "next": "fd937050-a3f3-5d4d-bb50-d150a93ea5e0" - }, - { - "type": "execution", - "name": "bands_spin_dn", - "head": false, - "results": [], - "monitors": [ - { - "name": "standard_output" - } - ], - "flowchartId": "fd937050-a3f3-5d4d-bb50-d150a93ea5e0", - "preProcessors": [], - "postProcessors": [], - "application": { - "name": "espresso", - "shortName": "qe", - "summary": "Quantum ESPRESSO", - "build": "GNU", - "hasAdvancedComputeOptions": true, - "isDefault": true, - "version": "6.3", - "schemaVersion": "2022.8.16" - }, - "executable": { - "monitors": [ - "standard_output" - ], - "name": "bands.x", - "schemaVersion": "2022.8.16", - "isDefault": false - }, - "flavor": { - "applicationName": "espresso", - "executableName": "bands.x", - "input": [ - { - "name": "bands_spin_dn.in" - } - ], - "monitors": [ - "standard_output" - ], - "name": "bands_spin_dn", - "schemaVersion": "2022.8.16", - "isDefault": false - }, - "status": "idle", - "statusTrack": [], - "tags": [], - "input": [ - { - "applicationName": "espresso", - "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_dn.dat'{% endraw %}\n spin_component = 2\n no_overlap = .true.\n/\n", - "contextProviders": [], - "executableName": "bands.x", - "name": "bands_spin_dn.in", - "rendered": "&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands_dn.dat'\n spin_component = 2\n no_overlap = .true.\n/\n", - "schemaVersion": "2022.8.16" - } - ] - } - ] -} +{"_id":"4a7dced1-224e-57d7-a616-cbad99062c7b","name":"Spin magnetic bandstructure","application":{"name":"espresso"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf_magn","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"c229d2a0-3c19-5f13-b3e0-ceb86cb9fbc1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf_magn","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_magn.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_magn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands_magn","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands_magn","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_magn.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_magn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands_spin_up","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands_spin_up","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_up.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_up.dat'{% endraw %}\n spin_component = 1\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_up.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands_spin_dn","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands_spin_dn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_dn.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_dn.dat'{% endraw %}\n spin_component = 2\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_dn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/band_structure_soc.json b/dist/js/runtime_data/subworkflows/espresso/band_structure_soc.json index 6b4669ad..675a2665 100644 --- a/dist/js/runtime_data/subworkflows/espresso/band_structure_soc.json +++ b/dist/js/runtime_data/subworkflows/espresso/band_structure_soc.json @@ -1 +1 @@ -{"_id":"51e6fb82-538a-58ee-8d4e-991c8446f657","name":"Spin orbit coupling bandstructure","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"nc-fr","data":{"searchText":"nc-fr"}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf_soc","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"74ec024a-f247-5f15-9c21-cc169bcb62c7","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_soc.in"}],"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf_soc","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_soc.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b"},{"type":"execution","name":"pw_bands_soc","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_soc.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands_soc","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES_WITH_LABELS }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_soc.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n starting_magnetization(1) = 0 \n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2"},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"51e6fb82-538a-58ee-8d4e-991c8446f657","name":"Spin orbit coupling bandstructure","application":{"name":"espresso"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"nc-fr","data":{"searchText":"nc-fr"}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf_soc","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"74ec024a-f247-5f15-9c21-cc169bcb62c7","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf_soc","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_soc.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_soc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands_soc","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands_soc","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_soc.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_soc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/dielectric_tensor.json b/dist/js/runtime_data/subworkflows/espresso/dielectric_tensor.json index 2b6858e4..053d11a5 100644 --- a/dist/js/runtime_data/subworkflows/espresso/dielectric_tensor.json +++ b/dist/js/runtime_data/subworkflows/espresso/dielectric_tensor.json @@ -1 +1 @@ -{"_id":"38340b52-83ad-5862-bc18-c140bdc0cb72","name":"Compute Dielectric Function","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","fermi_energy","band_gaps","dielectric_tensor"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"nc","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"3b230ec3-0791-52f7-a4db-625390b8718f"},{"name":"Set No-Symmetry Flag","type":"assignment","operand":"NO_SYMMETRY_NO_INVERSION","value":true,"input":[],"status":"idle","statusTrack":[],"flowchartId":"3b230ec3-0791-52f7-a4db-625390b8718f","tags":[],"head":false,"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":["standard_output"],"results":["fermi_energy","band_gaps"],"name":"pw_nscf","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","rendered":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb"},{"type":"execution","name":"Compute dielectric function","head":false,"results":[{"name":"dielectric_tensor"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"epsilon.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"epsilon.x","input":[{"name":"epsilon.in"}],"monitors":["standard_output"],"results":["dielectric_tensor"],"name":"dielectric_tensor","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n","contextProviders":[],"executableName":"epsilon.x","name":"epsilon.in","rendered":"&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"38340b52-83ad-5862-bc18-c140bdc0cb72","name":"Compute Dielectric Function","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","dielectric_tensor","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"nc","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b230ec3-0791-52f7-a4db-625390b8718f","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set No-Symmetry Flag","type":"assignment","operand":"NO_SYMMETRY_NO_INVERSION","value":true,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"3b230ec3-0791-52f7-a4db-625390b8718f","head":false,"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_nscf","results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Compute dielectric function","head":false,"results":[{"name":"dielectric_tensor"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"epsilon.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"dielectric_tensor","results":[{"name":"dielectric_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"epsilon.x","input":[{"name":"epsilon.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n","contextProviders":[],"executableName":"epsilon.x","name":"epsilon.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/dos.json b/dist/js/runtime_data/subworkflows/espresso/dos.json index 26b2ca2f..289bfc41 100644 --- a/dist/js/runtime_data/subworkflows/espresso/dos.json +++ b/dist/js/runtime_data/subworkflows/espresso/dos.json @@ -1 +1 @@ -{"_id":"2cf317f3-3306-5a96-bc9b-e9103ebcd5be","name":"Density of States","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","fermi_energy","band_gaps","density_of_states"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0"},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":["standard_output"],"results":["fermi_energy","band_gaps"],"name":"pw_nscf","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","rendered":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651"},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":["standard_output"],"results":["density_of_states"],"name":"projwfc","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","rendered":"&PROJWFC\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n degauss = 0.01\n deltaE = 0.05\n/\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"2cf317f3-3306-5a96-bc9b-e9103ebcd5be","name":"Density of States","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_nscf","results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"projwfc","results":[{"name":"density_of_states"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/electronic_density_mesh.json b/dist/js/runtime_data/subworkflows/espresso/electronic_density_mesh.json index fd9d8e5c..f79d505c 100644 --- a/dist/js/runtime_data/subworkflows/espresso/electronic_density_mesh.json +++ b/dist/js/runtime_data/subworkflows/espresso/electronic_density_mesh.json @@ -1 +1 @@ -{"_id":"e2749c5a-fcd9-589c-819b-8b88c5c90924","name":"Electronic Density Mesh","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061"},{"type":"execution","name":"pp_density","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_density.in"}],"monitors":["standard_output"],"results":[],"name":"pp_density","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_density.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"e2749c5a-fcd9-589c-819b-8b88c5c90924","name":"Electronic Density Mesh","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pp_density","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"pp_density","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_density.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_density.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/esm.json b/dist/js/runtime_data/subworkflows/espresso/esm.json index 2f3f0400..67754820 100644 --- a/dist/js/runtime_data/subworkflows/espresso/esm.json +++ b/dist/js/runtime_data/subworkflows/espresso/esm.json @@ -1 +1 @@ -{"_id":"0de669f6-a455-5dae-b331-19dc85f7090f","name":"Effective Screening Medium (ESM)","application":{"name":"espresso"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","potential_profile","charge_density_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_esm","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"2f487bc6-c237-53e4-bad5-be60369662cb","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm.in"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","potential_profile","charge_density_profile"],"name":"pw_esm","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = 'pbc'\n fcp_mu = 0\n esm_w = 0\n esm_efield = 0\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}]}]} +{"_id":"0de669f6-a455-5dae-b331-19dc85f7090f","name":"Effective Screening Medium (ESM)","application":{"name":"espresso"},"properties":["atomic_forces","charge_density_profile","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_esm","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"2f487bc6-c237-53e4-bad5-be60369662cb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_esm","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/esm_relax.json b/dist/js/runtime_data/subworkflows/espresso/esm_relax.json index d8c777d3..31c42df5 100644 --- a/dist/js/runtime_data/subworkflows/espresso/esm_relax.json +++ b/dist/js/runtime_data/subworkflows/espresso/esm_relax.json @@ -1 +1 @@ -{"_id":"69728792-afeb-50aa-9b4e-6974a90f676a","name":"Effective Screening Medium (ESM) Relax","application":{"name":"espresso"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","potential_profile","charge_density_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_esm_relax","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"a2bec506-1fdd-5125-a787-85f31cde20c1","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm_relax.in"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","potential_profile","charge_density_profile"],"name":"pw_esm_relax","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm_relax.in","rendered":"&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = 'pbc'\n fcp_mu = 0\n esm_w = 0\n esm_efield = 0\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}]}]} +{"_id":"69728792-afeb-50aa-9b4e-6974a90f676a","name":"Effective Screening Medium (ESM) Relax","application":{"name":"espresso"},"properties":["atomic_forces","charge_density_profile","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_esm_relax","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"a2bec506-1fdd-5125-a787-85f31cde20c1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_esm_relax","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm_relax.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/espresso_extract_kpoints.json b/dist/js/runtime_data/subworkflows/espresso/espresso_extract_kpoints.json index be636a9d..d21ade7f 100644 --- a/dist/js/runtime_data/subworkflows/espresso/espresso_extract_kpoints.json +++ b/dist/js/runtime_data/subworkflows/espresso/espresso_extract_kpoints.json @@ -1 +1 @@ -{"_id":"a2785cc5-2427-5c7a-b30f-7077475b948c","name":"Extract KPOINTS","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Extract kpoints","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"a716b133-2d04-50b5-b497-100265e3fa24","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"espresso_extract_kpoints.py"},{"name":"requirements.txt","templateName":"requirements_empty.txt"}],"monitors":["standard_output"],"name":"espresso_extract_kpoints","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_extract_kpoints.py","rendered":"import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"a2785cc5-2427-5c7a-b30f-7077475b948c","name":"Extract KPOINTS","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Extract kpoints","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"a716b133-2d04-50b5-b497-100265e3fa24","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"espresso_extract_kpoints","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"espresso_extract_kpoints.py"},{"name":"requirements.txt","templateName":"requirements_empty.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_extract_kpoints.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/espresso_xml_get_qpt_irr.json b/dist/js/runtime_data/subworkflows/espresso/espresso_xml_get_qpt_irr.json index d27d4f44..d2469812 100644 --- a/dist/js/runtime_data/subworkflows/espresso/espresso_xml_get_qpt_irr.json +++ b/dist/js/runtime_data/subworkflows/espresso/espresso_xml_get_qpt_irr.json @@ -1 +1 @@ -{"_id":"e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a","name":"espresso-xml-get-qpt-irr","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"python","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"espresso_xml_get_qpt_irr.py"}],"monitors":["standard_output"],"name":"espresso_xml_get_qpt_irr","schemaVersion":"2022.8.16","isDefault":false},"next":"d0fd8654-2106-546b-8792-7bb46272befc","status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n{# JOB_WORK_DIR will be initialized at runtime => avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_xml_get_qpt_irr.py","rendered":"# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n\n\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","schemaVersion":"2022.8.16"}]},{"name":"assignment","type":"assignment","operand":"Q_POINTS","value":"json.loads(STDOUT)","input":[{"scope":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","name":"STDOUT"}],"status":"idle","statusTrack":[],"flowchartId":"d0fd8654-2106-546b-8792-7bb46272befc","tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]} +{"_id":"e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a","name":"espresso-xml-get-qpt-irr","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/fixed_cell_relaxation.json b/dist/js/runtime_data/subworkflows/espresso/fixed_cell_relaxation.json index d4a82568..ba1ea49f 100644 --- a/dist/js/runtime_data/subworkflows/espresso/fixed_cell_relaxation.json +++ b/dist/js/runtime_data/subworkflows/espresso/fixed_cell_relaxation.json @@ -1 +1 @@ -{"_id":"fb75e249-5489-5146-bd8a-786d33330d9c","name":"Fixed-cell Relaxation","application":{"name":"espresso"},"properties":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"c42871f6-ab79-5987-b228-c3bd80f16ffd","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_relax.in"}],"monitors":["standard_output","convergence_electronic","convergence_ionic"],"results":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"name":"pw_relax","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_relax.in","rendered":"&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}]}]} +{"_id":"fb75e249-5489-5146-bd8a-786d33330d9c","name":"Fixed-cell Relaxation","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"c42871f6-ab79-5987-b228-c3bd80f16ffd","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_relax","results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_relax.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/gw_band_structure_band_gap_full_frequency.json b/dist/js/runtime_data/subworkflows/espresso/gw_band_structure_band_gap_full_frequency.json index 83445382..a7781f1e 100644 --- a/dist/js/runtime_data/subworkflows/espresso/gw_band_structure_band_gap_full_frequency.json +++ b/dist/js/runtime_data/subworkflows/espresso/gw_band_structure_band_gap_full_frequency.json @@ -1 +1 @@ -{"_id":"46bcdcc8-628e-518e-b8c3-9bf38d7a2aef","name":"Full Frequency GW Band Structure + Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure","fermi_energy","band_gaps"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{"searchText":".*dojo-oncv.*"}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e"},{"type":"execution","name":"gw_bands_full_frequency","head":false,"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"gw.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_full_frequency.in"}],"monitors":["standard_output"],"results":["band_structure","fermi_energy","band_gaps"],"name":"gw_bands_full_frequency","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_full_frequency.in","rendered":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n\n ! the grid used for the linear response\n kpt_grid = 2, 2, 2\n qpt_grid = 1, 1, 1\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n101\n 0.000000000 0.000000000 0.000000000\n 0.028867513 -0.040824829 0.050000000\n 0.057735027 -0.081649658 0.100000000\n 0.086602540 -0.122474487 0.150000000\n 0.115470054 -0.163299316 0.200000000\n 0.144337567 -0.204124145 0.250000000\n 0.173205081 -0.244948974 0.300000000\n 0.202072594 -0.285773803 0.350000000\n 0.230940108 -0.326598632 0.400000000\n 0.259807621 -0.367423461 0.450000000\n 0.288675135 -0.408248290 0.500000000\n 0.274241378 -0.387835876 0.525000000\n 0.259807621 -0.367423461 0.550000000\n 0.245373864 -0.347011047 0.575000000\n 0.230940108 -0.326598632 0.600000000\n 0.216506351 -0.306186218 0.625000000\n 0.202072594 -0.285773803 0.650000000\n 0.187638837 -0.265361389 0.675000000\n 0.173205081 -0.244948974 0.700000000\n 0.158771324 -0.224536560 0.725000000\n 0.144337567 -0.204124145 0.750000000\n 0.129903811 -0.183711731 0.750000000\n 0.115470054 -0.163299316 0.750000000\n 0.101036297 -0.142886902 0.750000000\n 0.086602540 -0.122474487 0.750000000\n 0.072168784 -0.102062073 0.750000000\n 0.057735027 -0.081649658 0.750000000\n 0.043301270 -0.061237244 0.750000000\n 0.028867513 -0.040824829 0.750000000\n 0.014433757 -0.020412415 0.750000000\n -0.000000000 -0.000000000 0.750000000\n -0.000000000 -0.000000000 0.675000000\n -0.000000000 -0.000000000 0.600000000\n -0.000000000 -0.000000000 0.525000000\n -0.000000000 -0.000000000 0.450000000\n -0.000000000 -0.000000000 0.375000000\n -0.000000000 -0.000000000 0.300000000\n -0.000000000 -0.000000000 0.225000000\n -0.000000000 -0.000000000 0.150000000\n -0.000000000 -0.000000000 0.075000000\n 0.000000000 0.000000000 0.000000000\n 0.028867513 0.020412415 0.050000000\n 0.057735027 0.040824829 0.100000000\n 0.086602540 0.061237244 0.150000000\n 0.115470054 0.081649658 0.200000000\n 0.144337567 0.102062073 0.250000000\n 0.173205081 0.122474487 0.300000000\n 0.202072594 0.142886902 0.350000000\n 0.230940108 0.163299316 0.400000000\n 0.259807621 0.183711731 0.450000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.339193283 -0.204124145 0.637500000\n 0.317542648 -0.204124145 0.650000000\n 0.295892013 -0.204124145 0.662500000\n 0.274241378 -0.204124145 0.675000000\n 0.252590743 -0.204124145 0.687500000\n 0.230940108 -0.204124145 0.700000000\n 0.209289473 -0.204124145 0.712500000\n 0.187638837 -0.204124145 0.725000000\n 0.165988202 -0.204124145 0.737500000\n 0.144337567 -0.204124145 0.750000000\n 0.158771324 -0.163299316 0.725000000\n 0.173205081 -0.122474487 0.700000000\n 0.187638837 -0.081649658 0.675000000\n 0.202072594 -0.040824829 0.650000000\n 0.216506351 -0.000000000 0.625000000\n 0.230940108 0.040824829 0.600000000\n 0.245373864 0.081649658 0.575000000\n 0.259807621 0.122474487 0.550000000\n 0.274241378 0.163299316 0.525000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.353627040 -0.224536560 0.612500000\n 0.346410162 -0.244948974 0.600000000\n 0.339193283 -0.265361389 0.587500000\n 0.331976405 -0.285773803 0.575000000\n 0.324759526 -0.306186218 0.562500000\n 0.317542648 -0.326598632 0.550000000\n 0.310325770 -0.347011047 0.537500000\n 0.303108891 -0.367423461 0.525000000\n 0.295892013 -0.387835876 0.512500000\n 0.288675135 -0.408248290 0.500000000\n\n/\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"46bcdcc8-628e-518e-b8c3-9bf38d7a2aef","name":"Full Frequency GW Band Structure + Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{"searchText":".*dojo-oncv.*"}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"gw_bands_full_frequency","head":false,"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"gw.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"gw_bands_full_frequency","results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_full_frequency.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_full_frequency.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/gw_band_structure_band_gap_plasmon_pole.json b/dist/js/runtime_data/subworkflows/espresso/gw_band_structure_band_gap_plasmon_pole.json index cc19f132..88978c5e 100644 --- a/dist/js/runtime_data/subworkflows/espresso/gw_band_structure_band_gap_plasmon_pole.json +++ b/dist/js/runtime_data/subworkflows/espresso/gw_band_structure_band_gap_plasmon_pole.json @@ -1 +1 @@ -{"_id":"72b79a87-8eef-5fe2-9d6c-6c9c256dd56c","name":"Plasmon-Pole GW Band Structure + Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure","fermi_energy","band_gaps"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{"searchText":".*dojo-oncv.*"}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"f9910952-eca9-5a5f-ae03-a0060ae2fc78"},{"type":"execution","name":"gw_bands_plasmon_pole","head":false,"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"gw.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_plasmon_pole.in"}],"monitors":["standard_output"],"results":["band_structure","fermi_energy","band_gaps"],"name":"gw_bands_plasmon_pole","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_plasmon_pole.in","rendered":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n\n ! the grid used for the linear response\n kpt_grid = 2, 2, 2\n qpt_grid = 1, 1, 1\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n101\n 0.000000000 0.000000000 0.000000000\n 0.028867513 -0.040824829 0.050000000\n 0.057735027 -0.081649658 0.100000000\n 0.086602540 -0.122474487 0.150000000\n 0.115470054 -0.163299316 0.200000000\n 0.144337567 -0.204124145 0.250000000\n 0.173205081 -0.244948974 0.300000000\n 0.202072594 -0.285773803 0.350000000\n 0.230940108 -0.326598632 0.400000000\n 0.259807621 -0.367423461 0.450000000\n 0.288675135 -0.408248290 0.500000000\n 0.274241378 -0.387835876 0.525000000\n 0.259807621 -0.367423461 0.550000000\n 0.245373864 -0.347011047 0.575000000\n 0.230940108 -0.326598632 0.600000000\n 0.216506351 -0.306186218 0.625000000\n 0.202072594 -0.285773803 0.650000000\n 0.187638837 -0.265361389 0.675000000\n 0.173205081 -0.244948974 0.700000000\n 0.158771324 -0.224536560 0.725000000\n 0.144337567 -0.204124145 0.750000000\n 0.129903811 -0.183711731 0.750000000\n 0.115470054 -0.163299316 0.750000000\n 0.101036297 -0.142886902 0.750000000\n 0.086602540 -0.122474487 0.750000000\n 0.072168784 -0.102062073 0.750000000\n 0.057735027 -0.081649658 0.750000000\n 0.043301270 -0.061237244 0.750000000\n 0.028867513 -0.040824829 0.750000000\n 0.014433757 -0.020412415 0.750000000\n -0.000000000 -0.000000000 0.750000000\n -0.000000000 -0.000000000 0.675000000\n -0.000000000 -0.000000000 0.600000000\n -0.000000000 -0.000000000 0.525000000\n -0.000000000 -0.000000000 0.450000000\n -0.000000000 -0.000000000 0.375000000\n -0.000000000 -0.000000000 0.300000000\n -0.000000000 -0.000000000 0.225000000\n -0.000000000 -0.000000000 0.150000000\n -0.000000000 -0.000000000 0.075000000\n 0.000000000 0.000000000 0.000000000\n 0.028867513 0.020412415 0.050000000\n 0.057735027 0.040824829 0.100000000\n 0.086602540 0.061237244 0.150000000\n 0.115470054 0.081649658 0.200000000\n 0.144337567 0.102062073 0.250000000\n 0.173205081 0.122474487 0.300000000\n 0.202072594 0.142886902 0.350000000\n 0.230940108 0.163299316 0.400000000\n 0.259807621 0.183711731 0.450000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.339193283 -0.204124145 0.637500000\n 0.317542648 -0.204124145 0.650000000\n 0.295892013 -0.204124145 0.662500000\n 0.274241378 -0.204124145 0.675000000\n 0.252590743 -0.204124145 0.687500000\n 0.230940108 -0.204124145 0.700000000\n 0.209289473 -0.204124145 0.712500000\n 0.187638837 -0.204124145 0.725000000\n 0.165988202 -0.204124145 0.737500000\n 0.144337567 -0.204124145 0.750000000\n 0.158771324 -0.163299316 0.725000000\n 0.173205081 -0.122474487 0.700000000\n 0.187638837 -0.081649658 0.675000000\n 0.202072594 -0.040824829 0.650000000\n 0.216506351 -0.000000000 0.625000000\n 0.230940108 0.040824829 0.600000000\n 0.245373864 0.081649658 0.575000000\n 0.259807621 0.122474487 0.550000000\n 0.274241378 0.163299316 0.525000000\n 0.288675135 0.204124145 0.500000000\n 0.295892013 0.163299316 0.512500000\n 0.303108891 0.122474487 0.525000000\n 0.310325770 0.081649658 0.537500000\n 0.317542648 0.040824829 0.550000000\n 0.324759526 -0.000000000 0.562500000\n 0.331976405 -0.040824829 0.575000000\n 0.339193283 -0.081649658 0.587500000\n 0.346410162 -0.122474487 0.600000000\n 0.353627040 -0.163299316 0.612500000\n 0.360843918 -0.204124145 0.625000000\n 0.353627040 -0.224536560 0.612500000\n 0.346410162 -0.244948974 0.600000000\n 0.339193283 -0.265361389 0.587500000\n 0.331976405 -0.285773803 0.575000000\n 0.324759526 -0.306186218 0.562500000\n 0.317542648 -0.326598632 0.550000000\n 0.310325770 -0.347011047 0.537500000\n 0.303108891 -0.367423461 0.525000000\n 0.295892013 -0.387835876 0.512500000\n 0.288675135 -0.408248290 0.500000000\n\n/\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"72b79a87-8eef-5fe2-9d6c-6c9c256dd56c","name":"Plasmon-Pole GW Band Structure + Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{"searchText":".*dojo-oncv.*"}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"gw_bands_plasmon_pole","head":false,"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"gw.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"gw_bands_plasmon_pole","results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_plasmon_pole.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_plasmon_pole.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/kpoint_convergence.json b/dist/js/runtime_data/subworkflows/espresso/kpoint_convergence.json index ad51f63d..a0f296b9 100644 --- a/dist/js/runtime_data/subworkflows/espresso/kpoint_convergence.json +++ b/dist/js/runtime_data/subworkflows/espresso/kpoint_convergence.json @@ -1 +1 @@ -{"_id":"ff6a8fbc-2202-5786-9a26-67c843417d0b","name":"K-point Convergence","application":{"name":"espresso"},"properties":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"flowchartId":"init-tolerance","status":"idle","statusTrack":[],"tags":[],"head":true,"next":"init-increment","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"flowchartId":"init-increment","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"init-result","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"flowchartId":"init-result","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"init-parameter","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"flowchartId":"init-parameter","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"pwscf-kpoint-convergence","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"pw_scf_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"pwscf-kpoint-convergence","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_kpt_conv.in"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor"],"name":"pw_scf_kpt_conv","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0{% endraw %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_kpt_conv.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0\n","schemaVersion":"2022.8.16"}],"next":"store-result"},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"pwscf-kpoint-convergence"}],"flowchartId":"store-result","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"check-convergence","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"check convergence","type":"condition","input":[],"results":[],"preProcessors":[],"postProcessors":[],"then":"convergence-is-reached","else":"update-result","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"flowchartId":"check-convergence","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"update-result","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"flowchartId":"update-result","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"increment-parameter","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"flowchartId":"increment-parameter","next":"pwscf-kpoint-convergence","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"flowchartId":"convergence-is-reached","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}}]} +{"_id":"ff6a8fbc-2202-5786-9a26-67c843417d0b","name":"K-point Convergence","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-tolerance","head":true,"next":"init-increment","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-increment","head":false,"next":"init-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-result","head":false,"next":"init-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-parameter","head":false,"next":"pwscf-kpoint-convergence","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"pwscf-kpoint-convergence","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf_kpt_conv","results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_kpt_conv.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0{% endraw %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_kpt_conv.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"store-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"pwscf-kpoint-convergence"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"store-result","head":false,"next":"check-convergence","schemaVersion":"2022.8.16","isDefault":false},{"name":"check convergence","type":"condition","input":[],"statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"check-convergence","then":"convergence-is-reached","else":"update-result","head":false,"next":"update-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"update-result","head":false,"next":"increment-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"increment-parameter","next":"pwscf-kpoint-convergence","head":false,"schemaVersion":"2022.8.16","isDefault":false},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"convergence-is-reached","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/neb.json b/dist/js/runtime_data/subworkflows/espresso/neb.json index 2d1b2f04..d2072f00 100644 --- a/dist/js/runtime_data/subworkflows/espresso/neb.json +++ b/dist/js/runtime_data/subworkflows/espresso/neb.json @@ -1 +1 @@ -{"isMultiMaterial":true,"_id":"c9034468-df28-5357-8912-02226f919042","name":"Nudged Elastic Band (NEB)","application":{"name":"espresso"},"properties":["reaction_energy_barrier","reaction_energy_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"neb","head":true,"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9f273ca0-d240-5b1f-89a9-64dd579304ac","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"neb.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"neb.x","input":[{"name":"neb.in"}],"monitors":["standard_output"],"results":["reaction_energy_barrier","reaction_energy_profile"],"name":"neb","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = {{ 2 + (input.INTERMEDIATE_IMAGES.length or neb.nImages) }},\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\n{{ input.FIRST_IMAGE }}\n{%- for IMAGE in input.INTERMEDIATE_IMAGES %}\nINTERMEDIATE_IMAGE\nATOMIC_POSITIONS crystal\n{{ IMAGE }}\n{%- endfor %}\nLAST_IMAGE\nATOMIC_POSITIONS crystal\n{{ input.LAST_IMAGE }}\nEND_POSITIONS\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nEND_ENGINE_INPUT\nEND\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"NEBFormDataManager"},{"name":"QENEBInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"neb.x","name":"neb.in","rendered":"BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = 3,\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\nSi 28.0855 \nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nLAST_IMAGE\nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nEND_POSITIONS\nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \nEND_ENGINE_INPUT\nEND\n","schemaVersion":"2022.8.16"}]}]} +{"isMultiMaterial":true,"_id":"c9034468-df28-5357-8912-02226f919042","name":"Nudged Elastic Band (NEB)","application":{"name":"espresso"},"properties":["reaction_energy_barrier","reaction_energy_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"neb","head":true,"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9f273ca0-d240-5b1f-89a9-64dd579304ac","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"neb.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"neb","results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"neb.x","input":[{"name":"neb.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = {{ 2 + (input.INTERMEDIATE_IMAGES.length or neb.nImages) }},\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_first = false %}\n{%- for position in input.FIRST_IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_first = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.FIRST_IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_first %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n{%- for IMAGE in input.INTERMEDIATE_IMAGES %}\nINTERMEDIATE_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_intermediate = false %}\n{%- for position in IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_intermediate = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_intermediate %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n{%- endfor %}\nLAST_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_last = false %}\n{%- for position in input.LAST_IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_last = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.LAST_IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_last %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nEND_POSITIONS\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nEND_ENGINE_INPUT\nEND\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"NEBFormDataManager"},{"name":"QENEBInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"neb.x","name":"neb.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/ph_init_qpoints.json b/dist/js/runtime_data/subworkflows/espresso/ph_init_qpoints.json index 5bd706c9..6bbc1d90 100644 --- a/dist/js/runtime_data/subworkflows/espresso/ph_init_qpoints.json +++ b/dist/js/runtime_data/subworkflows/espresso/ph_init_qpoints.json @@ -1 +1 @@ -{"_id":"2f017bcb-f4ba-55b8-b939-1f780679a88e","name":"ph-init-qpoints","application":{"name":"espresso"},"properties":[],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"ph_init_qpoints","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"b8ea6a33-38f3-5434-b17e-b5eae8fff9fc","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_init_qpoints.in"}],"monitors":["standard_output"],"results":[],"name":"ph_init_qpoints","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_init_qpoints.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"2f017bcb-f4ba-55b8-b939-1f780679a88e","name":"ph-init-qpoints","application":{"name":"espresso"},"properties":[],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"ph_init_qpoints","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"b8ea6a33-38f3-5434-b17e-b5eae8fff9fc","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_init_qpoints","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_init_qpoints.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_init_qpoints.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/ph_single_irr_qpt.json b/dist/js/runtime_data/subworkflows/espresso/ph_single_irr_qpt.json index f83acb60..7090bf0f 100644 --- a/dist/js/runtime_data/subworkflows/espresso/ph_single_irr_qpt.json +++ b/dist/js/runtime_data/subworkflows/espresso/ph_single_irr_qpt.json @@ -1 +1 @@ -{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","name":"ph-single-irr-qpt","application":{"name":"espresso"},"properties":[],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"ph_single_irr_qpt","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"8db9af08-d935-57a0-a824-e7db6d936de8","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_single_irr_qpt.in"}],"monitors":["standard_output"],"results":[],"name":"ph_single_irr_qpt","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_single_irr_qpt.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n \n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n \n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = '{{ JOB_SCRATCH_DIR }}/outdir'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","name":"ph-single-irr-qpt","application":{"name":"espresso"},"properties":[],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"ph_single_irr_qpt","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"8db9af08-d935-57a0-a824-e7db6d936de8","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_single_irr_qpt","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_single_irr_qpt.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_single_irr_qpt.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/phonon_dispersions.json b/dist/js/runtime_data/subworkflows/espresso/phonon_dispersions.json index d103fc41..0eb8324f 100644 --- a/dist/js/runtime_data/subworkflows/espresso/phonon_dispersions.json +++ b/dist/js/runtime_data/subworkflows/espresso/phonon_dispersions.json @@ -1 +1 @@ -{"_id":"bfb69b48-8fbf-5a0d-8949-448f20754766","name":"Phonon Dispersions","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","phonon_dos","phonon_dispersions"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"13bcafce-56ef-5b47-b079-317495eb6933"},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":["standard_output"],"results":["phonon_dos"],"name":"ph_grid","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n ldisp = .true.\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"next":"3b4507a7-9244-540b-abe0-66bceab700f5"},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":["standard_output"],"results":[],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","rendered":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","schemaVersion":"2022.8.16"}],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1"},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":["standard_output"],"results":["phonon_dispersions"],"name":"matdyn_path","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","rendered":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"bfb69b48-8fbf-5a0d-8949-448f20754766","name":"Phonon Dispersions","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"13bcafce-56ef-5b47-b079-317495eb6933","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_grid","results":[{"name":"phonon_dos"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"q2r","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"matdyn_path","results":[{"name":"phonon_dispersions"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/phonon_dos.json b/dist/js/runtime_data/subworkflows/espresso/phonon_dos.json index addabd57..bd28b9f5 100644 --- a/dist/js/runtime_data/subworkflows/espresso/phonon_dos.json +++ b/dist/js/runtime_data/subworkflows/espresso/phonon_dos.json @@ -1 +1 @@ -{"_id":"2232051b-9f2a-5a48-9b4d-6231eb6e8297","name":"Phonon Density of States","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","phonon_dos"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"13bcafce-56ef-5b47-b079-317495eb6933"},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":["standard_output"],"results":["phonon_dos"],"name":"ph_grid","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n ldisp = .true.\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"next":"3b4507a7-9244-540b-abe0-66bceab700f5"},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":["standard_output"],"results":[],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","rendered":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","schemaVersion":"2022.8.16"}],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2"},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":["standard_output"],"results":["phonon_dos"],"name":"matdyn_grid","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","rendered":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"2232051b-9f2a-5a48-9b4d-6231eb6e8297","name":"Phonon Density of States","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"13bcafce-56ef-5b47-b079-317495eb6933","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_grid","results":[{"name":"phonon_dos"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"q2r","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"matdyn_grid","results":[{"name":"phonon_dos"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/phonon_dos_dispersion.json b/dist/js/runtime_data/subworkflows/espresso/phonon_dos_dispersion.json index 8dff0a51..4ccdfdb4 100644 --- a/dist/js/runtime_data/subworkflows/espresso/phonon_dos_dispersion.json +++ b/dist/js/runtime_data/subworkflows/espresso/phonon_dos_dispersion.json @@ -1 +1 @@ -{"_id":"291d25cd-378a-5be7-9d85-c8013a4b165b","name":"Phonon Density of States + Dispersions","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","phonon_dos","phonon_dispersions"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"13bcafce-56ef-5b47-b079-317495eb6933"},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":["standard_output"],"results":["phonon_dos"],"name":"ph_grid","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n ldisp = .true.\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"next":"3b4507a7-9244-540b-abe0-66bceab700f5"},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":["standard_output"],"results":[],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","rendered":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","schemaVersion":"2022.8.16"}],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2"},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":["standard_output"],"results":["phonon_dos"],"name":"matdyn_grid","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","rendered":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n","schemaVersion":"2022.8.16"}],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1"},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":["standard_output"],"results":["phonon_dispersions"],"name":"matdyn_path","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","rendered":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"291d25cd-378a-5be7-9d85-c8013a4b165b","name":"Phonon Density of States + Dispersions","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"13bcafce-56ef-5b47-b079-317495eb6933","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_grid","results":[{"name":"phonon_dos"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"q2r","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"matdyn_grid","results":[{"name":"phonon_dos"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"matdyn_path","results":[{"name":"phonon_dispersions"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/phonon_reduce.json b/dist/js/runtime_data/subworkflows/espresso/phonon_reduce.json index d8b66e69..355773d1 100644 --- a/dist/js/runtime_data/subworkflows/espresso/phonon_reduce.json +++ b/dist/js/runtime_data/subworkflows/espresso/phonon_reduce.json @@ -1 +1 @@ -{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","name":"reduce","application":{"name":"espresso"},"properties":["phonon_dos","phonon_dispersions"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"ph_grid_restart","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb206177-a4af-599a-81ba-6c88d24253b6","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid_restart.in"}],"monitors":["standard_output"],"results":[],"name":"ph_grid_restart","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid_restart.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n fildyn = 'dyn'\n nq1 = 1\n nq2 = 1\n nq3 = 1\n \n/\n","schemaVersion":"2022.8.16"}],"next":"3b4507a7-9244-540b-abe0-66bceab700f5"},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":["standard_output"],"results":[],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","rendered":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","schemaVersion":"2022.8.16"}],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2"},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":["standard_output"],"results":["phonon_dos"],"name":"matdyn_grid","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","rendered":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n nk1 = 3\n nk2 = 3\n nk3 = 3\n \n /\n","schemaVersion":"2022.8.16"}],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1"},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":["standard_output"],"results":["phonon_dispersions"],"name":"matdyn_path","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","rendered":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","name":"reduce","application":{"name":"espresso"},"properties":["phonon_dispersions","phonon_dos"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"ph_grid_restart","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb206177-a4af-599a-81ba-6c88d24253b6","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_grid_restart","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid_restart.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid_restart.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"q2r","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"matdyn_grid","results":[{"name":"phonon_dos"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"matdyn_path","results":[{"name":"phonon_dispersions"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/plot_wavefunction.json b/dist/js/runtime_data/subworkflows/espresso/plot_wavefunction.json index bc7d7480..c3020c8d 100644 --- a/dist/js/runtime_data/subworkflows/espresso/plot_wavefunction.json +++ b/dist/js/runtime_data/subworkflows/espresso/plot_wavefunction.json @@ -1 +1 @@ -{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","name":"Plot Wavefunction","application":{"name":"espresso"},"properties":["file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"plot WFN","head":true,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"57fca898-8e8b-5ef2-81a5-9d2b612bc18d","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"monitors":["standard_output"],"results":["file_content"],"name":"plot_wavefunction","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport json\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (Å)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"script.py","rendered":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport json\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (Å)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","name":"Plot Wavefunction","application":{"name":"espresso"},"properties":["file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"plot WFN","head":true,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"57fca898-8e8b-5ef2-81a5-9d2b612bc18d","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"plot_wavefunction","results":[{"name":"file_content"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/post_processor.json b/dist/js/runtime_data/subworkflows/espresso/post_processor.json index f6def150..109d2e7f 100644 --- a/dist/js/runtime_data/subworkflows/espresso/post_processor.json +++ b/dist/js/runtime_data/subworkflows/espresso/post_processor.json @@ -1 +1 @@ -{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","name":"post-processor","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_collect_dynmat.sh"}],"monitors":["standard_output"],"name":"espresso_collect_dynmat","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_collect_dynmat.sh","rendered":"\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","name":"post-processor","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"name":"espresso_collect_dynmat","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_collect_dynmat.sh"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_collect_dynmat.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/pre_processor.json b/dist/js/runtime_data/subworkflows/espresso/pre_processor.json index 63dcc5c9..3760c151 100644 --- a/dist/js/runtime_data/subworkflows/espresso/pre_processor.json +++ b/dist/js/runtime_data/subworkflows/espresso/pre_processor.json @@ -1 +1 @@ -{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","name":"pre-processor","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_link_outdir_save.sh"}],"monitors":["standard_output"],"name":"espresso_link_outdir_save","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_link_outdir_save.sh","rendered":"\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","name":"pre-processor","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"name":"espresso_link_outdir_save","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_link_outdir_save.sh"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_link_outdir_save.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/pw_scf.json b/dist/js/runtime_data/subworkflows/espresso/pw_scf.json index 83468158..1fb0580f 100644 --- a/dist/js/runtime_data/subworkflows/espresso/pw_scf.json +++ b/dist/js/runtime_data/subworkflows/espresso/pw_scf.json @@ -1 +1 @@ -{"_id":"f52b8039-83d0-5485-a1f1-0bc37cb01ed3","name":"pw-scf","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}]}]} +{"_id":"f52b8039-83d0-5485-a1f1-0bc37cb01ed3","name":"pw-scf","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/recalculate_bands.json b/dist/js/runtime_data/subworkflows/espresso/recalculate_bands.json index 59c777a9..11bb9b8d 100644 --- a/dist/js/runtime_data/subworkflows/espresso/recalculate_bands.json +++ b/dist/js/runtime_data/subworkflows/espresso/recalculate_bands.json @@ -1 +1 @@ -{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","name":"Recalculate Bands","application":{"name":"espresso"},"properties":["band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_bands","head":true,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":["standard_output"],"results":["band_structure"],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","rendered":"&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS crystal_b\n11\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"}],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2"},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":["standard_output"],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","rendered":"&BANDS\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n filband = '{{ JOB_WORK_DIR }}/bands.dat'\n no_overlap = .true.\n/\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","name":"Recalculate Bands","application":{"name":"espresso"},"properties":["band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_bands","head":true,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/surface_energy.json b/dist/js/runtime_data/subworkflows/espresso/surface_energy.json index 984271f6..aaf73221 100644 --- a/dist/js/runtime_data/subworkflows/espresso/surface_energy.json +++ b/dist/js/runtime_data/subworkflows/espresso/surface_energy.json @@ -1 +1 @@ -{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","name":"Surface Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"name":"io-slab","type":"io","subtype":"input","head":true,"results":[],"monitors":[],"flowchartId":"e463ef46-a36e-5168-87dd-e21eb980dfb8","preProcessors":[],"postProcessors":[],"source":"api","input":[{"endpoint":"materials","endpoint_options":{"params":{"query":"{'_id': MATERIAL_ID}","projection":"{}"}},"name":"DATA"}],"next":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"slab","type":"assignment","operand":"SLAB","value":"DATA[0]","input":[{"name":"DATA","scope":"e463ef46-a36e-5168-87dd-e21eb980dfb8"}],"head":false,"results":[],"monitors":[],"flowchartId":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","preProcessors":[],"postProcessors":[],"next":"44263820-0c80-5bd1-b854-9da8d198eac1","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"io-bulk","type":"io","subtype":"input","head":false,"results":[],"monitors":[],"flowchartId":"44263820-0c80-5bd1-b854-9da8d198eac1","preProcessors":[],"postProcessors":[],"source":"api","input":[{"endpoint":"materials","endpoint_options":{"params":{"query":"{'_id': SLAB.metadata.bulkId}","projection":"{}"}},"name":"DATA"}],"next":"b70656f1-a394-57f4-b4de-00096969df4b","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"bulk","type":"assignment","operand":"BULK","value":"DATA[0] if DATA else None","input":[{"name":"DATA","scope":"44263820-0c80-5bd1-b854-9da8d198eac1"}],"head":false,"results":[],"monitors":[],"flowchartId":"b70656f1-a394-57f4-b4de-00096969df4b","preProcessors":[],"postProcessors":[],"next":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"assert-bulk","type":"assertion","statement":"BULK != None","errorMessage":"Bulk material does not exist!","head":false,"results":[],"monitors":[],"flowchartId":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","preProcessors":[],"postProcessors":[],"next":"490635e0-c593-5809-9eb2-c794b96cfed1","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"io-e-bulk","type":"io","subtype":"input","head":false,"results":[],"monitors":[],"flowchartId":"490635e0-c593-5809-9eb2-c794b96cfed1","preProcessors":[],"postProcessors":[],"source":"api","input":[{"endpoint":"refined-properties","endpoint_options":{"params":{"query":"{ 'exabyteId': BULK.exabyteId, 'data.name': 'total_energy', 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} }","projection":"{'sort': {'precision.value': -1}, 'limit': 1}"}},"name":"DATA"}],"next":"bbe13b97-4243-5a85-8f61-a279d0b797aa","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"e-bulk","type":"assignment","operand":"E_BULK","value":"DATA[0].data.value if DATA else None","input":[{"name":"DATA","scope":"490635e0-c593-5809-9eb2-c794b96cfed1"}],"head":false,"results":[],"monitors":[],"flowchartId":"bbe13b97-4243-5a85-8f61-a279d0b797aa","preProcessors":[],"postProcessors":[],"next":"a06c9f43-7670-5fd0-ac42-7028a472235a","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"assert-e-bulk","type":"assertion","statement":"E_BULK != None","errorMessage":"E_BULK does not exist!","head":false,"results":[],"monitors":[],"flowchartId":"a06c9f43-7670-5fd0-ac42-7028a472235a","preProcessors":[],"postProcessors":[],"next":"cdf210be-26ed-585a-b4ac-d55795ba2975","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"surface","type":"assignment","operand":"A","value":"np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))","input":[],"head":false,"results":[],"monitors":[],"flowchartId":"cdf210be-26ed-585a-b4ac-d55795ba2975","preProcessors":[],"postProcessors":[],"next":"ffa8e43d-096a-555b-b8d0-6d283365ef47","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"n-bulk","type":"assignment","operand":"N_BULK","value":"len(BULK.basis.elements)","input":[],"head":false,"results":[],"monitors":[],"flowchartId":"ffa8e43d-096a-555b-b8d0-6d283365ef47","preProcessors":[],"postProcessors":[],"next":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"n-slab","type":"assignment","operand":"N_SLAB","value":"len(SLAB.basis.elements)","input":[],"head":false,"results":[],"monitors":[],"flowchartId":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","preProcessors":[],"postProcessors":[],"next":"9fc7a088-5533-5f70-bb33-f676ec65f565","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"fcd88119-817c-5ac1-a430-ba892ac743eb"},{"name":"e-slab","type":"assignment","operand":"E_SLAB","value":"total_energy","input":[{"name":"total_energy","scope":"9fc7a088-5533-5f70-bb33-f676ec65f565"}],"head":false,"results":[],"monitors":[],"flowchartId":"fcd88119-817c-5ac1-a430-ba892ac743eb","preProcessors":[],"postProcessors":[],"next":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"name":"surface-energy","type":"assignment","operand":"SURFACE_ENERGY","value":"1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))","input":[],"head":false,"results":[{"name":"surface_energy"}],"monitors":[],"flowchartId":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]}]} +{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","name":"Surface Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/total_energy.json b/dist/js/runtime_data/subworkflows/espresso/total_energy.json index a4450413..dba79add 100644 --- a/dist/js/runtime_data/subworkflows/espresso/total_energy.json +++ b/dist/js/runtime_data/subworkflows/espresso/total_energy.json @@ -1 +1 @@ -{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","name":"Total Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}]}],"tags":["default"]} +{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","name":"Total Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false,"tags":["default"]} diff --git a/dist/js/runtime_data/subworkflows/espresso/valence_band_offset_calc_from_previous_esp_vbm.json b/dist/js/runtime_data/subworkflows/espresso/valence_band_offset_calc_from_previous_esp_vbm.json index 6d7ac9c7..747a6824 100644 --- a/dist/js/runtime_data/subworkflows/espresso/valence_band_offset_calc_from_previous_esp_vbm.json +++ b/dist/js/runtime_data/subworkflows/espresso/valence_band_offset_calc_from_previous_esp_vbm.json @@ -1 +1 @@ -{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","name":"Calculate VBO","application":{"name":"espresso"},"properties":["valence_band_offset"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Difference of valence band maxima","type":"assignment","operand":"VBM_DIFF","value":"VBM_LEFT - VBM_RIGHT","input":[],"status":"idle","statusTrack":[],"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","tags":[],"head":true,"next":"2626f7bb-d392-5fd4-ab71-329b508de347","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Difference of macroscopically averaged ESP in bulk","type":"assignment","operand":"AVG_ESP_DIFF","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]","input":[],"status":"idle","statusTrack":[],"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","tags":[],"head":false,"next":"b7307787-53e2-599b-ad12-d627b04074b4","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Lineup of macroscopically averaged ESP in interface","type":"assignment","operand":"ESP_LINEUP","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])","input":[],"status":"idle","statusTrack":[],"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","tags":[],"head":false,"next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Valence Band Offset","type":"assignment","operand":"VALENCE_BAND_OFFSET","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))","input":[],"results":[{"name":"valence_band_offset"}],"status":"idle","statusTrack":[],"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]} +{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","name":"Calculate VBO","application":{"name":"espresso"},"properties":["valence_band_offset"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Difference of valence band maxima","type":"assignment","operand":"VBM_DIFF","value":"VBM_LEFT - VBM_RIGHT","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","head":true,"next":"2626f7bb-d392-5fd4-ab71-329b508de347","schemaVersion":"2022.8.16","isDefault":false},{"name":"Difference of macroscopically averaged ESP in bulk","type":"assignment","operand":"AVG_ESP_DIFF","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","head":false,"next":"b7307787-53e2-599b-ad12-d627b04074b4","schemaVersion":"2022.8.16","isDefault":false},{"name":"Lineup of macroscopically averaged ESP in interface","type":"assignment","operand":"ESP_LINEUP","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","head":false,"next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","schemaVersion":"2022.8.16","isDefault":false},{"name":"Valence Band Offset","type":"assignment","operand":"VALENCE_BAND_OFFSET","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))","input":[],"results":[{"name":"valence_band_offset"}],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/variable_cell_relaxation.json b/dist/js/runtime_data/subworkflows/espresso/variable_cell_relaxation.json index 754788d3..b8ed9a46 100644 --- a/dist/js/runtime_data/subworkflows/espresso/variable_cell_relaxation.json +++ b/dist/js/runtime_data/subworkflows/espresso/variable_cell_relaxation.json @@ -1 +1 @@ -{"systemName":"espresso-variable-cell-relaxation","_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","name":"Variable-cell Relaxation","application":{"name":"espresso"},"properties":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_vc-relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"monitors":["standard_output","convergence_electronic","convergence_ionic"],"results":["total_energy","fermi_energy","pressure","atomic_forces","total_force","stress_tensor","final_structure"],"name":"pw_vc-relax","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","rendered":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}]}],"tags":["variable-cell_relaxation"]} +{"systemName":"espresso-variable-cell-relaxation","_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","name":"Variable-cell Relaxation","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_vc-relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_vc-relax","results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false,"tags":["variable-cell_relaxation"]} diff --git a/dist/js/runtime_data/subworkflows/espresso/wavefunction_amplitude.json b/dist/js/runtime_data/subworkflows/espresso/wavefunction_amplitude.json index 6b94b608..aa17c8c3 100644 --- a/dist/js/runtime_data/subworkflows/espresso/wavefunction_amplitude.json +++ b/dist/js/runtime_data/subworkflows/espresso/wavefunction_amplitude.json @@ -1 +1 @@ -{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","name":"Wavefunction Amplitude","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"pw-scf","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"18a26058-7d37-57ac-a685-335862dbf4db"},{"name":"assignment BS","type":"assignment","operand":"band_structure","value":"band_structure","input":[{"name":"band_structure","scope":"pw-scf"}],"status":"idle","statusTrack":[],"flowchartId":"18a26058-7d37-57ac-a685-335862dbf4db","tags":[],"head":false,"next":"7d103bf9-40b8-5f90-8934-bbcb6c7b9802","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"assignment FE","type":"assignment","operand":"fermi_energy","value":"fermi_energy","input":[{"name":"fermi_energy","scope":"pw-scf"}],"status":"idle","statusTrack":[],"flowchartId":"7d103bf9-40b8-5f90-8934-bbcb6c7b9802","tags":[],"head":false,"next":"extract-band-energies","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Extract Band Energies","type":"assignment","operand":"band_energies","value":"[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]","input":[],"flowchartId":"extract-band-energies","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"indices-below-fermi","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Find Indices Below Fermi","type":"assignment","operand":"indices_below_fermi","value":"[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]","input":[],"flowchartId":"indices-below-fermi","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"indices-above-fermi","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Find Indices Above Fermi","type":"assignment","operand":"indices_above_fermi","value":"[i for i in range(len(band_energies)) if band_energies[i] > fermi_energy]","input":[],"flowchartId":"indices-above-fermi","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"8771dc7f-878e-5f13-a840-a3a416854f1e","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Store Band Below EF","type":"assignment","operand":"KBAND_VALUE_BELOW_EF","value":"indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1","input":[],"status":"idle","statusTrack":[],"flowchartId":"8771dc7f-878e-5f13-a840-a3a416854f1e","tags":[],"head":false,"next":"91e1328f-39dd-5c24-83f9-d49bfe5c620e","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Store Band Above EF","type":"assignment","operand":"KBAND_VALUE_ABOVE_EF","value":"indices_above_fermi[0] + 1 if len(indices_above_fermi) > 0 else len(band_energies)","input":[],"status":"idle","statusTrack":[],"flowchartId":"91e1328f-39dd-5c24-83f9-d49bfe5c620e","tags":[],"head":false,"next":"9fa08d2e-0ffd-5c12-8a88-086922fb3f72","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Store Valence Energy","type":"assignment","operand":"VALENCE_ENERGY","value":"band_energies[indices_below_fermi[-1]] if len(indices_below_fermi) > 0 else (band_energies[0] if len(band_energies) > 0 else 0.0)","input":[],"status":"idle","statusTrack":[],"flowchartId":"9fa08d2e-0ffd-5c12-8a88-086922fb3f72","tags":[],"head":false,"next":"f5fbd236-2453-5ecd-aaf5-49940c45888c","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Store Conduction Energy","type":"assignment","operand":"CONDUCTION_ENERGY","value":"band_energies[indices_above_fermi[0]] if len(indices_above_fermi) > 0 else (band_energies[-1] if len(band_energies) > 0 else 0.0)","input":[],"status":"idle","statusTrack":[],"flowchartId":"f5fbd236-2453-5ecd-aaf5-49940c45888c","tags":[],"head":false,"next":"fff25fab-985b-50c6-8b4c-db7f7adb29a8","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Store Total Bands","type":"assignment","operand":"TOTAL_BANDS","value":"len(band_energies)","input":[],"status":"idle","statusTrack":[],"flowchartId":"fff25fab-985b-50c6-8b4c-db7f7adb29a8","tags":[],"head":false,"next":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"name":"Select Band","type":"assignment","operand":"KBAND_VALUE","value":"KBAND_VALUE_BELOW_EF","input":[],"status":"idle","statusTrack":[],"flowchartId":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","tags":[],"head":false,"next":"pp-wfn","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"}},{"type":"execution","name":"pp_wfn","head":false,"results":[{"name":"wavefunction_amplitude"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pp-wfn","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"monitors":["standard_output"],"results":["wavefunction_amplitude"],"name":"pp_wfn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = 1.0\n nx = 200\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_wfn.in","rendered":"&INPUTPP\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {{ KBAND_VALUE | default(1) }}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = 1.0\n nx = 200\n/\n","schemaVersion":"2022.8.16"}]}],"tags":["wfn","wfn_plot"]} +{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","name":"Wavefunction Amplitude","application":{"name":"espresso"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"band_structure"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"pw-scf","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"extract-band-energies","schemaVersion":"2022.8.16","isDefault":false},{"name":"Extract Band Energies","type":"assignment","operand":"band_energies","value":"[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]","input":[{"name":"band_structure","scope":"pw-scf"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"extract-band-energies","head":false,"next":"indices-below-fermi","schemaVersion":"2022.8.16","isDefault":false},{"name":"Find Indices Below Fermi","type":"assignment","operand":"indices_below_fermi","value":"[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]","input":[{"name":"fermi_energy","scope":"pw-scf"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"indices-below-fermi","head":false,"next":"8771dc7f-878e-5f13-a840-a3a416854f1e","schemaVersion":"2022.8.16","isDefault":false},{"name":"Store Band Below EF","type":"assignment","operand":"KBAND_VALUE_BELOW_EF","value":"indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8771dc7f-878e-5f13-a840-a3a416854f1e","head":false,"next":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select Band","type":"assignment","operand":"KBAND_VALUE","value":"KBAND_VALUE_BELOW_EF","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","head":false,"next":"pp-wfn","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pp_wfn","head":false,"results":[{"name":"wavefunction_amplitude"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pp-wfn","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"pp_wfn","results":[{"name":"wavefunction_amplitude"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_wfn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false,"tags":["wfn","wfn_plot"]} diff --git a/dist/js/runtime_data/subworkflows/espresso/zero_point_energy.json b/dist/js/runtime_data/subworkflows/espresso/zero_point_energy.json index e5e885fd..b34d5b24 100644 --- a/dist/js/runtime_data/subworkflows/espresso/zero_point_energy.json +++ b/dist/js/runtime_data/subworkflows/espresso/zero_point_energy.json @@ -1 +1 @@ -{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","name":"Zero Point Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["remove_non_zero_weight_kpoints"],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"name":"pw_scf","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{{ input.ATOMIC_SPECIES }}\nATOMIC_POSITIONS crystal\n{{ input.ATOMIC_POSITIONS }}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","rendered":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n wfcdir = '{{ JOB_WORK_DIR }}/outdir'\n prefix = '__prefix__'\n pseudo_dir = '{{ JOB_WORK_DIR }}/pseudo'\n/\n&SYSTEM\n ibrav = 0\n nat = 2\n ntyp = 1\n ecutwfc = 40\n ecutrho = 200\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\nSi 28.0855 \nATOMIC_POSITIONS crystal\nSi 0.000000000 0.000000000 0.000000000 \nSi 0.250000000 0.250000000 0.250000000 \nCELL_PARAMETERS angstrom\n3.348920236 0.000000000 1.933500000\n1.116306745 3.157392278 1.933500000\n0.000000000 0.000000000 3.867000000\nK_POINTS automatic\n2 2 2 0 0 0 \n","schemaVersion":"2022.8.16"}],"next":"107595d1-490f-53a2-8432-7f8a12f14d96"},{"type":"execution","name":"ph_zpe","head":false,"results":[{"name":"zero_point_energy"}],"monitors":[{"name":"standard_output"}],"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","preProcessors":[],"postProcessors":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"monitors":["standard_output"],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"monitors":["standard_output"],"results":["zero_point_energy"],"name":"ph_gamma","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","rendered":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = '{{ JOB_WORK_DIR }}/outdir'\n/\n0 0 0\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","name":"Zero Point Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"107595d1-490f-53a2-8432-7f8a12f14d96","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_zpe","head":false,"results":[{"name":"zero_point_energy"}],"monitors":[{"name":"standard_output"}],"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_gamma","results":[{"name":"zero_point_energy"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/nwchem/total_energy.json b/dist/js/runtime_data/subworkflows/nwchem/total_energy.json index 0d553d34..dde54548 100644 --- a/dist/js/runtime_data/subworkflows/nwchem/total_energy.json +++ b/dist/js/runtime_data/subworkflows/nwchem/total_energy.json @@ -1 +1 @@ -{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","name":"Total Energy","application":{"name":"nwchem"},"properties":["total_energy","total_energy_contributions"],"model":{"type":"dft","subtype":"gga","method":{"type":"localorbital","subtype":"pople","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"nwchem_total_energy","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","preProcessors":[],"postProcessors":[],"application":{"name":"nwchem","shortName":"nwchem","summary":"NWChem","build":"GNU","isDefault":true,"version":"7.0.2","schemaVersion":"2022.8.16"},"executable":{"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":["standard_output"],"postProcessors":["error_handler"],"name":"nwchem","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":["standard_output"],"results":["total_energy","total_energy_contributions"],"name":"nwchem_total_energy","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","rendered":" start nwchem\n title \"Test\"\n charge 0\n geometry units au noautosym\n Si 0.000000000 0.000000000 0.000000000 \nSi 1.116306745 0.789348070 1.933500000 \n end\n basis\n * library 6-31G\n end\n dft\n xc B3LYP\n mult 1\n end\n task dft energy\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","name":"Total Energy","application":{"name":"nwchem"},"properties":["total_energy","total_energy_contributions"],"model":{"type":"dft","subtype":"gga","method":{"type":"localorbital","subtype":"pople","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"nwchem_total_energy","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"nwchem","shortName":"nwchem","summary":"NWChem","build":"GNU","isDefault":true,"version":"7.0.2","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"}],"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem","schemaVersion":"2022.8.16"},"flavor":{"name":"nwchem_total_energy","results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"preProcessors":[],"postProcessors":[],"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/python/ml/classification_tail.json b/dist/js/runtime_data/subworkflows/python/ml/classification_tail.json index 62528691..2b5ddd9c 100644 --- a/dist/js/runtime_data/subworkflows/python/ml/classification_tail.json +++ b/dist/js/runtime_data/subworkflows/python/ml/classification_tail.json @@ -1 +1 @@ -{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["workflow:pyml_predict","file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"enableRender":true,"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3"},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"7fff5212-6c6d-586b-9997-4d4485e09383"},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02"},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a"},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["workflow:pyml_predict"],"name":"pyml:model:random_forest_classification:sklearn","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"35436b4a-cd9c-5089-ab42-665c4f9ba049"},{"type":"execution","name":"ROC Curve Plot","head":false,"results":[{"basename":"my_roc_plot.png","filetype":"image","name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["file_content"],"name":"pyml:post_processing:roc_curve:sklearn","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:setup_variables_packages","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:read_csv:pandas","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:train_test_split:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:pre_processing:standardization:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:model:random_forest_classification:sklearn","results":[{"name":"workflow:pyml_predict"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ROC Curve Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:post_processing:roc_curve:sklearn","results":[{"name":"file_content"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/python/ml/clustering_tail.json b/dist/js/runtime_data/subworkflows/python/ml/clustering_tail.json index 8d5f3a1e..5ac9392a 100644 --- a/dist/js/runtime_data/subworkflows/python/ml/clustering_tail.json +++ b/dist/js/runtime_data/subworkflows/python/ml/clustering_tail.json @@ -1 +1 @@ -{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["workflow:pyml_predict","file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"enableRender":true,"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3"},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"7fff5212-6c6d-586b-9997-4d4485e09383"},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02"},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a"},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_k_means_clustering_sklearn.py","templateName":"model_k_means_clustering_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["workflow:pyml_predict"],"name":"pyml:model:k_means_clustering:sklearn","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_k_means_clustering_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"9c95c27b-c8bd-5e8b-8829-d354611decef"},{"type":"execution","name":"2D PCA Clusters Plot","head":false,"results":[{"basename":"train_test_split.png","filetype":"image","name":"file_content"},{"basename":"train_clusters.png","filetype":"image","name":"file_content"},{"basename":"test_clusters.png","filetype":"image","name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9c95c27b-c8bd-5e8b-8829-d354611decef","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_pca_2d_clusters_matplotlib.py","templateName":"post_processing_pca_2d_clusters_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["file_content"],"name":"pyml:post_processing:pca_2d_clusters:matplotlib","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_pca_2d_clusters_matplotlib.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:setup_variables_packages","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:read_csv:pandas","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:train_test_split:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:pre_processing:standardization:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:model:k_means_clustering:sklearn","results":[{"name":"workflow:pyml_predict"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"model_k_means_clustering_sklearn.py","templateName":"model_k_means_clustering_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_k_means_clustering_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"9c95c27b-c8bd-5e8b-8829-d354611decef","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"2D PCA Clusters Plot","head":false,"results":[{"name":"file_content"},{"name":"file_content"},{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9c95c27b-c8bd-5e8b-8829-d354611decef","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:post_processing:pca_2d_clusters:matplotlib","results":[{"name":"file_content"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_pca_2d_clusters_matplotlib.py","templateName":"post_processing_pca_2d_clusters_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_pca_2d_clusters_matplotlib.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/python/ml/regression_tail.json b/dist/js/runtime_data/subworkflows/python/ml/regression_tail.json index a5acb4b4..efde1638 100644 --- a/dist/js/runtime_data/subworkflows/python/ml/regression_tail.json +++ b/dist/js/runtime_data/subworkflows/python/ml/regression_tail.json @@ -1 +1 @@ -{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["workflow:pyml_predict","file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"enableRender":true,"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"target\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"regression\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {{IS_WORKFLOW_RUNNING_TO_PREDICT}}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{{DATASET_BASENAME}}\"\nelse:\n datafile = \"{{DATASET_BASENAME}}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{{ CONTEXT_DIR_RELATIVE_PATH }}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3"},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"7fff5212-6c6d-586b-9997-4d4485e09383"},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = 0.2\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02"},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a"},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["workflow:pyml_predict"],"name":"pyml:model:multilayer_perceptron:sklearn","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","rendered":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}],"next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c"},{"type":"execution","name":"Parity Plot","head":false,"results":[{"basename":"my_parity_plot.png","filetype":"image","name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":["standard_output"],"results":["file_content"],"name":"pyml:post_processing:parity_plot:matplotlib","schemaVersion":"2022.8.16","isDefault":false},"tags":["remove-all-results"],"status":"idle","statusTrack":[],"input":[{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","rendered":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:setup_variables_packages","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:read_csv:pandas","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:train_test_split:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:pre_processing:standardization:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:model:multilayer_perceptron:sklearn","results":[{"name":"workflow:pyml_predict"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Parity Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:post_processing:parity_plot:matplotlib","results":[{"name":"file_content"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/python/ml/train_head.json b/dist/js/runtime_data/subworkflows/python/ml/train_head.json index 2afcb1e6..fbacbbf7 100644 --- a/dist/js/runtime_data/subworkflows/python/ml/train_head.json +++ b/dist/js/runtime_data/subworkflows/python/ml/train_head.json @@ -1 +1 @@ -{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"flowchartId":"head-set-predict-status","tags":["pyml:workflow-type-setter"],"status":"idle","statusTrack":[],"head":true,"next":"head-fetch-training-data","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Fetch Dataset","type":"io","subtype":"input","enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"head-branch-on-predict-status","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"results":[],"preProcessors":[],"postProcessors":[],"then":"head-fetch-trained-model","else":"end-of-ml-train-head","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"flowchartId":"head-branch-on-predict-status","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"head-fetch-trained-model","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","tags":["set-io-unit-filenames"],"status":"idle","statusTrack":[],"head":false,"next":"end-of-ml-train-head","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"flowchartId":"end-of-ml-train-head","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"}}]} +{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"flowchartId":"head-set-predict-status","head":true,"next":"head-fetch-training-data","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Dataset","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"type":"object_storage","basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"head-branch-on-predict-status","schemaVersion":"2022.8.16","isDefault":false},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","then":"head-fetch-trained-model","head":false,"next":"head-fetch-trained-model","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["set-io-unit-filenames"],"enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"type":"object_storage","basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"end-of-ml-train-head","schemaVersion":"2022.8.16","isDefault":false},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"end-of-ml-train-head","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/python/python_script.json b/dist/js/runtime_data/subworkflows/python/python_script.json index be1de56e..a84a785b 100644 --- a/dist/js/runtime_data/subworkflows/python/python_script.json +++ b/dist/js/runtime_data/subworkflows/python/python_script.json @@ -1 +1 @@ -{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","name":"Python Script","application":{"name":"python"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"python","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","preProcessors":[],"postProcessors":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":["standard_output"],"name":"hello_world","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","rendered":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","schemaVersion":"2022.8.16"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","rendered":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","name":"Python Script","application":{"name":"python"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"python","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"hello_world","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/shell/batch_espresso_pwscf.json b/dist/js/runtime_data/subworkflows/shell/batch_espresso_pwscf.json index 3d0571b6..3bda27b7 100644 --- a/dist/js/runtime_data/subworkflows/shell/batch_espresso_pwscf.json +++ b/dist/js/runtime_data/subworkflows/shell/batch_espresso_pwscf.json @@ -1 +1 @@ -{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","name":"Shell Batch Job (Espresso PWSCF)","application":{"name":"shell"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"monitors":["standard_output"],"name":"job_espresso_pw_scf","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","rendered":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","name":"Shell Batch Job (Espresso PWSCF)","application":{"name":"shell"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"name":"job_espresso_pw_scf","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/shell/hello_world.json b/dist/js/runtime_data/subworkflows/shell/hello_world.json index 9e0e6b3e..2bea5331 100644 --- a/dist/js/runtime_data/subworkflows/shell/hello_world.json +++ b/dist/js/runtime_data/subworkflows/shell/hello_world.json @@ -1 +1 @@ -{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","name":"Shell Hello World","application":{"name":"shell"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":["standard_output"],"name":"hello_world","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","rendered":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","name":"Shell Hello World","application":{"name":"shell"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"name":"hello_world","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/vasp/band_gap.json b/dist/js/runtime_data/subworkflows/vasp/band_gap.json index 61fd8e8c..176f96bf 100644 --- a/dist/js/runtime_data/subworkflows/vasp/band_gap.json +++ b/dist/js/runtime_data/subworkflows/vasp/band_gap.json @@ -1 +1 @@ -{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","name":"Band Gap","application":{"name":"vasp"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_gaps","fermi_energy"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"f0d65517-9592-5bc8-948e-a0851a766cbb"},{"type":"execution","name":"vasp_nscf","head":false,"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":["standard_output","convergence_electronic"],"results":["band_gaps","fermi_energy"],"name":"vasp_nscf","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","name":"Band Gap","application":{"name":"vasp"},"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"f0d65517-9592-5bc8-948e-a0851a766cbb","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_nscf","head":false,"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_nscf","results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/vasp/band_structure.json b/dist/js/runtime_data/subworkflows/vasp/band_structure.json index b8bb8081..4f4ddb26 100644 --- a/dist/js/runtime_data/subworkflows/vasp/band_structure.json +++ b/dist/js/runtime_data/subworkflows/vasp/band_structure.json @@ -1 +1 @@ -{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","name":"Band Structure","application":{"name":"vasp"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108"},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":["standard_output","convergence_electronic"],"results":["band_structure"],"name":"vasp_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","name":"Band Structure","application":{"name":"vasp"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/vasp/band_structure_dos.json b/dist/js/runtime_data/subworkflows/vasp/band_structure_dos.json index a51aa5e1..4d497590 100644 --- a/dist/js/runtime_data/subworkflows/vasp/band_structure_dos.json +++ b/dist/js/runtime_data/subworkflows/vasp/band_structure_dos.json @@ -1 +1 @@ -{"_id":"d38fea11-9781-5151-8dae-d705381498be","name":"Band Structure + Density of States","application":{"name":"vasp"},"properties":["density_of_states","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108"},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":["standard_output","convergence_electronic"],"results":["band_structure"],"name":"vasp_bands","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"kpoints path\n11\nreciprocal\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.000000000 0.500000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.375000000 0.375000000 0.750000000 10\n 0.000000000 0.000000000 0.000000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.250000000 0.750000000 10\n 0.500000000 0.500000000 0.500000000 10\n 0.625000000 0.250000000 0.625000000 10\n 0.500000000 0.000000000 0.500000000 10\n\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"d38fea11-9781-5151-8dae-d705381498be","name":"Band Structure + Density of States","application":{"name":"vasp"},"properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/vasp/dos.json b/dist/js/runtime_data/subworkflows/vasp/dos.json index 98b92b3d..34caaa72 100644 --- a/dist/js/runtime_data/subworkflows/vasp/dos.json +++ b/dist/js/runtime_data/subworkflows/vasp/dos.json @@ -1 +1 @@ -{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","name":"Density of States","application":{"name":"vasp"},"properties":["density_of_states","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","name":"Density of States","application":{"name":"vasp"},"properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/vasp/fixed_cell_relaxation.json b/dist/js/runtime_data/subworkflows/vasp/fixed_cell_relaxation.json index 0d2d5b77..dfb9223b 100644 --- a/dist/js/runtime_data/subworkflows/vasp/fixed_cell_relaxation.json +++ b/dist/js/runtime_data/subworkflows/vasp/fixed_cell_relaxation.json @@ -1 +1 @@ -{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","name":"Fixed-cell Relaxation","application":{"name":"vasp"},"properties":["total_energy","atomic_forces","fermi_energy","pressure","stress_tensor","total_force","final_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp_relax","head":true,"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":["standard_output","convergence_electronic","convergence_ionic"],"postProcessors":["prepare_restart"],"results":["total_energy","atomic_forces","fermi_energy","pressure","stress_tensor","total_force","final_structure"],"name":"vasp_relax","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]} +{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","name":"Fixed-cell Relaxation","application":{"name":"vasp"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_relax","head":true,"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_relax","results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/vasp/initial_final_total_energies.json b/dist/js/runtime_data/subworkflows/vasp/initial_final_total_energies.json index fc203eab..4541d417 100644 --- a/dist/js/runtime_data/subworkflows/vasp/initial_final_total_energies.json +++ b/dist/js/runtime_data/subworkflows/vasp/initial_final_total_energies.json @@ -1 +1 @@ -{"isMultiMaterial":true,"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","name":"Initial/Final Total Energies","application":{"name":"vasp"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor","total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp_neb_initial","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp_neb_initial","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"e65a17ce-10c8-5710-ad4d-fb3d42434091"},{"type":"execution","name":"vasp_neb_final","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp_neb_final","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}]}]} +{"isMultiMaterial":true,"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","name":"Initial/Final Total Energies","application":{"name":"vasp"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_neb_initial","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_neb_initial","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"e65a17ce-10c8-5710-ad4d-fb3d42434091","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_neb_final","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_neb_final","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"compute":{"ppn":1,"nodes":1,"queue":"D","timeLimit":"01:00:00","notify":"n","cluster":{"fqdn":""},"timeLimitType":"per single attempt","isRestartable":true,"arguments":{"nimage":1,"npools":1,"nband":1,"ntg":1,"ndiag":1}},"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/vasp/kpoint_convergence.json b/dist/js/runtime_data/subworkflows/vasp/kpoint_convergence.json index 45e88c93..7c22c2a3 100644 --- a/dist/js/runtime_data/subworkflows/vasp/kpoint_convergence.json +++ b/dist/js/runtime_data/subworkflows/vasp/kpoint_convergence.json @@ -1 +1 @@ -{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","name":"K-point Convergence","application":{"name":"vasp"},"properties":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"flowchartId":"init-tolerance","status":"idle","statusTrack":[],"tags":[],"head":true,"next":"init-increment","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"flowchartId":"init-increment","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"init-result","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"flowchartId":"init-result","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"init-parameter","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"flowchartId":"init-parameter","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"vasp-kpoint-convergence","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"type":"execution","name":"vasp_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"vasp-kpoint-convergence","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":["standard_output","convergence_electronic"],"results":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"name":"vasp_kpt_conv","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic Mesh\n0\nGamma\n{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}\n0 0 0\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","rendered":"Silicon FCC\n1.0\n 3.348920000\t 0.000000000\t 1.933500000\n 1.116307000\t 3.157392000\t 1.933500000\n 0.000000000\t 0.000000000\t 3.867000000\nSi\n2\ndirect\n 0.000000000 0.000000000 0.000000000 Si\n 0.250000000 0.250000000 0.250000000 Si\n","schemaVersion":"2022.8.16"}],"next":"store-result"},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"flowchartId":"store-result","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"check-convergence","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"check convergence","type":"condition","input":[],"results":[],"preProcessors":[],"postProcessors":[],"then":"convergence-is-reached","else":"update-result","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"flowchartId":"check-convergence","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"update-result","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"flowchartId":"update-result","status":"idle","statusTrack":[],"tags":[],"head":false,"next":"increment-parameter","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"flowchartId":"increment-parameter","next":"vasp-kpoint-convergence","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"flowchartId":"convergence-is-reached","status":"idle","statusTrack":[],"tags":[],"head":false,"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"}}]} +{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","name":"K-point Convergence","application":{"name":"vasp"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-tolerance","head":true,"next":"init-increment","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-increment","head":false,"next":"init-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-result","head":false,"next":"init-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-parameter","head":false,"next":"vasp-kpoint-convergence","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"vasp-kpoint-convergence","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_kpt_conv","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"store-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"store-result","head":false,"next":"check-convergence","schemaVersion":"2022.8.16","isDefault":false},{"name":"check convergence","type":"condition","input":[],"statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"check-convergence","then":"convergence-is-reached","else":"update-result","head":false,"next":"update-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"update-result","head":false,"next":"increment-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"increment-parameter","next":"vasp-kpoint-convergence","head":false,"schemaVersion":"2022.8.16","isDefault":false},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"convergence-is-reached","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/vasp/neb_subworkflow.json b/dist/js/runtime_data/subworkflows/vasp/neb_subworkflow.json index 9714663b..ce9648cd 100644 --- a/dist/js/runtime_data/subworkflows/vasp/neb_subworkflow.json +++ b/dist/js/runtime_data/subworkflows/vasp/neb_subworkflow.json @@ -1 +1 @@ -{"isMultiMaterial":true,"_id":"e6215fb9-e60c-541b-b73e-b077d64b3a95","name":"Nudged Elastic Band (NEB)","application":{"name":"vasp"},"properties":["reaction_energy_barrier","reaction_energy_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp_neb","head":true,"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9a1660ab-8067-5fad-9fb8-7c039f634636","preProcessors":[],"postProcessors":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output","convergence_ionic","convergence_electronic"],"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB"},{"name":"KPOINTS","templateName":"KPOINTS"}],"monitors":["standard_output"],"results":["reaction_energy_barrier","reaction_energy_profile"],"name":"vasp_neb","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISTART = 0\nIBRION = 1\nEDIFFG = -0.001\nENCUT = 500\nNELM = 100\nNSW = 100\nIMAGES = {{ input.INTERMEDIATE_IMAGES.length or neb.nImages }}\nSPRING = -5\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISTART = 0\nIBRION = 1\nEDIFFG = -0.001\nENCUT = 500\nNELM = 100\nNSW = 100\nIMAGES = 1\nSPRING = -5\nISPIN = 2\n","schemaVersion":"2022.8.16"},{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","rendered":"Automatic mesh\n0\nGamma\n 2 2 2 \n 0 0 0 \n","schemaVersion":"2022.8.16"}]}]} +{"isMultiMaterial":true,"_id":"e6215fb9-e60c-541b-b73e-b077d64b3a95","name":"Nudged Elastic Band (NEB)","application":{"name":"vasp"},"properties":["reaction_energy_barrier","reaction_energy_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_neb","head":true,"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9a1660ab-8067-5fad-9fb8-7c039f634636","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_neb","results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB"},{"name":"KPOINTS","templateName":"KPOINTS"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nIBRION = 1\nEDIFFG = -0.001\nENCUT = 500\nNELM = 100\nNSW = 100\nIMAGES = {{ input.INTERMEDIATE_IMAGES.length or neb.nImages }}\nSPRING = -5\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/vasp/prepare_images.json b/dist/js/runtime_data/subworkflows/vasp/prepare_images.json index 88d7bf83..d9fa8dab 100644 --- a/dist/js/runtime_data/subworkflows/vasp/prepare_images.json +++ b/dist/js/runtime_data/subworkflows/vasp/prepare_images.json @@ -1 +1 @@ -{"isMultiMaterial":true,"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","name":"Prepare Directories","application":{"name":"vasp"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"prepare-neb-images","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","preProcessors":[],"postProcessors":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"isDefault":true,"monitors":["standard_output"],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"monitors":["standard_output"],"name":"bash_vasp_prepare_neb_images","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < 00/POSCAR < 01/POSCAR < 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR <=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema"}],"isDefault":false,"monitors":[],"name":"Set Average ESP Value","operand":"AVG_ESP_INTERFACE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},{"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"BS + Avg ESP (interface left)","properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"0bd31760-f6e4-5826-b282-882c06c97f94","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Material Index (Interface left)","next":"3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08","operand":"MATERIAL_INDEX","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"1"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap-left","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap-left","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-left"}],"isDefault":false,"monitors":[],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Set Valence Band Maximum","next":"dfc4f1c5-5856-588a-99df-6d5fb46bb429","operand":"VBM_LEFT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"dfc4f1c5-5856-588a-99df-6d5fb46bb429","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","next":"b1bb2b3e-3197-5bcd-85b0-959cc357c8d3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"b1bb2b3e-3197-5bcd-85b0-959cc357c8d3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential-left","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average_potential","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential-left","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-left"}],"isDefault":false,"monitors":[],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},{"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Find ESP Value (Interface left)","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"generic:processing:find_extrema:scipy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"python-find-extrema-left","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema-left"}],"isDefault":false,"monitors":[],"name":"Set Average ESP Value","operand":"AVG_ESP_LEFT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},{"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"BS + Avg ESP (interface right)","properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"a05809d1-cc0d-5a0b-bf5e-d43b90a6ac4b","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Material Index (Interface right)","next":"b89d6348-3915-5c24-9fbb-350bc98ac708","operand":"MATERIAL_INDEX","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"2"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"b89d6348-3915-5c24-9fbb-350bc98ac708","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap-right","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap-right","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-right"}],"isDefault":false,"monitors":[],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Set Valence Band Maximum","next":"bc3f514c-4bed-521b-85a3-4e0edfdc3585","operand":"VBM_RIGHT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"bc3f514c-4bed-521b-85a3-4e0edfdc3585","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","next":"28bb682d-d287-5beb-8a67-826449c474ee","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"28bb682d-d287-5beb-8a67-826449c474ee","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential-right","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average_potential","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential-right","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-right"}],"isDefault":false,"monitors":[],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},{"_id":"736295e8-2ee0-5974-83bc-362061ac0688","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Find ESP Value (Interface right)","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"generic:processing:find_extrema:scipy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"python-find-extrema-right","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema-right"}],"isDefault":false,"monitors":[],"name":"Set Average ESP Value","operand":"AVG_ESP_RIGHT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Calculate VBO","properties":["valence_band_offset"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Difference of valence band maxima","next":"2626f7bb-d392-5fd4-ab71-329b508de347","operand":"VBM_DIFF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"VBM_LEFT - VBM_RIGHT"},{"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Difference of macroscopically averaged ESP in bulk","next":"b7307787-53e2-599b-ad12-d627b04074b4","operand":"AVG_ESP_DIFF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]"},{"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Lineup of macroscopically averaged ESP in interface","next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","operand":"ESP_LINEUP","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])"},{"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Valence Band Offset","operand":"VALENCE_BAND_OFFSET","postProcessors":[],"preProcessors":[],"results":[{"name":"valence_band_offset"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))"}]}],"units":[{"_id":"9c65d03e-6a30-58f3-947a-f174342be0c3","flowchartId":"fd622b5c-5c02-594e-b582-b245c17ca9a4","isDefault":false,"monitors":[],"name":"BS + Avg ESP (Interface)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"subworkflow"},{"_id":"ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7","flowchartId":"ad3b1e4c-5965-5605-a067-dd0c59907c4b","isDefault":false,"monitors":[],"name":"Find ESP Values (Interface)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","flowchartId":"8d5b4734-edfd-55cc-ad80-aaa72487398d","isDefault":false,"monitors":[],"name":"BS + Avg ESP (interface left)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","flowchartId":"102ec582-5b75-52f5-8b39-19ca725ed47a","isDefault":false,"monitors":[],"name":"Find ESP Value (Interface left)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","flowchartId":"603c45db-93aa-54ce-a7fe-6e9b65b0037d","isDefault":false,"monitors":[],"name":"BS + Avg ESP (interface right)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"736295e8-2ee0-5974-83bc-362061ac0688","flowchartId":"e3444d35-cc41-59f5-8481-78d0c383b84e","isDefault":false,"monitors":[],"name":"Find ESP Value (Interface right)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","flowchartId":"0e0b141a-39ca-52bc-9094-e5f96dc72f39","isDefault":false,"monitors":[],"name":"Calculate VBO","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/variable_cell_relaxation.json":{"_id":"c45dcef1-d16b-59d1-9318-cedd0b1acf08","application":{"name":"espresso"},"isDefault":false,"name":"Variable-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Variable-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","systemName":"espresso-variable-cell-relaxation","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"tags":["variable-cell_relaxation"],"units":[{"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","flowchartId":"8f6e9590-6a87-584b-abd7-1fb98253054c","isDefault":false,"monitors":[],"name":"Variable-cell Relaxation","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"subworkflow"}],"workflows":[]},"espresso/wavefunction_amplitude.json":{"_id":"196d364a-5a30-549b-a898-8b9704b50ff1","application":{"name":"espresso"},"isDefault":false,"name":"Wavefunction Amplitude","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Wavefunction Amplitude","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-scf","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"extract-band-energies","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"band_structure"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"extract-band-energies","head":false,"input":[{"name":"band_structure","scope":"pw-scf"}],"isDefault":false,"monitors":[],"name":"Extract Band Energies","next":"indices-below-fermi","operand":"band_energies","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]"},{"flowchartId":"indices-below-fermi","head":false,"input":[{"name":"fermi_energy","scope":"pw-scf"}],"isDefault":false,"monitors":[],"name":"Find Indices Below Fermi","next":"8771dc7f-878e-5f13-a840-a3a416854f1e","operand":"indices_below_fermi","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]"},{"flowchartId":"8771dc7f-878e-5f13-a840-a3a416854f1e","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Store Band Below EF","next":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","operand":"KBAND_VALUE_BELOW_EF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1"},{"flowchartId":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Select Band","next":"pp-wfn","operand":"KBAND_VALUE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"KBAND_VALUE_BELOW_EF"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_wfn","postProcessors":[],"preProcessors":[],"results":[{"name":"wavefunction_amplitude"}],"schemaVersion":"2022.8.16"},"flowchartId":"pp-wfn","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_wfn.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_wfn","postProcessors":[],"preProcessors":[],"results":[{"name":"wavefunction_amplitude"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Plot Wavefunction","properties":["file_content"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"plot_wavefunction","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"57fca898-8e8b-5ef2-81a5-9d2b612bc18d","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"plot WFN","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"tags":["wfn","wfn_plot"],"units":[{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","flowchartId":"36467db9-279f-52a3-a6ef-ffdc26d875ed","isDefault":false,"monitors":[],"name":"Wavefunction Amplitude","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"subworkflow"},{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","flowchartId":"4ce49281-e731-550e-af66-6d2408db8237","isDefault":false,"monitors":[],"name":"Plot Wavefunction","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/zero_point_energy.json":{"_id":"3158c78d-58bb-5675-8c7f-6f2337061015","application":{"name":"espresso"},"isDefault":false,"name":"Zero Point Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Zero Point Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"107595d1-490f-53a2-8432-7f8a12f14d96","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_gamma","postProcessors":[],"preProcessors":[],"results":[{"name":"zero_point_energy"}],"schemaVersion":"2022.8.16"},"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_zpe","postProcessors":[],"preProcessors":[],"results":[{"name":"zero_point_energy"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","flowchartId":"d906bd20-eb92-5a01-a0e2-c81a2d9b2a41","isDefault":false,"monitors":[],"name":"Zero Point Energy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"subworkflow"}],"workflows":[]},"nwchem/total_energy.json":{"_id":"937fbac8-2dec-5fb1-a46f-b8a0cc3d3d05","application":{"name":"nwchem"},"isDefault":false,"name":"Total Energy","properties":["total_energy","total_energy_contributions"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","application":{"build":"GNU","isDefault":true,"name":"nwchem","schemaVersion":"2022.8.16","shortName":"nwchem","summary":"NWChem","version":"7.0.2"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"pople","type":"localorbital"},"subtype":"gga","type":"dft"},"name":"Total Energy","properties":["total_energy","total_energy_contributions"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"nwchem","schemaVersion":"2022.8.16","shortName":"nwchem","summary":"NWChem","version":"7.0.2"},"context":[],"executable":{"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem","postProcessors":[{"name":"error_handler"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"schemaVersion":"2022.8.16"},"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","flowchartId":"6059d61a-6a92-5657-9130-02208639aff8","isDefault":false,"monitors":[],"name":"Total Energy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"subworkflow"}],"workflows":[]},"python/ml/classification_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","application":{"name":"python"},"isDefault":false,"name":"Python ML Train Classification","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"schemaVersion":"2022.8.16","units":[{"flowchartId":"head-set-predict-status","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Dataset","next":"head-branch-on-predict-status","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"isDefault":false,"maxOccurrences":100,"monitors":[],"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"flowchartId":"end-of-ml-train-head","head":false,"input":[],"isDefault":false,"monitors":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:random_forest_classification:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:roc_curve:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ROC Curve Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","isDefault":false,"monitors":[],"name":"Set Up the Job","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"subworkflow"},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","isDefault":false,"monitors":[],"name":"Machine Learning","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/ml/clustering_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","application":{"name":"python"},"isDefault":false,"name":"Python ML Train Clustering","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"schemaVersion":"2022.8.16","units":[{"flowchartId":"head-set-predict-status","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Dataset","next":"head-branch-on-predict-status","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"isDefault":false,"maxOccurrences":100,"monitors":[],"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"flowchartId":"end-of-ml-train-head","head":false,"input":[],"isDefault":false,"monitors":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:random_forest_classification:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:roc_curve:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ROC Curve Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","isDefault":false,"monitors":[],"name":"Set Up the Job","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"subworkflow"},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","isDefault":false,"monitors":[],"name":"Machine Learning","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/ml/regression_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","application":{"name":"python"},"isDefault":false,"name":"Python ML Train Regression","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"schemaVersion":"2022.8.16","units":[{"flowchartId":"head-set-predict-status","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Dataset","next":"head-branch-on-predict-status","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"isDefault":false,"maxOccurrences":100,"monitors":[],"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"flowchartId":"end-of-ml-train-head","head":false,"input":[],"isDefault":false,"monitors":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:multilayer_perceptron:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:parity_plot:matplotlib","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Parity Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","isDefault":false,"monitors":[],"name":"Set Up the Job","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"subworkflow"},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","isDefault":false,"monitors":[],"name":"Machine Learning","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/python_script.json":{"_id":"de816646-766b-5f97-b468-0937d4381440","application":{"name":"python"},"isDefault":false,"name":"Python Script","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Python Script","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","flowchartId":"c50e28b2-a0c5-5324-8b6f-e99b5a546bd8","isDefault":false,"monitors":[],"name":"Python Script","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"subworkflow"}],"workflows":[]},"shell/batch_espresso_pwscf.json":{"_id":"e0046fb4-37db-5732-bf81-c48e13081a4c","application":{"name":"shell"},"isDefault":false,"name":"Shell Batch Job (Espresso PWSCF)","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Batch Job (Espresso PWSCF)","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"job_espresso_pw_scf","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","flowchartId":"d884e8f7-7acf-5a03-bc9a-186903bdaa0e","isDefault":false,"monitors":[],"name":"Shell Batch Job (Espresso PWSCF)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"subworkflow"}],"workflows":[]},"shell/hello_world.json":{"_id":"d2fd444c-06b4-5d66-baeb-449c680ae1bf","application":{"name":"shell"},"isDefault":false,"name":"Shell Script","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Hello World","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","flowchartId":"319307c2-bf22-5bf2-b4e9-a4cdf671b786","isDefault":false,"monitors":[],"name":"Shell Hello World","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"subworkflow"}],"workflows":[]},"vasp/band_gap.json":{"_id":"1a358471-0a73-5fcb-ad3c-7a8079029c86","application":{"name":"vasp"},"isDefault":false,"name":"Band Gap","properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Gap","properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"f0d65517-9592-5bc8-948e-a0851a766cbb","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"schemaVersion":"2022.8.16"},"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","flowchartId":"db3b83ea-0ef5-594c-89a8-bde38dbc6105","isDefault":false,"monitors":[],"name":"Band Gap","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"subworkflow"}],"workflows":[]},"vasp/band_structure.json":{"_id":"25b0ad08-87bb-5400-bea4-acd5fe2163c0","application":{"name":"vasp"},"isDefault":false,"name":"Band Structure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","flowchartId":"c573187f-a8bb-5084-9fcf-1560bf4a7786","isDefault":false,"monitors":[],"name":"Band Structure","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"subworkflow"}],"workflows":[]},"vasp/band_structure_dos.json":{"_id":"c8338d40-3c6e-5581-b03c-d7fb5cbb8df5","application":{"name":"vasp"},"isDefault":false,"name":"Band Structure + Density of States","properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"d38fea11-9781-5151-8dae-d705381498be","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure + Density of States","properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"d38fea11-9781-5151-8dae-d705381498be","flowchartId":"8a098bb9-73b1-5e84-bfc7-b783e02d0f53","isDefault":false,"monitors":[],"name":"Band Structure + Density of States","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"subworkflow"}],"workflows":[]},"vasp/dos.json":{"_id":"629a79fb-a03f-5e34-b2ce-9c735e8ef6c0","application":{"name":"vasp"},"isDefault":false,"name":"Density of States","properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Density of States","properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","flowchartId":"3e64fdb4-ab5b-52a0-a1d5-51343c49481c","isDefault":false,"monitors":[],"name":"Density of States","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"subworkflow"}],"workflows":[]},"vasp/fixed_cell_relaxation.json":{"_id":"cb69418c-2f6c-551d-af81-0cf20ec1113d","application":{"name":"vasp"},"isDefault":false,"name":"Fixed-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Fixed-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","postProcessors":[{"name":"prepare_restart"}],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","postProcessors":[{"name":"prepare_restart"}],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","flowchartId":"0de8c4c8-b722-5cd2-ae68-b484262e0a01","isDefault":false,"monitors":[],"name":"Fixed-cell Relaxation","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"subworkflow"}],"workflows":[]},"vasp/kpoint_convergence.json":{"_id":"fcf105f9-5ae7-5c32-a6b3-e3579cbdf39a","application":{"name":"vasp"},"isDefault":false,"name":"K-point Convergence","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"K-point Convergence","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"init-tolerance","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Init tolerance","next":"init-increment","operand":"TOL","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0.00001},{"flowchartId":"init-increment","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init increment","next":"init-result","operand":"INC","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"flowchartId":"init-result","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init result","next":"init-parameter","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0},{"flowchartId":"init-parameter","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init parameter","next":"vasp-kpoint-convergence","operand":"PARAMETER","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"vasp-kpoint-convergence","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","next":"store-result","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"store-result","head":false,"input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"isDefault":false,"monitors":[],"name":"store result","next":"check-convergence","operand":"RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"else":"update-result","flowchartId":"check-convergence","head":false,"input":[],"isDefault":false,"maxOccurrences":50,"monitors":[],"name":"check convergence","next":"update-result","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","status":"idle","statusTrack":[],"tags":[],"then":"convergence-is-reached","type":"condition"},{"flowchartId":"update-result","head":false,"input":[{"name":"RESULT","scope":"global"}],"isDefault":false,"monitors":[],"name":"update result","next":"increment-parameter","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"RESULT"},{"flowchartId":"increment-parameter","head":false,"input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"isDefault":false,"monitors":[],"name":"increment parameter","next":"vasp-kpoint-convergence","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER+INC"},{"flowchartId":"convergence-is-reached","head":false,"input":[{"name":"PARAMETER","scope":"global"}],"isDefault":false,"monitors":[],"name":"exit","operand":"PARAMETER","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER"}]}],"units":[{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","flowchartId":"a34eec2c-cdb2-537d-88c0-ed1d7b205879","isDefault":false,"monitors":[],"name":"K-point Convergence","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"subworkflow"}],"workflows":[]},"vasp/neb.json":{"_id":"2973908e-21ae-5424-afc9-ccb3fde477d8","application":{"name":"vasp"},"isDefault":false,"name":"Nudged Elastic Band (NEB)","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"compute":{"arguments":{"nband":1,"ndiag":1,"nimage":1,"npools":1,"ntg":1},"cluster":{"fqdn":""},"isRestartable":true,"nodes":1,"notify":"n","ppn":1,"queue":"D","timeLimit":"01:00:00","timeLimitType":"per single attempt"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Initial/Final Total Energies","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","next":"e65a17ce-10c8-5710-ad4d-fb3d42434091","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"isDraft":false,"isMultiMaterial":true,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Prepare Directories","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bash_vasp_prepare_neb_images","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR <=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema"}],"isDefault":false,"monitors":[],"name":"Set Average ESP Value","operand":"AVG_ESP_INTERFACE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},{"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"BS + Avg ESP (interface left)","properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"0bd31760-f6e4-5826-b282-882c06c97f94","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Material Index (Interface left)","next":"3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08","operand":"MATERIAL_INDEX","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"1"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap-left","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap-left","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-left"}],"isDefault":false,"monitors":[],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Set Valence Band Maximum","next":"dfc4f1c5-5856-588a-99df-6d5fb46bb429","operand":"VBM_LEFT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"dfc4f1c5-5856-588a-99df-6d5fb46bb429","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","next":"b1bb2b3e-3197-5bcd-85b0-959cc357c8d3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"b1bb2b3e-3197-5bcd-85b0-959cc357c8d3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential-left","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average_potential","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential-left","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-left"}],"isDefault":false,"monitors":[],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},{"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Find ESP Value (Interface left)","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"generic:processing:find_extrema:scipy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"python-find-extrema-left","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema-left"}],"isDefault":false,"monitors":[],"name":"Set Average ESP Value","operand":"AVG_ESP_LEFT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},{"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"BS + Avg ESP (interface right)","properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"a05809d1-cc0d-5a0b-bf5e-d43b90a6ac4b","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Material Index (Interface right)","next":"b89d6348-3915-5c24-9fbb-350bc98ac708","operand":"MATERIAL_INDEX","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"2"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"b89d6348-3915-5c24-9fbb-350bc98ac708","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap-right","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap-right","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-right"}],"isDefault":false,"monitors":[],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Set Valence Band Maximum","next":"bc3f514c-4bed-521b-85a3-4e0edfdc3585","operand":"VBM_RIGHT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"bc3f514c-4bed-521b-85a3-4e0edfdc3585","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","next":"28bb682d-d287-5beb-8a67-826449c474ee","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"28bb682d-d287-5beb-8a67-826449c474ee","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential-right","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average_potential","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential-right","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-right"}],"isDefault":false,"monitors":[],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},{"_id":"736295e8-2ee0-5974-83bc-362061ac0688","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Find ESP Value (Interface right)","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"generic:processing:find_extrema:scipy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"python-find-extrema-right","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema-right"}],"isDefault":false,"monitors":[],"name":"Set Average ESP Value","operand":"AVG_ESP_RIGHT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Calculate VBO","properties":["valence_band_offset"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Difference of valence band maxima","next":"2626f7bb-d392-5fd4-ab71-329b508de347","operand":"VBM_DIFF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"VBM_LEFT - VBM_RIGHT"},{"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Difference of macroscopically averaged ESP in bulk","next":"b7307787-53e2-599b-ad12-d627b04074b4","operand":"AVG_ESP_DIFF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]"},{"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Lineup of macroscopically averaged ESP in interface","next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","operand":"ESP_LINEUP","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])"},{"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Valence Band Offset","operand":"VALENCE_BAND_OFFSET","postProcessors":[],"preProcessors":[],"results":[{"name":"valence_band_offset"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))"}]}],"units":[{"_id":"9c65d03e-6a30-58f3-947a-f174342be0c3","flowchartId":"fd622b5c-5c02-594e-b582-b245c17ca9a4","isDefault":false,"monitors":[],"name":"BS + Avg ESP (Interface)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7","flowchartId":"ad3b1e4c-5965-5605-a067-dd0c59907c4b","isDefault":false,"monitors":[],"name":"Find ESP Values (Interface)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","flowchartId":"8d5b4734-edfd-55cc-ad80-aaa72487398d","isDefault":false,"monitors":[],"name":"BS + Avg ESP (interface left)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","flowchartId":"102ec582-5b75-52f5-8b39-19ca725ed47a","isDefault":false,"monitors":[],"name":"Find ESP Value (Interface left)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","flowchartId":"603c45db-93aa-54ce-a7fe-6e9b65b0037d","isDefault":false,"monitors":[],"name":"BS + Avg ESP (interface right)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"736295e8-2ee0-5974-83bc-362061ac0688","flowchartId":"e3444d35-cc41-59f5-8481-78d0c383b84e","isDefault":false,"monitors":[],"name":"Find ESP Value (Interface right)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","flowchartId":"0e0b141a-39ca-52bc-9094-e5f96dc72f39","isDefault":false,"monitors":[],"name":"Calculate VBO","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/variable_cell_relaxation.json":{"_id":"c45dcef1-d16b-59d1-9318-cedd0b1acf08","application":{"name":"espresso"},"isDefault":false,"name":"Variable-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Variable-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","systemName":"espresso-variable-cell-relaxation","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"tags":["variable-cell_relaxation"],"units":[{"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","flowchartId":"8f6e9590-6a87-584b-abd7-1fb98253054c","isDefault":false,"monitors":[],"name":"Variable-cell Relaxation","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/wavefunction_amplitude.json":{"_id":"196d364a-5a30-549b-a898-8b9704b50ff1","application":{"name":"espresso"},"isDefault":false,"name":"Wavefunction Amplitude","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude","file_content"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Wavefunction Amplitude","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-scf","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"extract-band-energies","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"band_structure"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"extract-band-energies","head":false,"input":[{"name":"band_structure","scope":"pw-scf"}],"isDefault":false,"monitors":[],"name":"Extract Band Energies","next":"indices-below-fermi","operand":"band_energies","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]"},{"flowchartId":"indices-below-fermi","head":false,"input":[{"name":"fermi_energy","scope":"pw-scf"}],"isDefault":false,"monitors":[],"name":"Find Indices Below Fermi","next":"8771dc7f-878e-5f13-a840-a3a416854f1e","operand":"indices_below_fermi","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]"},{"flowchartId":"8771dc7f-878e-5f13-a840-a3a416854f1e","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Store Band Below EF","next":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","operand":"KBAND_VALUE_BELOW_EF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1"},{"flowchartId":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Select Band","next":"pp-wfn","operand":"KBAND_VALUE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"KBAND_VALUE_BELOW_EF"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_wfn","postProcessors":[],"preProcessors":[],"results":[{"name":"wavefunction_amplitude"}],"schemaVersion":"2022.8.16"},"flowchartId":"pp-wfn","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_wfn.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_wfn","postProcessors":[],"preProcessors":[],"results":[{"name":"wavefunction_amplitude"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Plot Wavefunction","properties":["file_content"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"plot_wavefunction","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"57fca898-8e8b-5ef2-81a5-9d2b612bc18d","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"plot WFN","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"tags":["wfn","wfn_plot"],"units":[{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","flowchartId":"36467db9-279f-52a3-a6ef-ffdc26d875ed","isDefault":false,"monitors":[],"name":"Wavefunction Amplitude","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","flowchartId":"4ce49281-e731-550e-af66-6d2408db8237","isDefault":false,"monitors":[],"name":"Plot Wavefunction","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/zero_point_energy.json":{"_id":"3158c78d-58bb-5675-8c7f-6f2337061015","application":{"name":"espresso"},"isDefault":false,"name":"Zero Point Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Zero Point Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"107595d1-490f-53a2-8432-7f8a12f14d96","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_gamma","postProcessors":[],"preProcessors":[],"results":[{"name":"zero_point_energy"}],"schemaVersion":"2022.8.16"},"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_zpe","postProcessors":[],"preProcessors":[],"results":[{"name":"zero_point_energy"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","flowchartId":"d906bd20-eb92-5a01-a0e2-c81a2d9b2a41","isDefault":false,"monitors":[],"name":"Zero Point Energy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"nwchem/total_energy.json":{"_id":"937fbac8-2dec-5fb1-a46f-b8a0cc3d3d05","application":{"name":"nwchem"},"isDefault":false,"name":"Total Energy","properties":["total_energy","total_energy_contributions"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","application":{"build":"GNU","isDefault":true,"name":"nwchem","schemaVersion":"2022.8.16","shortName":"nwchem","summary":"NWChem","version":"7.0.2"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"pople","type":"localorbital"},"subtype":"gga","type":"dft"},"name":"Total Energy","properties":["total_energy","total_energy_contributions"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"nwchem","schemaVersion":"2022.8.16","shortName":"nwchem","summary":"NWChem","version":"7.0.2"},"context":[],"executable":{"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem","postProcessors":[{"name":"error_handler"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"schemaVersion":"2022.8.16"},"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","flowchartId":"6059d61a-6a92-5657-9130-02208639aff8","isDefault":false,"monitors":[],"name":"Total Energy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/ml/classification_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","application":{"name":"python"},"isDefault":false,"isUsingDataset":true,"name":"Python ML Train Classification","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"schemaVersion":"2022.8.16","units":[{"flowchartId":"head-set-predict-status","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Dataset","next":"head-branch-on-predict-status","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"isDefault":false,"maxOccurrences":100,"monitors":[],"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"flowchartId":"end-of-ml-train-head","head":false,"input":[],"isDefault":false,"monitors":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:random_forest_classification:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:roc_curve:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ROC Curve Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","isDefault":false,"monitors":[],"name":"Set Up the Job","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","isDefault":false,"monitors":[],"name":"Machine Learning","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/ml/clustering_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","application":{"name":"python"},"isDefault":false,"isUsingDataset":true,"name":"Python ML Train Clustering","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"schemaVersion":"2022.8.16","units":[{"flowchartId":"head-set-predict-status","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Dataset","next":"head-branch-on-predict-status","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"isDefault":false,"maxOccurrences":100,"monitors":[],"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"flowchartId":"end-of-ml-train-head","head":false,"input":[],"isDefault":false,"monitors":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:random_forest_classification:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:roc_curve:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ROC Curve Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","isDefault":false,"monitors":[],"name":"Set Up the Job","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","isDefault":false,"monitors":[],"name":"Machine Learning","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/ml/regression_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","application":{"name":"python"},"isDefault":false,"isUsingDataset":true,"name":"Python ML Train Regression","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"schemaVersion":"2022.8.16","units":[{"flowchartId":"head-set-predict-status","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Dataset","next":"head-branch-on-predict-status","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"isDefault":false,"maxOccurrences":100,"monitors":[],"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"flowchartId":"end-of-ml-train-head","head":false,"input":[],"isDefault":false,"monitors":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:multilayer_perceptron:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:parity_plot:matplotlib","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Parity Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","isDefault":false,"monitors":[],"name":"Set Up the Job","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","isDefault":false,"monitors":[],"name":"Machine Learning","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/python_script.json":{"_id":"de816646-766b-5f97-b468-0937d4381440","application":{"name":"python"},"isDefault":false,"name":"Python Script","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Python Script","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","flowchartId":"c50e28b2-a0c5-5324-8b6f-e99b5a546bd8","isDefault":false,"monitors":[],"name":"Python Script","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"shell/batch_espresso_pwscf.json":{"_id":"e0046fb4-37db-5732-bf81-c48e13081a4c","application":{"name":"shell"},"isDefault":false,"name":"Shell Batch Job (Espresso PWSCF)","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Batch Job (Espresso PWSCF)","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"job_espresso_pw_scf","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","flowchartId":"d884e8f7-7acf-5a03-bc9a-186903bdaa0e","isDefault":false,"monitors":[],"name":"Shell Batch Job (Espresso PWSCF)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"shell/hello_world.json":{"_id":"d2fd444c-06b4-5d66-baeb-449c680ae1bf","application":{"name":"shell"},"isDefault":false,"name":"Shell Script","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Hello World","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","flowchartId":"319307c2-bf22-5bf2-b4e9-a4cdf671b786","isDefault":false,"monitors":[],"name":"Shell Hello World","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/band_gap.json":{"_id":"1a358471-0a73-5fcb-ad3c-7a8079029c86","application":{"name":"vasp"},"isDefault":false,"name":"Band Gap","properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Gap","properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"f0d65517-9592-5bc8-948e-a0851a766cbb","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"schemaVersion":"2022.8.16"},"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","flowchartId":"db3b83ea-0ef5-594c-89a8-bde38dbc6105","isDefault":false,"monitors":[],"name":"Band Gap","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/band_structure.json":{"_id":"25b0ad08-87bb-5400-bea4-acd5fe2163c0","application":{"name":"vasp"},"isDefault":false,"name":"Band Structure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","flowchartId":"c573187f-a8bb-5084-9fcf-1560bf4a7786","isDefault":false,"monitors":[],"name":"Band Structure","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/band_structure_dos.json":{"_id":"c8338d40-3c6e-5581-b03c-d7fb5cbb8df5","application":{"name":"vasp"},"isDefault":false,"name":"Band Structure + Density of States","properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"d38fea11-9781-5151-8dae-d705381498be","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure + Density of States","properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"d38fea11-9781-5151-8dae-d705381498be","flowchartId":"8a098bb9-73b1-5e84-bfc7-b783e02d0f53","isDefault":false,"monitors":[],"name":"Band Structure + Density of States","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/dos.json":{"_id":"629a79fb-a03f-5e34-b2ce-9c735e8ef6c0","application":{"name":"vasp"},"isDefault":false,"name":"Density of States","properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Density of States","properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","flowchartId":"3e64fdb4-ab5b-52a0-a1d5-51343c49481c","isDefault":false,"monitors":[],"name":"Density of States","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/fixed_cell_relaxation.json":{"_id":"cb69418c-2f6c-551d-af81-0cf20ec1113d","application":{"name":"vasp"},"isDefault":false,"name":"Fixed-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Fixed-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","postProcessors":[{"name":"prepare_restart"}],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","postProcessors":[{"name":"prepare_restart"}],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","flowchartId":"0de8c4c8-b722-5cd2-ae68-b484262e0a01","isDefault":false,"monitors":[],"name":"Fixed-cell Relaxation","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/kpoint_convergence.json":{"_id":"fcf105f9-5ae7-5c32-a6b3-e3579cbdf39a","application":{"name":"vasp"},"isDefault":false,"name":"K-point Convergence","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"K-point Convergence","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"init-tolerance","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Init tolerance","next":"init-increment","operand":"TOL","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0.00001},{"flowchartId":"init-increment","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init increment","next":"init-result","operand":"INC","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"flowchartId":"init-result","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init result","next":"init-parameter","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0},{"flowchartId":"init-parameter","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init parameter","next":"vasp-kpoint-convergence","operand":"PARAMETER","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"vasp-kpoint-convergence","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","next":"store-result","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"store-result","head":false,"input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"isDefault":false,"monitors":[],"name":"store result","next":"check-convergence","operand":"RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"else":"update-result","flowchartId":"check-convergence","head":false,"input":[],"isDefault":false,"maxOccurrences":50,"monitors":[],"name":"check convergence","next":"update-result","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","status":"idle","statusTrack":[],"tags":[],"then":"convergence-is-reached","type":"condition"},{"flowchartId":"update-result","head":false,"input":[{"name":"RESULT","scope":"global"}],"isDefault":false,"monitors":[],"name":"update result","next":"increment-parameter","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"RESULT"},{"flowchartId":"increment-parameter","head":false,"input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"isDefault":false,"monitors":[],"name":"increment parameter","next":"vasp-kpoint-convergence","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER+INC"},{"flowchartId":"convergence-is-reached","head":false,"input":[{"name":"PARAMETER","scope":"global"}],"isDefault":false,"monitors":[],"name":"exit","operand":"PARAMETER","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER"}]}],"units":[{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","flowchartId":"a34eec2c-cdb2-537d-88c0-ed1d7b205879","isDefault":false,"monitors":[],"name":"K-point Convergence","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/neb.json":{"_id":"2973908e-21ae-5424-afc9-ccb3fde477d8","application":{"name":"vasp"},"isDefault":false,"name":"Nudged Elastic Band (NEB)","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","reaction_energy_barrier","reaction_energy_profile"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"compute":{"arguments":{"nband":1,"ndiag":1,"nimage":1,"npools":1,"ntg":1},"cluster":{"fqdn":""},"isRestartable":true,"nodes":1,"notify":"n","ppn":1,"queue":"D","timeLimit":"01:00:00","timeLimitType":"per single attempt"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Initial/Final Total Energies","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","next":"e65a17ce-10c8-5710-ad4d-fb3d42434091","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"isDraft":false,"isMultiMaterial":true,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Prepare Directories","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bash_vasp_prepare_neb_images","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < 0 else 1"},"type":"assignment"},{"config":{"name":"Select Band","operand":"KBAND_VALUE","value":"KBAND_VALUE_BELOW_EF"},"type":"assignment"},{"attributes":{"results":[{"name":"wavefunction_amplitude"}]},"config":{"execName":"pp.x","flavorName":"pp_wfn","flowchartId":"pp-wfn","input":[{"name":"KBAND_VALUE"}],"name":"pp_wfn"},"type":"executionBuilder"}]},"zero_point_energy":{"__path__":"zero_point_energy","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Zero Point Energy","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"type":"executionBuilder"},{"config":{"execName":"ph.x","flavorName":"ph_gamma","name":"ph_zpe"},"type":"executionBuilder"}]}},"nwchem":{"total_energy":{"__path__":"total_energy","application":{"name":"nwchem","version":"7.0.2"},"method":{"name":"LocalOrbitalMethod"},"model":{"name":"DFTModel"},"name":"Total Energy","units":[{"config":{"execName":"nwchem","flavorName":"nwchem_total_energy","name":"nwchem_total_energy"},"functions":{"head":true},"type":"executionBuilder"}]}},"python":{"classification_tail":{"__path__":"ml/classification_tail","application":{"name":"python","version":"3.10.13"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Machine Learning","units":[{"attributes":{"enableRender":true},"config":{"execName":"python","flavorName":"pyml:setup_variables_packages","name":"Setup Variables and Packages"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:read_csv:pandas","name":"Data Input"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:train_test_split:sklearn","name":"Train Test Split"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:pre_processing:standardization:sklearn","name":"Data Standardize"},"type":"executionBuilder"},{"attributes":{"results":[{"name":"workflow:pyml_predict"}],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"]},"config":{"execName":"python","flavorName":"pyml:model:random_forest_classification:sklearn","name":"Model Train and Predict"},"type":"executionBuilder"},{"attributes":{"postProcessors":[{"name":"remove_virtual_environment"}],"results":[{"name":"file_content"}],"tags":["remove-all-results"]},"config":{"execName":"python","flavorName":"pyml:post_processing:roc_curve:sklearn","name":"ROC Curve Plot"},"type":"executionBuilder"}]},"clustering_tail":{"__path__":"ml/clustering_tail","application":{"name":"python","version":"3.10.13"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Machine Learning","units":[{"attributes":{"enableRender":true},"config":{"execName":"python","flavorName":"pyml:setup_variables_packages","name":"Setup Variables and Packages"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:read_csv:pandas","name":"Data Input"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:train_test_split:sklearn","name":"Train Test Split"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:pre_processing:standardization:sklearn","name":"Data Standardize"},"type":"executionBuilder"},{"attributes":{"results":[{"name":"workflow:pyml_predict"}],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"]},"config":{"execName":"python","flavorName":"pyml:model:k_means_clustering:sklearn","name":"Model Train and Predict"},"type":"executionBuilder"},{"attributes":{"postProcessors":[{"name":"remove_virtual_environment"}],"results":[{"name":"file_content"},{"name":"file_content"},{"name":"file_content"}],"tags":["remove-all-results"]},"config":{"execName":"python","flavorName":"pyml:post_processing:pca_2d_clusters:matplotlib","name":"2D PCA Clusters Plot"},"type":"executionBuilder"}]},"python_script":{"__path__":"python_script","application":{"name":"python","version":"3.10.13"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Python Script","units":[{"config":{"execName":"python","flavorName":"hello_world","name":"python"},"type":"executionBuilder"}]},"regression_tail":{"__path__":"ml/regression_tail","application":{"name":"python","version":"3.10.13"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Machine Learning","units":[{"attributes":{"enableRender":true},"config":{"execName":"python","flavorName":"pyml:setup_variables_packages","name":"Setup Variables and Packages"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:read_csv:pandas","name":"Data Input"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:train_test_split:sklearn","name":"Train Test Split"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:pre_processing:standardization:sklearn","name":"Data Standardize"},"type":"executionBuilder"},{"attributes":{"results":[{"name":"workflow:pyml_predict"}],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"]},"config":{"execName":"python","flavorName":"pyml:model:multilayer_perceptron:sklearn","name":"Model Train and Predict"},"type":"executionBuilder"},{"attributes":{"postProcessors":[{"name":"remove_virtual_environment"}],"results":[{"name":"file_content"}],"tags":["remove-all-results"]},"config":{"execName":"python","flavorName":"pyml:post_processing:parity_plot:matplotlib","name":"Parity Plot"},"type":"executionBuilder"}]},"train_head":{"__path__":"ml/train_head","application":{"name":"python","version":"3.10.13"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Set Up the Job","units":[{"config":{"flowchartId":"head-set-predict-status","name":"Set Workflow Mode","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","tags":["pyml:workflow-type-setter"],"value":"False"},"type":"assignment"},{"config":{"enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""},"type":"object_storage"}],"name":"Fetch Dataset","source":"object_storage"},"type":"io"},{"config":{"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"name":"Train or Predict?","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","then":"head-fetch-trained-model"},"type":"condition"},{"config":{"enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""},"type":"object_storage"}],"name":"Fetch Trained Model as file","source":"object_storage","tags":["set-io-unit-filenames"]},"type":"io"},{"config":{"flowchartId":"end-of-ml-train-head","name":"End Setup","operand":"IS_SETUP_COMPLETE","value":"True"},"type":"assignment"}]}},"shell":{"batch_espresso_pwscf":{"__path__":"batch_espresso_pwscf","application":{"name":"shell","version":"5.1.8"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Shell Batch Job (Espresso PWSCF)","units":[{"config":{"execName":"sh","flavorName":"job_espresso_pw_scf","name":"shell"},"type":"executionBuilder"}]},"hello_world":{"__path__":"hello_world","application":{"name":"shell","version":"5.1.8"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Shell Hello World","units":[{"config":{"execName":"sh","flavorName":"hello_world","name":"shell"},"type":"executionBuilder"}]}},"vasp":{"band_gap":{"__path__":"band_gap","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Band Gap","units":[{"config":{"execName":"vasp","flavorName":"vasp","name":"vasp"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"execName":"vasp","flavorName":"vasp_nscf","name":"vasp_nscf"},"type":"executionBuilder"}]},"band_structure":{"__path__":"band_structure","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Band Structure","units":[{"config":{"execName":"vasp","flavorName":"vasp","name":"vasp"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"execName":"vasp","flavorName":"vasp_bands","name":"vasp_bands"},"type":"executionBuilder"}]},"band_structure_dos":{"__path__":"band_structure_dos","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Band Structure + Density of States","units":[{"config":{"execName":"vasp","flavorName":"vasp","name":"vasp"},"functions":{"addResults":[{"name":"density_of_states"}],"head":true},"type":"executionBuilder"},{"config":{"execName":"vasp","flavorName":"vasp_bands","name":"vasp_bands"},"type":"executionBuilder"}]},"dos":{"__path__":"dos","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Density of States","units":[{"config":{"execName":"vasp","flavorName":"vasp","name":"vasp"},"functions":{"addResults":[{"name":"density_of_states"}],"head":true},"type":"executionBuilder"}]},"fixed_cell_relaxation":{"__path__":"fixed_cell_relaxation","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Fixed-cell Relaxation","units":[{"config":{"execName":"vasp","flavorName":"vasp_relax","name":"vasp_relax"},"functions":{"head":true},"type":"executionBuilder"}]},"initial_final_total_energies":{"__path__":"initial_final_total_energies","application":{"name":"vasp","version":"5.4.4"},"config":{"functions":{"setDefaultCompute":null},"isMultiMaterial":true},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Initial/Final Total Energies","units":[{"config":{"execName":"vasp","flavorName":"vasp_neb_initial","name":"vasp_neb_initial"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"execName":"vasp","flavorName":"vasp_neb_final","name":"vasp_neb_final"},"type":"executionBuilder"}]},"kpoint_convergence":{"__path__":"kpoint_convergence","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"K-point Convergence","units":[{"config":{"flowchartId":"init-tolerance","name":"Init tolerance","operand":"TOL","value":0.00001},"type":"assignment"},{"config":{"flowchartId":"init-increment","name":"Init increment","operand":"INC","value":1},"type":"assignment"},{"config":{"flowchartId":"init-result","name":"Init result","operand":"PREV_RESULT","value":0},"type":"assignment"},{"config":{"flowchartId":"init-parameter","name":"Init parameter","operand":"PARAMETER","value":1},"type":"assignment"},{"config":{"execName":"vasp","flavorName":"vasp_kpt_conv","flowchartId":"vasp-kpoint-convergence","name":"vasp_kpt_conv"},"type":"executionBuilder"},{"config":{"flowchartId":"store-result","input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"name":"store result","operand":"RESULT","value":"total_energy"},"type":"assignment"},{"config":{"else":"update-result","flowchartId":"check-convergence","maxOccurrences":50,"name":"check convergence","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","then":"convergence-is-reached"},"type":"condition"},{"config":{"flowchartId":"update-result","input":[{"name":"RESULT","scope":"global"}],"name":"update result","operand":"PREV_RESULT","value":"RESULT"},"type":"assignment"},{"config":{"flowchartId":"increment-parameter","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"name":"increment parameter","next":"vasp-kpoint-convergence","operand":"PREV_RESULT","value":"PARAMETER+INC"},"type":"assignment"},{"config":{"flowchartId":"convergence-is-reached","input":[{"name":"PARAMETER","scope":"global"}],"name":"exit","operand":"PARAMETER","value":"PARAMETER"},"type":"assignment"}]},"neb_subworkflow":{"__path__":"neb_subworkflow","application":{"name":"vasp","version":"5.4.4"},"config":{"isMultiMaterial":true},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Nudged Elastic Band (NEB)","units":[{"config":{"execName":"vasp","flavorName":"vasp_neb","name":"vasp_neb"},"type":"executionBuilder"}]},"prepare_images":{"__path__":"prepare_images","application":{"name":"shell","version":"5.1.8"},"config":{"isMultiMaterial":true},"method":{"name":"Method"},"model":{"name":"Model"},"name":"Prepare Directories","units":[{"config":{"execName":"sh","flavorName":"bash_vasp_prepare_neb_images","name":"prepare-neb-images"},"type":"executionBuilder"}]},"recalculate_bands":{"__path__":"recalculate_bands","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Recalculate Bands","units":[{"config":{"execName":"vasp","flavorName":"vasp_bands","name":"vasp_bands"},"functions":{"head":true},"type":"executionBuilder"}]},"surface_energy":{"__path__":"surface_energy","application":{"name":"vasp","version":"5.4.4"},"dynamicSubworkflow":{"name":"surfaceEnergy"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Surface Energy","units":[{"config":{"execName":"vasp","flavorName":"vasp_symprec","name":"vasp_symprec"},"functions":{"head":true},"type":"executionBuilder"}]},"total_energy":{"__path__":"total_energy","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Total Energy","units":[{"config":{"execName":"vasp","flavorName":"vasp","name":"vasp"},"functions":{"head":true},"type":"executionBuilder"}]},"variable_cell_relaxation":{"__path__":"variable_cell_relaxation","application":{"name":"vasp","version":"5.4.4"},"config":{"systemName":"vasp-variable-cell-relaxation"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Variable-cell Relaxation","tags":["variable-cell_relaxation"],"units":[{"config":{"execName":"vasp","flavorName":"vasp_vc_relax","name":"vasp_vc_relax"},"functions":{"head":true},"type":"executionBuilder"}]},"zero_point_energy":{"__path__":"zero_point_energy","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Zero Point Energy","units":[{"config":{"execName":"vasp","flavorName":"vasp_zpe","name":"vasp_zpe"},"functions":{"head":true},"type":"executionBuilder"}]}}},"workflows":{"espresso":{"average_electrostatic_potential":{"__path__":"average_electrostatic_potential","name":"Average Electrostatic Potential","units":[{"name":"average_electrostatic_potential","type":"subworkflow"}]},"band_gap":{"__path__":"band_gap","name":"Band Gap","units":[{"name":"band_gap","type":"subworkflow"}]},"band_gap_dos_hse":{"__path__":"band_gap_dos_hse","name":"Band Gap + DoS - HSE","units":[{"name":"band_gap_hse_dos","type":"subworkflow"}]},"band_structure":{"__path__":"band_structure","name":"Band Structure","units":[{"name":"band_structure","type":"subworkflow"}]},"band_structure_dos":{"__path__":"band_structure_dos","name":"Band Structure + Density of States","units":[{"name":"band_structure_dos","type":"subworkflow"}]},"band_structure_hse":{"__path__":"band_structure_hse","name":"Band Structure - HSE","units":[{"config":{"attributes":{"name":"Preliminary SCF Calculation"}},"name":"pw_scf","type":"subworkflow"},{"name":"espresso_extract_kpoints","type":"subworkflow"},{"config":{"attributes":{"name":"Main HSE Run"}},"name":"band_structure_hse","type":"subworkflow"}]},"band_structure_magn":{"__path__":"band_structure_magn","name":"Bandstructure with spin magnetism - QE","units":[{"config":{"attributes":{"name":"Bandstructure with spin magnetism"}},"name":"band_structure_magn","type":"subworkflow"}]},"band_structure_soc":{"__path__":"band_structure_soc","name":"Bandstructure with SOC - QE","units":[{"config":{"attributes":{"name":"Bandstructure with SOC"}},"name":"band_structure_soc","type":"subworkflow"}]},"dielectric_tensor":{"__path__":"dielectric_tensor","name":"Dielectric Function","units":[{"name":"dielectric_tensor","type":"subworkflow"}]},"dos":{"__path__":"dos","name":"Density of States","units":[{"name":"dos","type":"subworkflow"}]},"electronic_density_mesh":{"__path__":"electronic_density_mesh","name":"Electronic Density Mesh","units":[{"name":"electronic_density_mesh","type":"subworkflow"}]},"esm":{"__path__":"esm","name":"Effective Screening Medium (ESM)","units":[{"name":"esm","type":"subworkflow"}]},"esm_relax":{"__path__":"esm_relax","name":"Effective Screening Medium (ESM) Relax","units":[{"name":"esm_relax","type":"subworkflow"}]},"fixed_cell_relaxation":{"__path__":"fixed_cell_relaxation","name":"Fixed-cell Relaxation","units":[{"name":"fixed_cell_relaxation","type":"subworkflow"}]},"gw_band_structure_band_gap_full_frequency":{"__path__":"gw_band_structure_band_gap_full_frequency","name":"Full Frequency GW Band Structure + Band Gap","units":[{"name":"gw_band_structure_band_gap_full_frequency","type":"subworkflow"}]},"gw_band_structure_band_gap_plasmon_pole":{"__path__":"gw_band_structure_band_gap_plasmon_pole","name":"Plasmon-Pole GW Band Structure + Band Gap","units":[{"name":"gw_band_structure_band_gap_plasmon_pole","type":"subworkflow"}]},"kpoint_convergence":{"__path__":"kpoint_convergence","name":"K-point Convergence","units":[{"name":"kpoint_convergence","type":"subworkflow"}]},"neb":{"__path__":"neb","name":"Nudged Elastic Band (NEB)","units":[{"name":"neb","type":"subworkflow"}]},"phonon_dispersions":{"__path__":"phonon_dispersions","name":"Phonon Dispersions","units":[{"name":"phonon_dispersions","type":"subworkflow"}]},"phonon_dos":{"__path__":"phonon_dos","name":"Phonon Density of States","units":[{"name":"phonon_dos","type":"subworkflow"}]},"phonon_dos_dispersion":{"__path__":"phonon_dos_dispersion","name":"Phonon Density of States + Dispersions","units":[{"name":"phonon_dos_dispersion","type":"subworkflow"}]},"phonon_map":{"__path__":"phonon_map","name":"Phonon Map","units":[{"name":"phononMap","type":"workflow","units":[{"name":"pw_scf","type":"subworkflow"},{"name":"ph_init_qpoints","type":"subworkflow"},{"name":"espresso_xml_get_qpt_irr","type":"subworkflow"}]},{"config":{"functions":{"setDefaultCompute":null},"input":{"name":"Q_POINTS"},"mapUnit":true},"name":"phonon_map_workflow","type":"workflow","units":[{"name":"pre_processor","type":"subworkflow"},{"name":"ph_single_irr_qpt","type":"subworkflow"},{"name":"post_processor","type":"subworkflow"}]},{"name":"phonon_reduce","type":"subworkflow"}]},"recalculate_bands":{"__path__":"recalculate_bands","name":"Recalculate Bands","units":[{"name":"recalculate_bands","type":"subworkflow"}]},"surface_energy":{"__path__":"surface_energy","name":"Surface Energy","units":[{"name":"surface_energy","type":"subworkflow"}]},"total_energy":{"__path__":"total_energy","name":"Total Energy","tags":["default"],"units":[{"name":"total_energy","type":"subworkflow"}]},"valence_band_offset":{"__path__":"valence_band_offset","name":"Valence Band Offset (2D)","units":[{"config":{"attributes":{"name":"BS + Avg ESP (Interface)"}},"name":"average_electrostatic_potential_via_band_structure","type":"subworkflow","unitConfigs":[{"config":{"attributes":{"name":"Set Material Index (Interface)","value":"0"}},"index":0,"type":"assignment"}]},{"config":{"attributes":{"name":"Find ESP Values (Interface)"}},"name":"average_electrostatic_potential_find_minima","type":"subworkflow","unitConfigs":[{"config":{"attributes":{"operand":"AVG_ESP_INTERFACE"}},"index":1,"type":"assignment"}]},{"config":{"attributes":{"name":"BS + Avg ESP (interface left)"}},"name":"average_electrostatic_potential_via_band_structure","type":"subworkflow","unitConfigs":[{"config":{"attributes":{"name":"Set Material Index (Interface left)","value":"1"}},"index":0,"type":"assignment"},{"config":{"attributes":{"flowchartId":"pw-bands-calculate-band-gap-left"}},"index":2,"type":"executionBuilder"},{"config":{"attributes":{"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-left"}]}},"index":3,"type":"assignment"},{"config":{"attributes":{"operand":"VBM_LEFT"}},"index":4,"type":"assignment"},{"config":{"attributes":{"flowchartId":"average-electrostatic-potential-left"}},"index":7,"type":"executionBuilder"},{"config":{"attributes":{"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-left"}]}},"index":8,"type":"assignment"}]},{"config":{"attributes":{"name":"Find ESP Value (Interface left)"}},"name":"average_electrostatic_potential_find_minima","type":"subworkflow","unitConfigs":[{"config":{"attributes":{"flowchartId":"python-find-extrema-left"}},"index":0,"type":"executionBuilder"},{"config":{"attributes":{"input":[{"name":"STDOUT","scope":"python-find-extrema-left"}],"operand":"AVG_ESP_LEFT"}},"index":1,"type":"assignment"}]},{"config":{"attributes":{"name":"BS + Avg ESP (interface right)"}},"name":"average_electrostatic_potential_via_band_structure","type":"subworkflow","unitConfigs":[{"config":{"attributes":{"name":"Set Material Index (Interface right)","value":"2"}},"index":0,"type":"assignment"},{"config":{"attributes":{"flowchartId":"pw-bands-calculate-band-gap-right"}},"index":2,"type":"executionBuilder"},{"config":{"attributes":{"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-right"}]}},"index":3,"type":"assignment"},{"config":{"attributes":{"operand":"VBM_RIGHT"}},"index":4,"type":"assignment"},{"config":{"attributes":{"flowchartId":"average-electrostatic-potential-right"}},"index":7,"type":"executionBuilder"},{"config":{"attributes":{"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-right"}]}},"index":8,"type":"assignment"}]},{"config":{"attributes":{"name":"Find ESP Value (Interface right)"}},"name":"average_electrostatic_potential_find_minima","type":"subworkflow","unitConfigs":[{"config":{"attributes":{"flowchartId":"python-find-extrema-right"}},"index":0,"type":"executionBuilder"},{"config":{"attributes":{"input":[{"name":"STDOUT","scope":"python-find-extrema-right"}],"operand":"AVG_ESP_RIGHT"}},"index":1,"type":"assignment"}]},{"name":"valence_band_offset_calc_from_previous_esp_vbm","type":"subworkflow"}]},"variable_cell_relaxation":{"__path__":"variable_cell_relaxation","name":"Variable-cell Relaxation","tags":["variable-cell_relaxation"],"units":[{"name":"variable_cell_relaxation","type":"subworkflow"}]},"wavefunction_amplitude":{"__path__":"wavefunction_amplitude","name":"Wavefunction Amplitude","properties":["atomic_forces","band_structure","fermi_energy","file_content","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"tags":["wfn","wfn_plot"],"units":[{"name":"wavefunction_amplitude","type":"subworkflow"},{"name":"plot_wavefunction","type":"subworkflow"}]},"zero_point_energy":{"__path__":"zero_point_energy","name":"Zero Point Energy","units":[{"name":"zero_point_energy","type":"subworkflow"}]}},"nwchem":{"total_energy":{"__path__":"total_energy","name":"Total Energy","units":[{"name":"total_energy","type":"subworkflow"}]}},"python":{"classification_workflow":{"__path__":"ml/classification_workflow","config":{"attributes":{"isUsingDataset":true}},"name":"Python ML Train Classification","units":[{"name":"train_head","type":"subworkflow"},{"name":"classification_tail","type":"subworkflow"}]},"clustering_workflow":{"__path__":"ml/clustering_workflow","config":{"attributes":{"isUsingDataset":true}},"name":"Python ML Train Clustering","units":[{"name":"train_head","type":"subworkflow"},{"name":"classification_tail","type":"subworkflow"}]},"python_script":{"__path__":"python_script","name":"Python Script","units":[{"name":"python_script","type":"subworkflow"}]},"regression_workflow":{"__path__":"ml/regression_workflow","config":{"attributes":{"isUsingDataset":true}},"name":"Python ML Train Regression","units":[{"name":"train_head","type":"subworkflow"},{"name":"regression_tail","type":"subworkflow"}]}},"shell":{"batch_espresso_pwscf":{"__path__":"batch_espresso_pwscf","name":"Shell Batch Job (Espresso PWSCF)","units":[{"name":"batch_espresso_pwscf","type":"subworkflow"}]},"hello_world":{"__path__":"hello_world","name":"Shell Script","units":[{"name":"hello_world","type":"subworkflow"}]}},"vasp":{"band_gap":{"__path__":"band_gap","name":"Band Gap","units":[{"name":"band_gap","type":"subworkflow"}]},"band_structure":{"__path__":"band_structure","name":"Band Structure","units":[{"name":"band_structure","type":"subworkflow"}]},"band_structure_dos":{"__path__":"band_structure_dos","name":"Band Structure + Density of States","units":[{"name":"band_structure_dos","type":"subworkflow"}]},"dos":{"__path__":"dos","name":"Density of States","units":[{"name":"dos","type":"subworkflow"}]},"fixed_cell_relaxation":{"__path__":"fixed_cell_relaxation","name":"Fixed-cell Relaxation","units":[{"name":"fixed_cell_relaxation","type":"subworkflow"}]},"kpoint_convergence":{"__path__":"kpoint_convergence","name":"K-point Convergence","units":[{"name":"kpoint_convergence","type":"subworkflow"}]},"neb":{"__path__":"neb","name":"Nudged Elastic Band (NEB)","units":[{"name":"initial_final_total_energies","type":"subworkflow"},{"name":"prepare_images","type":"subworkflow"},{"name":"neb_subworkflow","type":"subworkflow"}]},"recalculate_bands":{"__path__":"recalculate_bands","name":"Recalculate Bands","units":[{"name":"recalculate_bands","type":"subworkflow"}]},"surface_energy":{"__path__":"surface_energy","name":"Surface Energy","units":[{"name":"surface_energy","type":"subworkflow"}]},"total_energy":{"__path__":"total_energy","name":"Total Energy","units":[{"name":"total_energy","type":"subworkflow"}]},"variable_cell_relaxation":{"__path__":"variable_cell_relaxation","name":"Variable-cell Relaxation","tags":["variable-cell_relaxation"],"units":[{"name":"variable_cell_relaxation","type":"subworkflow"}]},"zero_point_energy":{"__path__":"zero_point_energy","name":"Zero Point Energy","units":[{"name":"zero_point_energy","type":"subworkflow"}]}}}} +{"subworkflows":{"espresso":{"average_electrostatic_potential":{"__path__":"average_electrostatic_potential","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Average Electrostatic Potential","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"type":"executionBuilder"},{"config":{"execName":"pp.x","flavorName":"pp_electrostatic_potential","name":"Electrostatic Potential (ESP)"},"type":"executionBuilder"},{"attributes":{"results":[{"name":"average_potential_profile"}]},"config":{"execName":"average.x","flavorName":"average_potential","flowchartId":"average-electrostatic-potential","name":"average ESP"},"type":"executionBuilder"}]},"average_electrostatic_potential_find_minima":{"__path__":"average_electrostatic_potential_find_minima","application":{"name":"python","version":"3.10.13"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Find ESP Value","units":[{"config":{"execName":"python","flavorName":"generic:processing:find_extrema:scipy","flowchartId":"python-find-extrema","name":"Find Extrema"},"type":"executionBuilder"},{"config":{"input":[{"name":"STDOUT","scope":"python-find-extrema"}],"name":"Set Average ESP Value","operand":"AVG_ESP","value":"json.loads(STDOUT)['minima']"},"type":"assignment"}]},"average_electrostatic_potential_via_band_structure":{"__path__":"average_electrostatic_potential_via_band_structure","application":{"name":"espresso","version":"6.3"},"config":{"isMultiMaterial":true},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Band Structure + average ESP","units":[{"config":{"name":"Set Material Index","operand":"MATERIAL_INDEX","value":0},"type":"assignment"},{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"type":"executionBuilder"},{"attributes":{"results":[{"name":"band_gaps"}]},"config":{"execName":"pw.x","flavorName":"pw_bands","flowchartId":"pw-bands-calculate-band-gap","name":"pw_bands"},"type":"executionBuilder"},{"config":{"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap"}],"name":"Select indirect band gap","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},"type":"assignment"},{"config":{"name":"Set Valence Band Maximum","operand":"VBM","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},"type":"assignment"},{"config":{"execName":"bands.x","flavorName":"bands","name":"bands"},"type":"executionBuilder"},{"config":{"execName":"pp.x","flavorName":"pp_electrostatic_potential","name":"Electrostatic Potential (ESP)"},"type":"executionBuilder"},{"config":{"execName":"average.x","flavorName":"average_potential","flowchartId":"average-electrostatic-potential","name":"average ESP"},"type":"executionBuilder"},{"config":{"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential"}],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]"},"type":"assignment"}]},"band_gap":{"__path__":"band_gap","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Band Gap","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"execName":"pw.x","flavorName":"pw_nscf","name":"pw_nscf"},"type":"executionBuilder"}]},"band_gap_hse_dos":{"__path__":"band_gap_hse_dos","application":{"name":"espresso","version":"6.3"},"method":{"config":{"subtype":"us","type":"pseudopotential"},"name":"PseudopotentialMethod"},"model":{"config":{"functional":"hse06","subtype":"hybrid","type":"dft"},"name":"DFTModel"},"name":"HSE Band Gap","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf_hse","name":"pw_scf_hse"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"execName":"projwfc.x","flavorName":"projwfc","name":"projwfc"},"type":"executionBuilder"}]},"band_structure":{"__path__":"band_structure","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Band Structure","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"execName":"pw.x","flavorName":"pw_bands","name":"pw_bands"},"type":"executionBuilder"},{"config":{"execName":"bands.x","flavorName":"bands","name":"bands"},"type":"executionBuilder"}]},"band_structure_dos":{"__path__":"band_structure_dos","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Band Structure + Density of States","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"type":"executionBuilder"},{"config":{"execName":"pw.x","flavorName":"pw_bands","name":"pw_bands"},"type":"executionBuilder"},{"config":{"execName":"bands.x","flavorName":"bands","name":"bands"},"type":"executionBuilder"},{"config":{"execName":"pw.x","flavorName":"pw_nscf","name":"pw_nscf"},"type":"executionBuilder"},{"config":{"execName":"projwfc.x","flavorName":"projwfc","name":"projwfc"},"type":"executionBuilder"}]},"band_structure_hse":{"__path__":"band_structure_hse","application":{"name":"espresso","version":"6.3"},"method":{"config":{"subtype":"us","type":"pseudopotential"},"name":"PseudopotentialMethod"},"model":{"config":{"functional":"hse06","subtype":"hybrid","type":"dft"},"name":"DFTModel"},"name":"Band Structure - HSE","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf_bands_hse","name":"pw_scf_bands_hse"},"type":"executionBuilder"},{"config":{"execName":"bands.x","flavorName":"bands","name":"bands"},"type":"executionBuilder"}]},"band_structure_magn":{"__path__":"band_structure_magn","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Spin magnetic bandstructure","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf_magn","name":"pw_scf_magn"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"execName":"pw.x","flavorName":"pw_bands_magn","name":"pw_bands_magn"},"type":"executionBuilder"},{"config":{"execName":"bands.x","flavorName":"bands_spin_up","name":"bands_spin_up"},"type":"executionBuilder"},{"config":{"execName":"bands.x","flavorName":"bands_spin_dn","name":"bands_spin_dn"},"type":"executionBuilder"}]},"band_structure_soc":{"__path__":"band_structure_soc","application":{"name":"espresso","version":"6.3"},"method":{"config":{"subtype":"nc-fr","type":"pseudopotential"},"name":"PseudopotentialMethod","setSearchText":"nc-fr"},"model":{"name":"DFTModel"},"name":"Spin orbit coupling bandstructure","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf_soc","name":"pw_scf_soc"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"execName":"pw.x","flavorName":"pw_bands_soc","name":"pw_bands_soc"},"type":"executionBuilder"},{"config":{"execName":"bands.x","flavorName":"bands","name":"bands"},"type":"executionBuilder"}]},"dielectric_tensor":{"__path__":"dielectric_tensor","application":{"name":"espresso","version":"6.3"},"method":{"config":{"data":{},"subtype":"nc","type":"pseudopotential"},"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Compute Dielectric Function","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"name":"Set No-Symmetry Flag","operand":"NO_SYMMETRY_NO_INVERSION","value":true},"type":"assignment"},{"config":{"execName":"pw.x","flavorName":"pw_nscf","name":"pw_nscf"},"type":"executionBuilder"},{"config":{"execName":"epsilon.x","flavorName":"dielectric_tensor","name":"Compute dielectric function"},"type":"executionBuilder"}]},"dos":{"__path__":"dos","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Density of States","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"type":"executionBuilder"},{"config":{"execName":"pw.x","flavorName":"pw_nscf","name":"pw_nscf"},"type":"executionBuilder"},{"config":{"execName":"projwfc.x","flavorName":"projwfc","name":"projwfc"},"type":"executionBuilder"}]},"electronic_density_mesh":{"__path__":"electronic_density_mesh","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Electronic Density Mesh","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"type":"executionBuilder"},{"config":{"execName":"pp.x","flavorName":"pp_density","name":"pp_density"},"type":"executionBuilder"}]},"esm":{"__path__":"esm","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Effective Screening Medium (ESM)","units":[{"config":{"execName":"pw.x","flavorName":"pw_esm","name":"pw_esm"},"type":"executionBuilder"}]},"esm_relax":{"__path__":"esm_relax","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Effective Screening Medium (ESM) Relax","units":[{"config":{"execName":"pw.x","flavorName":"pw_esm_relax","name":"pw_esm_relax"},"type":"executionBuilder"}]},"espresso_extract_kpoints":{"__path__":"espresso_extract_kpoints","application":{"name":"python","version":"3.10.13"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Extract KPOINTS","units":[{"config":{"execName":"python","flavorName":"espresso_extract_kpoints","name":"Extract kpoints"},"type":"executionBuilder"}]},"espresso_xml_get_qpt_irr":{"__path__":"espresso_xml_get_qpt_irr","application":{"name":"python","version":"3.10.13"},"dynamicSubworkflow":{"name":"getQpointIrrep","subfolder":"espresso"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"espresso-xml-get-qpt-irr","units":[]},"fixed_cell_relaxation":{"__path__":"fixed_cell_relaxation","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Fixed-cell Relaxation","units":[{"config":{"execName":"pw.x","flavorName":"pw_relax","name":"pw_relax"},"functions":{"head":true},"type":"executionBuilder"}]},"gw_band_structure_band_gap_full_frequency":{"__path__":"gw_band_structure_band_gap_full_frequency","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod","setSearchText":".*dojo-oncv.*"},"model":{"name":"DFTModel"},"name":"Full Frequency GW Band Structure + Band Gap","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"execName":"gw.x","flavorName":"gw_bands_full_frequency","name":"gw_bands_full_frequency"},"type":"executionBuilder"}]},"gw_band_structure_band_gap_plasmon_pole":{"__path__":"gw_band_structure_band_gap_plasmon_pole","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod","setSearchText":".*dojo-oncv.*"},"model":{"name":"DFTModel"},"name":"Plasmon-Pole GW Band Structure + Band Gap","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"execName":"gw.x","flavorName":"gw_bands_plasmon_pole","name":"gw_bands_plasmon_pole"},"type":"executionBuilder"}]},"kpoint_convergence":{"__path__":"kpoint_convergence","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"K-point Convergence","units":[{"config":{"flowchartId":"init-tolerance","name":"Init tolerance","operand":"TOL","value":0.00001},"type":"assignment"},{"config":{"flowchartId":"init-increment","name":"Init increment","operand":"INC","value":1},"type":"assignment"},{"config":{"flowchartId":"init-result","name":"Init result","operand":"PREV_RESULT","value":0},"type":"assignment"},{"config":{"flowchartId":"init-parameter","name":"Init parameter","operand":"PARAMETER","value":1},"type":"assignment"},{"config":{"execName":"pw.x","flavorName":"pw_scf_kpt_conv","flowchartId":"pwscf-kpoint-convergence","name":"pw_scf_kpt_conv"},"type":"executionBuilder"},{"config":{"flowchartId":"store-result","input":[{"name":"total_energy","scope":"pwscf-kpoint-convergence"}],"name":"store result","operand":"RESULT","value":"total_energy"},"type":"assignment"},{"config":{"else":"update-result","flowchartId":"check-convergence","maxOccurrences":50,"name":"check convergence","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","then":"convergence-is-reached"},"type":"condition"},{"config":{"flowchartId":"update-result","input":[{"name":"RESULT","scope":"global"}],"name":"update result","operand":"PREV_RESULT","value":"RESULT"},"type":"assignment"},{"config":{"flowchartId":"increment-parameter","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"name":"increment parameter","next":"pwscf-kpoint-convergence","operand":"PREV_RESULT","value":"PARAMETER+INC"},"type":"assignment"},{"config":{"flowchartId":"convergence-is-reached","input":[{"name":"PARAMETER","scope":"global"}],"name":"exit","operand":"PARAMETER","value":"PARAMETER"},"type":"assignment"}]},"neb":{"__path__":"neb","application":{"name":"espresso","version":"6.3"},"config":{"isMultiMaterial":true},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Nudged Elastic Band (NEB)","units":[{"config":{"execName":"neb.x","flavorName":"neb","name":"neb"},"type":"executionBuilder"}]},"ph_init_qpoints":{"__path__":"ph_init_qpoints","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"ph-init-qpoints","units":[{"config":{"execName":"ph.x","flavorName":"ph_init_qpoints","name":"ph_init_qpoints"},"type":"executionBuilder"}]},"ph_single_irr_qpt":{"__path__":"ph_single_irr_qpt","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"ph-single-irr-qpt","units":[{"config":{"execName":"ph.x","flavorName":"ph_single_irr_qpt","name":"ph_single_irr_qpt"},"type":"executionBuilder"}]},"phonon_dispersions":{"__path__":"phonon_dispersions","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Phonon Dispersions","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"type":"executionBuilder"},{"config":{"execName":"ph.x","flavorName":"ph_grid","name":"ph_grid"},"type":"executionBuilder"},{"config":{"execName":"q2r.x","flavorName":"q2r","name":"q2r"},"type":"executionBuilder"},{"config":{"execName":"matdyn.x","flavorName":"matdyn_path","name":"matdyn_path"},"type":"executionBuilder"}]},"phonon_dos":{"__path__":"phonon_dos","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Phonon Density of States","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"type":"executionBuilder"},{"config":{"execName":"ph.x","flavorName":"ph_grid","name":"ph_grid"},"type":"executionBuilder"},{"config":{"execName":"q2r.x","flavorName":"q2r","name":"q2r"},"type":"executionBuilder"},{"config":{"execName":"matdyn.x","flavorName":"matdyn_grid","name":"matdyn_grid"},"type":"executionBuilder"}]},"phonon_dos_dispersion":{"__path__":"phonon_dos_dispersion","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Phonon Density of States + Dispersions","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"type":"executionBuilder"},{"config":{"execName":"ph.x","flavorName":"ph_grid","name":"ph_grid"},"type":"executionBuilder"},{"config":{"execName":"q2r.x","flavorName":"q2r","name":"q2r"},"type":"executionBuilder"},{"config":{"execName":"matdyn.x","flavorName":"matdyn_grid","name":"matdyn_grid"},"type":"executionBuilder"},{"config":{"execName":"matdyn.x","flavorName":"matdyn_path","name":"matdyn_path"},"type":"executionBuilder"}]},"phonon_reduce":{"__path__":"phonon_reduce","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"reduce","units":[{"config":{"execName":"ph.x","flavorName":"ph_grid_restart","name":"ph_grid_restart"},"type":"executionBuilder"},{"config":{"execName":"q2r.x","flavorName":"q2r","name":"q2r"},"type":"executionBuilder"},{"config":{"execName":"matdyn.x","flavorName":"matdyn_grid","name":"matdyn_grid"},"type":"executionBuilder"},{"config":{"execName":"matdyn.x","flavorName":"matdyn_path","name":"matdyn_path"},"type":"executionBuilder"}]},"plot_wavefunction":{"__path__":"plot_wavefunction","application":{"name":"python","version":"3.10.13"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Plot Wavefunction","properties":["file_content"],"units":[{"attributes":{"results":[{"name":"file_content"}]},"config":{"execName":"python","flavorName":"plot_wavefunction","name":"plot WFN"},"type":"executionBuilder"}]},"post_processor":{"__path__":"post_processor","application":{"name":"shell","version":"5.1.8"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"post-processor","units":[{"config":{"execName":"sh","flavorName":"espresso_collect_dynmat","name":"shell"},"type":"executionBuilder"}]},"pre_processor":{"__path__":"pre_processor","application":{"name":"shell","version":"5.1.8"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"pre-processor","units":[{"config":{"execName":"sh","flavorName":"espresso_link_outdir_save","name":"shell"},"type":"executionBuilder"}]},"pw_scf":{"__path__":"pw_scf","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"pw-scf","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"functions":{"head":true},"type":"executionBuilder"}]},"recalculate_bands":{"__path__":"recalculate_bands","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Recalculate Bands","units":[{"config":{"execName":"pw.x","flavorName":"pw_bands","name":"pw_bands"},"type":"executionBuilder"},{"config":{"execName":"bands.x","flavorName":"bands","name":"bands"},"type":"executionBuilder"}]},"surface_energy":{"__path__":"surface_energy","application":{"name":"espresso","version":"6.3"},"dynamicSubworkflow":{"name":"surfaceEnergy"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Surface Energy","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"type":"executionBuilder"}]},"total_energy":{"__path__":"total_energy","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Total Energy","tags":["default"],"units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"functions":{"head":true},"type":"executionBuilder"}]},"valence_band_offset_calc_from_previous_esp_vbm":{"__path__":"valence_band_offset_calc_from_previous_esp_vbm","application":{"name":"python","version":"3.10.13"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Calculate VBO","units":[{"config":{"name":"Difference of valence band maxima","operand":"VBM_DIFF","value":"VBM_LEFT - VBM_RIGHT"},"type":"assignment"},{"config":{"name":"Difference of macroscopically averaged ESP in bulk","operand":"AVG_ESP_DIFF","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]"},"type":"assignment"},{"config":{"name":"Lineup of macroscopically averaged ESP in interface","operand":"ESP_LINEUP","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])"},"type":"assignment"},{"config":{"name":"Valence Band Offset","operand":"VALENCE_BAND_OFFSET","results":[{"name":"valence_band_offset"}],"value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))"},"type":"assignment"}]},"variable_cell_relaxation":{"__path__":"variable_cell_relaxation","application":{"name":"espresso","version":"6.3"},"config":{"systemName":"espresso-variable-cell-relaxation"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Variable-cell Relaxation","tags":["variable-cell_relaxation"],"units":[{"config":{"execName":"pw.x","flavorName":"pw_vc-relax","name":"pw_vc-relax"},"functions":{"head":true},"type":"executionBuilder"}]},"wavefunction_amplitude":{"__path__":"wavefunction_amplitude","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Wavefunction Amplitude","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure","wavefunction_amplitude"],"tags":["wfn","wfn_plot"],"units":[{"attributes":{"results":[{"name":"atomic_forces"},{"name":"band_structure"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}]},"config":{"execName":"pw.x","flavorName":"pw_scf","flowchartId":"pw-scf","name":"pw_scf"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"flowchartId":"extract-band-energies","input":[{"name":"band_structure","scope":"pw-scf"}],"name":"Extract Band Energies","operand":"band_energies","value":"[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]"},"type":"assignment"},{"config":{"flowchartId":"indices-below-fermi","input":[{"name":"fermi_energy","scope":"pw-scf"}],"name":"Find Indices Below Fermi","operand":"indices_below_fermi","value":"[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]"},"type":"assignment"},{"config":{"name":"Store Band Below EF","operand":"KBAND_VALUE_BELOW_EF","value":"indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1"},"type":"assignment"},{"config":{"name":"Select Band","operand":"KBAND_VALUE","value":"KBAND_VALUE_BELOW_EF"},"type":"assignment"},{"attributes":{"results":[{"name":"wavefunction_amplitude"}]},"config":{"execName":"pp.x","flavorName":"pp_wfn","flowchartId":"pp-wfn","input":[{"name":"KBAND_VALUE"}],"name":"pp_wfn"},"type":"executionBuilder"}]},"zero_point_energy":{"__path__":"zero_point_energy","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Zero Point Energy","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"type":"executionBuilder"},{"config":{"execName":"ph.x","flavorName":"ph_gamma","name":"ph_zpe"},"type":"executionBuilder"}]}},"nwchem":{"total_energy":{"__path__":"total_energy","application":{"name":"nwchem","version":"7.0.2"},"method":{"name":"LocalOrbitalMethod"},"model":{"name":"DFTModel"},"name":"Total Energy","units":[{"config":{"execName":"nwchem","flavorName":"nwchem_total_energy","name":"nwchem_total_energy"},"functions":{"head":true},"type":"executionBuilder"}]}},"python":{"classification_tail":{"__path__":"ml/classification_tail","application":{"name":"python","version":"3.10.13"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Machine Learning","units":[{"attributes":{"enableRender":true},"config":{"execName":"python","flavorName":"pyml:setup_variables_packages","name":"Setup Variables and Packages"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:read_csv:pandas","name":"Data Input"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:train_test_split:sklearn","name":"Train Test Split"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:pre_processing:standardization:sklearn","name":"Data Standardize"},"type":"executionBuilder"},{"attributes":{"results":[{"name":"workflow:pyml_predict"}],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"]},"config":{"execName":"python","flavorName":"pyml:model:random_forest_classification:sklearn","name":"Model Train and Predict"},"type":"executionBuilder"},{"attributes":{"postProcessors":[{"name":"remove_virtual_environment"}],"results":[{"name":"file_content"}],"tags":["remove-all-results"]},"config":{"execName":"python","flavorName":"pyml:post_processing:roc_curve:sklearn","name":"ROC Curve Plot"},"type":"executionBuilder"}]},"clustering_tail":{"__path__":"ml/clustering_tail","application":{"name":"python","version":"3.10.13"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Machine Learning","units":[{"attributes":{"enableRender":true},"config":{"execName":"python","flavorName":"pyml:setup_variables_packages","name":"Setup Variables and Packages"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:read_csv:pandas","name":"Data Input"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:train_test_split:sklearn","name":"Train Test Split"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:pre_processing:standardization:sklearn","name":"Data Standardize"},"type":"executionBuilder"},{"attributes":{"results":[{"name":"workflow:pyml_predict"}],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"]},"config":{"execName":"python","flavorName":"pyml:model:k_means_clustering:sklearn","name":"Model Train and Predict"},"type":"executionBuilder"},{"attributes":{"postProcessors":[{"name":"remove_virtual_environment"}],"results":[{"name":"file_content"},{"name":"file_content"},{"name":"file_content"}],"tags":["remove-all-results"]},"config":{"execName":"python","flavorName":"pyml:post_processing:pca_2d_clusters:matplotlib","name":"2D PCA Clusters Plot"},"type":"executionBuilder"}]},"python_script":{"__path__":"python_script","application":{"name":"python","version":"3.10.13"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Python Script","units":[{"config":{"execName":"python","flavorName":"hello_world","name":"python"},"type":"executionBuilder"}]},"regression_tail":{"__path__":"ml/regression_tail","application":{"name":"python","version":"3.10.13"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Machine Learning","units":[{"attributes":{"enableRender":true},"config":{"execName":"python","flavorName":"pyml:setup_variables_packages","name":"Setup Variables and Packages"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:read_csv:pandas","name":"Data Input"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:train_test_split:sklearn","name":"Train Test Split"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:pre_processing:standardization:sklearn","name":"Data Standardize"},"type":"executionBuilder"},{"attributes":{"results":[{"name":"workflow:pyml_predict"}],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"]},"config":{"execName":"python","flavorName":"pyml:model:multilayer_perceptron:sklearn","name":"Model Train and Predict"},"type":"executionBuilder"},{"attributes":{"postProcessors":[{"name":"remove_virtual_environment"}],"results":[{"name":"file_content"}],"tags":["remove-all-results"]},"config":{"execName":"python","flavorName":"pyml:post_processing:parity_plot:matplotlib","name":"Parity Plot"},"type":"executionBuilder"}]},"train_head":{"__path__":"ml/train_head","application":{"name":"python","version":"3.10.13"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Set Up the Job","units":[{"config":{"flowchartId":"head-set-predict-status","name":"Set Workflow Mode","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","tags":["pyml:workflow-type-setter"],"value":"False"},"type":"assignment"},{"config":{"enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""},"type":"object_storage"}],"name":"Fetch Dataset","source":"object_storage"},"type":"io"},{"config":{"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"name":"Train or Predict?","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","then":"head-fetch-trained-model"},"type":"condition"},{"config":{"enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""},"type":"object_storage"}],"name":"Fetch Trained Model as file","source":"object_storage","tags":["set-io-unit-filenames"]},"type":"io"},{"config":{"flowchartId":"end-of-ml-train-head","name":"End Setup","operand":"IS_SETUP_COMPLETE","value":"True"},"type":"assignment"}]}},"shell":{"batch_espresso_pwscf":{"__path__":"batch_espresso_pwscf","application":{"name":"shell","version":"5.1.8"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Shell Batch Job (Espresso PWSCF)","units":[{"config":{"execName":"sh","flavorName":"job_espresso_pw_scf","name":"shell"},"type":"executionBuilder"}]},"hello_world":{"__path__":"hello_world","application":{"name":"shell","version":"5.1.8"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Shell Hello World","units":[{"config":{"execName":"sh","flavorName":"hello_world","name":"shell"},"type":"executionBuilder"}]}},"vasp":{"band_gap":{"__path__":"band_gap","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Band Gap","units":[{"config":{"execName":"vasp","flavorName":"vasp","name":"vasp"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"execName":"vasp","flavorName":"vasp_nscf","name":"vasp_nscf"},"type":"executionBuilder"}]},"band_structure":{"__path__":"band_structure","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Band Structure","units":[{"config":{"execName":"vasp","flavorName":"vasp","name":"vasp"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"execName":"vasp","flavorName":"vasp_bands","name":"vasp_bands"},"type":"executionBuilder"}]},"band_structure_dos":{"__path__":"band_structure_dos","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Band Structure + Density of States","units":[{"config":{"execName":"vasp","flavorName":"vasp","name":"vasp"},"functions":{"addResults":[{"name":"density_of_states"}],"head":true},"type":"executionBuilder"},{"config":{"execName":"vasp","flavorName":"vasp_bands","name":"vasp_bands"},"type":"executionBuilder"}]},"dos":{"__path__":"dos","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Density of States","units":[{"config":{"execName":"vasp","flavorName":"vasp","name":"vasp"},"functions":{"addResults":[{"name":"density_of_states"}],"head":true},"type":"executionBuilder"}]},"fixed_cell_relaxation":{"__path__":"fixed_cell_relaxation","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Fixed-cell Relaxation","units":[{"config":{"execName":"vasp","flavorName":"vasp_relax","name":"vasp_relax"},"functions":{"head":true},"type":"executionBuilder"}]},"initial_final_total_energies":{"__path__":"initial_final_total_energies","application":{"name":"vasp","version":"5.4.4"},"config":{"functions":{"setDefaultCompute":null},"isMultiMaterial":true},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Initial/Final Total Energies","units":[{"config":{"execName":"vasp","flavorName":"vasp_neb_initial","name":"vasp_neb_initial"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"execName":"vasp","flavorName":"vasp_neb_final","name":"vasp_neb_final"},"type":"executionBuilder"}]},"kpoint_convergence":{"__path__":"kpoint_convergence","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"K-point Convergence","units":[{"config":{"flowchartId":"init-tolerance","name":"Init tolerance","operand":"TOL","value":0.00001},"type":"assignment"},{"config":{"flowchartId":"init-increment","name":"Init increment","operand":"INC","value":1},"type":"assignment"},{"config":{"flowchartId":"init-result","name":"Init result","operand":"PREV_RESULT","value":0},"type":"assignment"},{"config":{"flowchartId":"init-parameter","name":"Init parameter","operand":"PARAMETER","value":1},"type":"assignment"},{"config":{"execName":"vasp","flavorName":"vasp_kpt_conv","flowchartId":"vasp-kpoint-convergence","name":"vasp_kpt_conv"},"type":"executionBuilder"},{"config":{"flowchartId":"store-result","input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"name":"store result","operand":"RESULT","value":"total_energy"},"type":"assignment"},{"config":{"else":"update-result","flowchartId":"check-convergence","maxOccurrences":50,"name":"check convergence","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","then":"convergence-is-reached"},"type":"condition"},{"config":{"flowchartId":"update-result","input":[{"name":"RESULT","scope":"global"}],"name":"update result","operand":"PREV_RESULT","value":"RESULT"},"type":"assignment"},{"config":{"flowchartId":"increment-parameter","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"name":"increment parameter","next":"vasp-kpoint-convergence","operand":"PREV_RESULT","value":"PARAMETER+INC"},"type":"assignment"},{"config":{"flowchartId":"convergence-is-reached","input":[{"name":"PARAMETER","scope":"global"}],"name":"exit","operand":"PARAMETER","value":"PARAMETER"},"type":"assignment"}]},"neb_subworkflow":{"__path__":"neb_subworkflow","application":{"name":"vasp","version":"5.4.4"},"config":{"isMultiMaterial":true},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Nudged Elastic Band (NEB)","units":[{"config":{"execName":"vasp","flavorName":"vasp_neb","name":"vasp_neb"},"type":"executionBuilder"}]},"prepare_images":{"__path__":"prepare_images","application":{"name":"shell","version":"5.1.8"},"config":{"isMultiMaterial":true},"method":{"name":"Method"},"model":{"name":"Model"},"name":"Prepare Directories","units":[{"config":{"execName":"sh","flavorName":"bash_vasp_prepare_neb_images","name":"prepare-neb-images"},"type":"executionBuilder"}]},"recalculate_bands":{"__path__":"recalculate_bands","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Recalculate Bands","units":[{"config":{"execName":"vasp","flavorName":"vasp_bands","name":"vasp_bands"},"functions":{"head":true},"type":"executionBuilder"}]},"surface_energy":{"__path__":"surface_energy","application":{"name":"vasp","version":"5.4.4"},"dynamicSubworkflow":{"name":"surfaceEnergy"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Surface Energy","units":[{"config":{"execName":"vasp","flavorName":"vasp_symprec","name":"vasp_symprec"},"functions":{"head":true},"type":"executionBuilder"}]},"total_energy":{"__path__":"total_energy","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Total Energy","units":[{"config":{"execName":"vasp","flavorName":"vasp","name":"vasp"},"functions":{"head":true},"type":"executionBuilder"}]},"variable_cell_relaxation":{"__path__":"variable_cell_relaxation","application":{"name":"vasp","version":"5.4.4"},"config":{"systemName":"vasp-variable-cell-relaxation"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Variable-cell Relaxation","tags":["variable-cell_relaxation"],"units":[{"config":{"execName":"vasp","flavorName":"vasp_vc_relax","name":"vasp_vc_relax"},"functions":{"head":true},"type":"executionBuilder"}]},"zero_point_energy":{"__path__":"zero_point_energy","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Zero Point Energy","units":[{"config":{"execName":"vasp","flavorName":"vasp_zpe","name":"vasp_zpe"},"functions":{"head":true},"type":"executionBuilder"}]}}},"workflows":{"espresso":{"average_electrostatic_potential":{"__path__":"average_electrostatic_potential","name":"Average Electrostatic Potential","units":[{"name":"average_electrostatic_potential","type":"subworkflow"}]},"band_gap":{"__path__":"band_gap","name":"Band Gap","units":[{"name":"band_gap","type":"subworkflow"}]},"band_gap_dos_hse":{"__path__":"band_gap_dos_hse","name":"Band Gap + DoS - HSE","units":[{"name":"band_gap_hse_dos","type":"subworkflow"}]},"band_structure":{"__path__":"band_structure","name":"Band Structure","units":[{"name":"band_structure","type":"subworkflow"}]},"band_structure_dos":{"__path__":"band_structure_dos","name":"Band Structure + Density of States","units":[{"name":"band_structure_dos","type":"subworkflow"}]},"band_structure_hse":{"__path__":"band_structure_hse","name":"Band Structure - HSE","units":[{"config":{"attributes":{"name":"Preliminary SCF Calculation"}},"name":"pw_scf","type":"subworkflow"},{"name":"espresso_extract_kpoints","type":"subworkflow"},{"config":{"attributes":{"name":"Main HSE Run"}},"name":"band_structure_hse","type":"subworkflow"}]},"band_structure_magn":{"__path__":"band_structure_magn","name":"Bandstructure with spin magnetism - QE","units":[{"config":{"attributes":{"name":"Bandstructure with spin magnetism"}},"name":"band_structure_magn","type":"subworkflow"}]},"band_structure_soc":{"__path__":"band_structure_soc","name":"Bandstructure with SOC - QE","units":[{"config":{"attributes":{"name":"Bandstructure with SOC"}},"name":"band_structure_soc","type":"subworkflow"}]},"dielectric_tensor":{"__path__":"dielectric_tensor","name":"Dielectric Function","units":[{"name":"dielectric_tensor","type":"subworkflow"}]},"dos":{"__path__":"dos","name":"Density of States","units":[{"name":"dos","type":"subworkflow"}]},"electronic_density_mesh":{"__path__":"electronic_density_mesh","name":"Electronic Density Mesh","units":[{"name":"electronic_density_mesh","type":"subworkflow"}]},"esm":{"__path__":"esm","name":"Effective Screening Medium (ESM)","units":[{"name":"esm","type":"subworkflow"}]},"esm_relax":{"__path__":"esm_relax","name":"Effective Screening Medium (ESM) Relax","units":[{"name":"esm_relax","type":"subworkflow"}]},"fixed_cell_relaxation":{"__path__":"fixed_cell_relaxation","name":"Fixed-cell Relaxation","units":[{"name":"fixed_cell_relaxation","type":"subworkflow"}]},"gw_band_structure_band_gap_full_frequency":{"__path__":"gw_band_structure_band_gap_full_frequency","name":"Full Frequency GW Band Structure + Band Gap","units":[{"name":"gw_band_structure_band_gap_full_frequency","type":"subworkflow"}]},"gw_band_structure_band_gap_plasmon_pole":{"__path__":"gw_band_structure_band_gap_plasmon_pole","name":"Plasmon-Pole GW Band Structure + Band Gap","units":[{"name":"gw_band_structure_band_gap_plasmon_pole","type":"subworkflow"}]},"kpoint_convergence":{"__path__":"kpoint_convergence","name":"K-point Convergence","units":[{"name":"kpoint_convergence","type":"subworkflow"}]},"neb":{"__path__":"neb","name":"Nudged Elastic Band (NEB)","units":[{"name":"neb","type":"subworkflow"}]},"phonon_dispersions":{"__path__":"phonon_dispersions","name":"Phonon Dispersions","units":[{"name":"phonon_dispersions","type":"subworkflow"}]},"phonon_dos":{"__path__":"phonon_dos","name":"Phonon Density of States","units":[{"name":"phonon_dos","type":"subworkflow"}]},"phonon_dos_dispersion":{"__path__":"phonon_dos_dispersion","name":"Phonon Density of States + Dispersions","units":[{"name":"phonon_dos_dispersion","type":"subworkflow"}]},"phonon_map":{"__path__":"phonon_map","name":"Phonon Map","units":[{"name":"pw_scf","type":"subworkflow"},{"name":"ph_init_qpoints","type":"subworkflow"},{"name":"espresso_xml_get_qpt_irr","type":"subworkflow"},{"config":{"functions":{"setDefaultCompute":null},"input":{"name":"Q_POINTS"},"mapUnit":true},"name":"phonon_map_workflow","type":"workflow","units":[{"name":"pre_processor","type":"subworkflow"},{"name":"ph_single_irr_qpt","type":"subworkflow"},{"name":"post_processor","type":"subworkflow"}]},{"name":"phonon_reduce","type":"subworkflow"}]},"recalculate_bands":{"__path__":"recalculate_bands","name":"Recalculate Bands","units":[{"name":"recalculate_bands","type":"subworkflow"}]},"surface_energy":{"__path__":"surface_energy","name":"Surface Energy","units":[{"name":"surface_energy","type":"subworkflow"}]},"total_energy":{"__path__":"total_energy","name":"Total Energy","tags":["default"],"units":[{"name":"total_energy","type":"subworkflow"}]},"valence_band_offset":{"__path__":"valence_band_offset","name":"Valence Band Offset (2D)","units":[{"config":{"attributes":{"name":"BS + Avg ESP (Interface)"}},"name":"average_electrostatic_potential_via_band_structure","type":"subworkflow","unitConfigs":[{"config":{"attributes":{"name":"Set Material Index (Interface)","value":"0"}},"index":0,"type":"assignment"}]},{"config":{"attributes":{"name":"Find ESP Values (Interface)"}},"name":"average_electrostatic_potential_find_minima","type":"subworkflow","unitConfigs":[{"config":{"attributes":{"operand":"AVG_ESP_INTERFACE"}},"index":1,"type":"assignment"}]},{"config":{"attributes":{"name":"BS + Avg ESP (interface left)"}},"name":"average_electrostatic_potential_via_band_structure","type":"subworkflow","unitConfigs":[{"config":{"attributes":{"name":"Set Material Index (Interface left)","value":"1"}},"index":0,"type":"assignment"},{"config":{"attributes":{"flowchartId":"pw-bands-calculate-band-gap-left"}},"index":2,"type":"executionBuilder"},{"config":{"attributes":{"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-left"}]}},"index":3,"type":"assignment"},{"config":{"attributes":{"operand":"VBM_LEFT"}},"index":4,"type":"assignment"},{"config":{"attributes":{"flowchartId":"average-electrostatic-potential-left"}},"index":7,"type":"executionBuilder"},{"config":{"attributes":{"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-left"}]}},"index":8,"type":"assignment"}]},{"config":{"attributes":{"name":"Find ESP Value (Interface left)"}},"name":"average_electrostatic_potential_find_minima","type":"subworkflow","unitConfigs":[{"config":{"attributes":{"flowchartId":"python-find-extrema-left"}},"index":0,"type":"executionBuilder"},{"config":{"attributes":{"input":[{"name":"STDOUT","scope":"python-find-extrema-left"}],"operand":"AVG_ESP_LEFT"}},"index":1,"type":"assignment"}]},{"config":{"attributes":{"name":"BS + Avg ESP (interface right)"}},"name":"average_electrostatic_potential_via_band_structure","type":"subworkflow","unitConfigs":[{"config":{"attributes":{"name":"Set Material Index (Interface right)","value":"2"}},"index":0,"type":"assignment"},{"config":{"attributes":{"flowchartId":"pw-bands-calculate-band-gap-right"}},"index":2,"type":"executionBuilder"},{"config":{"attributes":{"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-right"}]}},"index":3,"type":"assignment"},{"config":{"attributes":{"operand":"VBM_RIGHT"}},"index":4,"type":"assignment"},{"config":{"attributes":{"flowchartId":"average-electrostatic-potential-right"}},"index":7,"type":"executionBuilder"},{"config":{"attributes":{"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-right"}]}},"index":8,"type":"assignment"}]},{"config":{"attributes":{"name":"Find ESP Value (Interface right)"}},"name":"average_electrostatic_potential_find_minima","type":"subworkflow","unitConfigs":[{"config":{"attributes":{"flowchartId":"python-find-extrema-right"}},"index":0,"type":"executionBuilder"},{"config":{"attributes":{"input":[{"name":"STDOUT","scope":"python-find-extrema-right"}],"operand":"AVG_ESP_RIGHT"}},"index":1,"type":"assignment"}]},{"name":"valence_band_offset_calc_from_previous_esp_vbm","type":"subworkflow"}]},"variable_cell_relaxation":{"__path__":"variable_cell_relaxation","name":"Variable-cell Relaxation","tags":["variable-cell_relaxation"],"units":[{"name":"variable_cell_relaxation","type":"subworkflow"}]},"wavefunction_amplitude":{"__path__":"wavefunction_amplitude","name":"Wavefunction Amplitude","properties":["atomic_forces","band_structure","fermi_energy","file_content","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"tags":["wfn","wfn_plot"],"units":[{"name":"wavefunction_amplitude","type":"subworkflow"},{"name":"plot_wavefunction","type":"subworkflow"}]},"zero_point_energy":{"__path__":"zero_point_energy","name":"Zero Point Energy","units":[{"name":"zero_point_energy","type":"subworkflow"}]}},"nwchem":{"total_energy":{"__path__":"total_energy","name":"Total Energy","units":[{"name":"total_energy","type":"subworkflow"}]}},"python":{"classification_workflow":{"__path__":"ml/classification_workflow","config":{"attributes":{"isUsingDataset":true}},"name":"Python ML Train Classification","units":[{"name":"train_head","type":"subworkflow"},{"name":"classification_tail","type":"subworkflow"}]},"clustering_workflow":{"__path__":"ml/clustering_workflow","config":{"attributes":{"isUsingDataset":true}},"name":"Python ML Train Clustering","units":[{"name":"train_head","type":"subworkflow"},{"name":"classification_tail","type":"subworkflow"}]},"python_script":{"__path__":"python_script","name":"Python Script","units":[{"name":"python_script","type":"subworkflow"}]},"regression_workflow":{"__path__":"ml/regression_workflow","config":{"attributes":{"isUsingDataset":true}},"name":"Python ML Train Regression","units":[{"name":"train_head","type":"subworkflow"},{"name":"regression_tail","type":"subworkflow"}]}},"shell":{"batch_espresso_pwscf":{"__path__":"batch_espresso_pwscf","name":"Shell Batch Job (Espresso PWSCF)","units":[{"name":"batch_espresso_pwscf","type":"subworkflow"}]},"hello_world":{"__path__":"hello_world","name":"Shell Script","units":[{"name":"hello_world","type":"subworkflow"}]}},"vasp":{"band_gap":{"__path__":"band_gap","name":"Band Gap","units":[{"name":"band_gap","type":"subworkflow"}]},"band_structure":{"__path__":"band_structure","name":"Band Structure","units":[{"name":"band_structure","type":"subworkflow"}]},"band_structure_dos":{"__path__":"band_structure_dos","name":"Band Structure + Density of States","units":[{"name":"band_structure_dos","type":"subworkflow"}]},"dos":{"__path__":"dos","name":"Density of States","units":[{"name":"dos","type":"subworkflow"}]},"fixed_cell_relaxation":{"__path__":"fixed_cell_relaxation","name":"Fixed-cell Relaxation","units":[{"name":"fixed_cell_relaxation","type":"subworkflow"}]},"kpoint_convergence":{"__path__":"kpoint_convergence","name":"K-point Convergence","units":[{"name":"kpoint_convergence","type":"subworkflow"}]},"neb":{"__path__":"neb","name":"Nudged Elastic Band (NEB)","units":[{"name":"initial_final_total_energies","type":"subworkflow"},{"name":"prepare_images","type":"subworkflow"},{"name":"neb_subworkflow","type":"subworkflow"}]},"recalculate_bands":{"__path__":"recalculate_bands","name":"Recalculate Bands","units":[{"name":"recalculate_bands","type":"subworkflow"}]},"surface_energy":{"__path__":"surface_energy","name":"Surface Energy","units":[{"name":"surface_energy","type":"subworkflow"}]},"total_energy":{"__path__":"total_energy","name":"Total Energy","units":[{"name":"total_energy","type":"subworkflow"}]},"variable_cell_relaxation":{"__path__":"variable_cell_relaxation","name":"Variable-cell Relaxation","tags":["variable-cell_relaxation"],"units":[{"name":"variable_cell_relaxation","type":"subworkflow"}]},"zero_point_energy":{"__path__":"zero_point_energy","name":"Zero Point Energy","units":[{"name":"zero_point_energy","type":"subworkflow"}]}}}} diff --git a/scripts/processors/utils/createWorkflow.ts b/scripts/processors/utils/createWorkflow.ts index cffcee1a..bda75425 100644 --- a/scripts/processors/utils/createWorkflow.ts +++ b/scripts/processors/utils/createWorkflow.ts @@ -22,7 +22,7 @@ import { type WorkflowUnitData = { name: string; type: "workflow"; - units: UnitData[]; + units: UnitDataArray; config?: WorkflowUnitConfig; }; @@ -34,6 +34,7 @@ type SubworkflowUnitData = { }; type UnitData = WorkflowUnitData | SubworkflowUnitData; +type UnitDataArray = [SubworkflowUnitData, ...UnitData[]]; type UnitConfig = { index: number; @@ -50,70 +51,55 @@ type UnitConfig = { type WorkflowConfig = AttributesConfig & Partial; -type WorkflowUnitConfig = WorkflowConfig & { - mapUnit?: boolean; - input: { +type MapUnitConfig = { + mapUnit: boolean; + input?: { name: string; }; }; +type WorkflowUnitConfig = WorkflowConfig & MapUnitConfig; + type SubworkflowUnitConfig = UnitConfig & { index: number }; export type WorkflowData = { name: string; - units: UnitData[]; + units: UnitDataArray; config?: WorkflowConfig; }; export type SubworkflowsTree = Record>; -type WorkflowUnit = { - type: "workflow"; - config?: WorkflowUnitConfig; - workflow: WorkflowSchema; -}; - -type SubworkflowUnit = { - type: "subworkflow"; - subworkflow: SubworkflowSchema; -}; - -type AnyUnit = WorkflowUnit | SubworkflowUnit; - -function addMapUnitToWorkflow(workflow: WorkflowSchema, unit: WorkflowUnit) { - if (unit.type !== "workflow") { - throw new Error("Unit type does not match!"); - } - - if (!unit.config?.mapUnit) { - throw new Error("Not map unit!"); - } - +function addWorkflowToWorkflow>( + rootWorkflow: T, + nestedWorkflow: WorkflowSchema, + config?: MapUnitConfig, +) { const workflowId = generateDefaultWorkflowId(); const mapUnit: MapUnitSchema = { ...defaultMapConfig, workflowId, - input: { ...defaultMapConfig.input, ...unit.config?.input }, + input: { ...defaultMapConfig.input, ...config?.input }, flowchartId: generateFlowChartId(defaultMapConfig.name), }; const mapWorkflow: WorkflowSchema = { _id: workflowId, - ...unit.workflow, + ...nestedWorkflow, }; return { - ...workflow, - workflows: [...workflow.workflows, mapWorkflow], - units: [...workflow.units, mapUnit], + ...rootWorkflow, + workflows: [...(rootWorkflow.workflows || []), mapWorkflow], + units: [...(rootWorkflow.units || []), mapUnit], }; } -function addSubworkflowToWorkflow( - workflow: WorkflowSchema, +function addSubworkflowToWorkflow>( + workflow: T, subworkflow: SubworkflowSchema, -): WorkflowSchema { +) { const name = subworkflow.name || defaultSubworkflowUnitConfig.name; const subworkflowUnit: SubworkflowUnitSchema = { @@ -123,10 +109,13 @@ function addSubworkflowToWorkflow( flowchartId: generateFlowChartId(name), }; + const subworkflows = [...(workflow.subworkflows || []), subworkflow]; + return { ...workflow, - subworkflows: [...workflow.subworkflows, subworkflow], - units: [...workflow.units, subworkflowUnit], + units: [...(workflow.units || []), subworkflowUnit], + subworkflows, + properties: [...new Set(subworkflows.map((x) => x.properties || []).flat())], }; } @@ -181,73 +170,34 @@ function createSubworkflowFromUnitData( return createSubworkflow(patchedSubworkflowData, cache); } -function createWorkflowFromSubworkflow(subworkflow: SubworkflowSchema): WorkflowSchema { - const config: WorkflowSchema = { - _id: generateWorkflowId(subworkflow), - name: subworkflow.name, - subworkflows: [subworkflow], - units: [ - { - _id: subworkflow._id, - type: "subworkflow", - name: subworkflow.name, - preProcessors: [], - postProcessors: [], - monitors: [], - results: [], - flowchartId: generateFlowChartId(subworkflow.name), - }, - ], - properties: subworkflow.properties, - workflows: [], - }; - return config; -} - function createWorkflowFromWorkflowData( appName: string, workflowData: WorkflowData, subworkflows: SubworkflowsTree, cache: string[] = [], ): WorkflowSchema { - const wfUnits = workflowData.units.map((unitData): AnyUnit => { - const { type } = unitData; - - if (type === "workflow") { - return { - type, - config: unitData.config, - workflow: createWorkflowFromWorkflowData(appName, unitData, subworkflows, cache), - }; - } - - return { - type, - subworkflow: createSubworkflowFromUnitData(appName, unitData, subworkflows, cache), - }; - }); - - const [firstUnit, ...restUnits] = wfUnits; - - if (!firstUnit) { - throw new Error("No units found!"); - } + const initialWorkflow: Omit = { + subworkflows: [], + units: [], + properties: [], + workflows: [], + }; - const workflow = - firstUnit.type === "workflow" - ? firstUnit.workflow - : createWorkflowFromSubworkflow(firstUnit.subworkflow); + const workflowWithUnits = workflowData.units.reduce((acc, unitData) => { + if (unitData.type === "workflow") { + const workflow = createWorkflowFromWorkflowData(appName, unitData, subworkflows, cache); + return addWorkflowToWorkflow(acc, workflow, unitData.config); + } - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { name: _name, ...workflowWithUnits } = restUnits.reduce((acc, wfUnit) => { - return wfUnit.type === "workflow" - ? addMapUnitToWorkflow(acc, wfUnit) - : addSubworkflowToWorkflow(acc, wfUnit.subworkflow); - }, workflow); + const subworkflow = createSubworkflowFromUnitData(appName, unitData, subworkflows, cache); + return addSubworkflowToWorkflow(acc, subworkflow); + }, initialWorkflow); return { + _id: generateWorkflowId(workflowWithUnits.subworkflows[0]), name: workflowData.name, ...workflowWithUnits, + ...workflowData.config?.attributes, }; } diff --git a/scripts/processors/utils/utils.ts b/scripts/processors/utils/utils.ts index c93182ee..31c53faf 100644 --- a/scripts/processors/utils/utils.ts +++ b/scripts/processors/utils/utils.ts @@ -24,15 +24,15 @@ export function validateData(data: T, schemaId: string): T { return data; } -export function generateDefaultWorkflowId() { +export function generateDefaultWorkflowId(): string { return Utils.uuid.getUUID(); } -export function generateFlowChartId(unitName: string) { +export function generateFlowChartId(unitName: string): string { return Utils.uuid.getUUIDFromNamespace(`flowchart-${unitName}`); } -export function generateBuilderFlowChartId(seed: string, cache: string[] = []) { +export function generateBuilderFlowChartId(seed: string, cache: string[] = []): string { const countInCache = cache.filter((s) => s === seed).length; cache.push(seed); @@ -41,7 +41,7 @@ export function generateBuilderFlowChartId(seed: string, cache: string[] = []) { return Utils.uuid.getUUIDFromNamespace(seedWithSuffix); } -export function generateWorkflowId(subworkflow: SubworkflowSchema) { +export function generateWorkflowId(subworkflow: SubworkflowSchema): string { const { name, properties, application } = subworkflow; const propsInfo = properties?.length ? properties.sort().join(",") : ""; const swInfo = [subworkflow].map((sw) => sw.name || "unknown").join(","); @@ -57,7 +57,7 @@ export function generateSubworkflowId( application?: ApplicationSchema, model?: BaseModel, method?: BaseMethod, -) { +): string { const appName = application?.name || ""; const modelInfo = model ? `${model.type}-${model.subtype || ""}` : ""; const methodInfo = method ? `${method.type}-${method.subtype || ""}` : ""; diff --git a/src/py/mat3ra/standata/data/workflows.py b/src/py/mat3ra/standata/data/workflows.py index abd480e3..412be6a6 100644 --- a/src/py/mat3ra/standata/data/workflows.py +++ b/src/py/mat3ra/standata/data/workflows.py @@ -1,3 +1,3 @@ import json -workflows_data = json.loads(r'''{"standataConfig":{"categories":{"properties":["atomic_forces","average_potential_profile","band_gaps","band_structure","charge_density_profile","density_of_states","dielectric_tensor","fermi_energy","final_structure","phonon_dispersions","phonon_dos","potential_profile","pressure","reaction_energy_barrier","reaction_energy_profile","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force","wavefunction_amplitude","zero_point_energy"],"tags":["default","variable-cell_relaxation","wfn","wfn_plot"],"application":["espresso","nwchem","python","shell","vasp"]},"entities":[{"filename":"espresso/average_electrostatic_potential.json","categories":["atomic_forces","average_potential_profile","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_gap_dos_hse.json","categories":["atomic_forces","band_gaps","density_of_states","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_gap.json","categories":["atomic_forces","band_gaps","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_structure_dos.json","categories":["atomic_forces","band_gaps","band_structure","density_of_states","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_structure_hse.json","categories":["atomic_forces","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_structure_magn.json","categories":["atomic_forces","band_structure","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_structure_soc.json","categories":["atomic_forces","band_structure","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_structure.json","categories":["atomic_forces","band_structure","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/dielectric_tensor.json","categories":["atomic_forces","band_gaps","dielectric_tensor","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/dos.json","categories":["atomic_forces","band_gaps","density_of_states","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/electronic_density_mesh.json","categories":["atomic_forces","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/esm_relax.json","categories":["atomic_forces","charge_density_profile","espresso","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/esm.json","categories":["atomic_forces","charge_density_profile","espresso","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/fixed_cell_relaxation.json","categories":["atomic_forces","espresso","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"]},{"filename":"espresso/gw_band_structure_band_gap_full_frequency.json","categories":["atomic_forces","band_gaps","band_structure","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/gw_band_structure_band_gap_plasmon_pole.json","categories":["atomic_forces","band_gaps","band_structure","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/kpoint_convergence.json","categories":["atomic_forces","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_force"]},{"filename":"espresso/neb.json","categories":["espresso","reaction_energy_barrier","reaction_energy_profile"]},{"filename":"espresso/phonon_dispersions.json","categories":["atomic_forces","espresso","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/phonon_dos_dispersion.json","categories":["atomic_forces","espresso","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/phonon_dos.json","categories":["atomic_forces","espresso","fermi_energy","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/phonon_map.json","categories":["atomic_forces","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/recalculate_bands.json","categories":["band_structure","espresso"]},{"filename":"espresso/surface_energy.json","categories":["atomic_forces","espresso","fermi_energy","pressure","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/total_energy.json","categories":["atomic_forces","default","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/valence_band_offset.json","categories":["atomic_forces","average_potential_profile","band_gaps","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/variable_cell_relaxation.json","categories":["atomic_forces","espresso","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force","variable-cell_relaxation"]},{"filename":"espresso/wavefunction_amplitude.json","categories":["atomic_forces","band_structure","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude","wfn","wfn_plot"]},{"filename":"espresso/zero_point_energy.json","categories":["atomic_forces","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"]},{"filename":"nwchem/total_energy.json","categories":["nwchem","total_energy","total_energy_contributions"]},{"filename":"python/ml/classification_workflow.json","categories":["python"]},{"filename":"python/ml/clustering_workflow.json","categories":["python"]},{"filename":"python/ml/regression_workflow.json","categories":["python"]},{"filename":"python/python_script.json","categories":["python"]},{"filename":"shell/batch_espresso_pwscf.json","categories":["shell"]},{"filename":"shell/hello_world.json","categories":["shell"]},{"filename":"vasp/band_gap.json","categories":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/band_structure_dos.json","categories":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/band_structure.json","categories":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/dos.json","categories":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/fixed_cell_relaxation.json","categories":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force","vasp"]},{"filename":"vasp/kpoint_convergence.json","categories":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/neb.json","categories":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/recalculate_bands.json","categories":["band_structure","vasp"]},{"filename":"vasp/surface_energy.json","categories":["atomic_forces","fermi_energy","pressure","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/total_energy.json","categories":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/variable_cell_relaxation.json","categories":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force","variable-cell_relaxation","vasp"]},{"filename":"vasp/zero_point_energy.json","categories":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_force","vasp","zero_point_energy"]}]},"filesMapByName":{"espresso/average_electrostatic_potential.json":{"name":"Average Electrostatic Potential","_id":"7e865869-82fb-5769-84f0-ac9f9df354db","subworkflows":[{"_id":"7f2f8a38-c3bd-5aa9-b3b0-2c367287dd60","name":"Average Electrostatic Potential","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","average_potential_profile","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"pp_electrostatic_potential","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"average-electrostatic-potential","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"average_potential","results":[{"name":"average_potential_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"7f2f8a38-c3bd-5aa9-b3b0-2c367287dd60","type":"subworkflow","name":"Average Electrostatic Potential","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"88861e21-1e6d-557d-b080-eafe3511872f","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","average_potential_profile","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/band_gap_dos_hse.json":{"name":"Band Gap + DoS - HSE","_id":"ab28e7cf-a363-5223-ae0b-a60c82bb4f9a","subworkflows":[{"_id":"f1341a29-777d-5ca3-8933-78a5e0d3f6f2","name":"HSE Band Gap","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_gaps","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"hybrid","functional":"hse06","method":{"type":"pseudopotential","subtype":"us","data":{}}},"units":[{"type":"execution","name":"pw_scf_hse","head":true,"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f494cdb2-304f-5da2-b979-ce3fbba3a6c4","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf_hse","results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_hse.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = {% if kgrid.dimensions[0]%2 == 0 %}{{kgrid.dimensions[0]/2}}{% else %}{{(kgrid.dimensions[0]+1)/2}}{% endif %}, nqx2 = {% if kgrid.dimensions[1]%2 == 0 %}{{kgrid.dimensions[1]/2}}{% else %}{{(kgrid.dimensions[1]+1)/2}}{% endif %}, nqx3 = {% if kgrid.dimensions[2]%2 == 0 %}{{kgrid.dimensions[2]/2}}{% else %}{{(kgrid.dimensions[2]+1)/2}}{% endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{% if d%2 == 0 %}{{d}} {% else %}{{d+1}} {% endif %}{% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_hse.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"projwfc","results":[{"name":"density_of_states"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"f1341a29-777d-5ca3-8933-78a5e0d3f6f2","type":"subworkflow","name":"HSE Band Gap","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"f7a0860d-6f9e-59e3-b600-07bbf986998a","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_gaps","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/band_gap.json":{"name":"Band Gap","_id":"b18a356e-9a14-5502-80fc-30a456b1c398","subworkflows":[{"_id":"233bb8cf-3b4a-5378-84d9-a6a95a2ab43d","name":"Band Gap","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_nscf","results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"233bb8cf-3b4a-5378-84d9-a6a95a2ab43d","type":"subworkflow","name":"Band Gap","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"db3b83ea-0ef5-594c-89a8-bde38dbc6105","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/band_structure_dos.json":{"name":"Band Structure + Density of States","_id":"fbf81b2c-0a99-5062-98e5-9f41b8fba8d5","subworkflows":[{"_id":"fa594399-6b98-5d79-986c-0713601dc06c","name":"Band Structure + Density of States","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_gaps","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"d618df45-5af3-5da5-8882-d74a27e00b04","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_nscf","results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"projwfc","results":[{"name":"density_of_states"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"fa594399-6b98-5d79-986c-0713601dc06c","type":"subworkflow","name":"Band Structure + Density of States","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"8a098bb9-73b1-5e84-bfc7-b783e02d0f53","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_gaps","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/band_structure_hse.json":{"name":"Band Structure - HSE","_id":"23b9058b-884c-52d4-82a8-ee162b9761e0","subworkflows":[{"_id":"79f2cb6a-7994-5369-8c85-af07c55ad26f","name":"Preliminary SCF Calculation","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"a2785cc5-2427-5c7a-b30f-7077475b948c","name":"Extract KPOINTS","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Extract kpoints","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"a716b133-2d04-50b5-b497-100265e3fa24","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"espresso_extract_kpoints","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"espresso_extract_kpoints.py"},{"name":"requirements.txt","templateName":"requirements_empty.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_extract_kpoints.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"e47ca302-96f2-5726-9b4c-f34cdfaa7f72","name":"Main HSE Run","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"hybrid","functional":"hse06","method":{"type":"pseudopotential","subtype":"us","data":{}}},"units":[{"type":"execution","name":"pw_scf_bands_hse","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"08bd7e4a-2454-53b7-8cc9-9a95975f7e6f","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf_bands_hse","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_bands_hse.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n {% for d in qgrid.dimensions -%}\n nqx{{loop.index}} = {{d}}\n {% endfor %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal\n{{ '{{' }} {{ explicitKPath.length }} {% raw %} + KPOINTS|length {% endraw %} {{ '}}' }}\n{% raw %}\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n{% endraw %}\n{% for point in explicitKPath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}0.0000001\n{% endfor %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPathFormDataManager"}],"executableName":"pw.x","name":"pw_scf_bands_hse.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"79f2cb6a-7994-5369-8c85-af07c55ad26f","type":"subworkflow","name":"Preliminary SCF Calculation","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"b6a2b27a-0fec-5e0e-8974-073ee9d2ad83","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Extract KPOINTS","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"a2785cc5-2427-5c7a-b30f-7077475b948c","flowchartId":"65789b0a-cfe2-5062-a53e-89f71112fb57","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Main HSE Run","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"e47ca302-96f2-5726-9b4c-f34cdfaa7f72","flowchartId":"8f4c63a3-a06a-5f73-88d7-a57d7958b91d","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/band_structure_magn.json":{"name":"Bandstructure with spin magnetism - QE","_id":"f2767e1a-fce7-578f-b627-8806d3cd59de","subworkflows":[{"_id":"354942f1-9f3d-57a9-b5ae-6bdf5b3a60af","name":"Bandstructure with spin magnetism","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf_magn","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"c229d2a0-3c19-5f13-b3e0-ceb86cb9fbc1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf_magn","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_magn.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_magn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands_magn","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands_magn","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_magn.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_magn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands_spin_up","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands_spin_up","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_up.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_up.dat'{% endraw %}\n spin_component = 1\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_up.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands_spin_dn","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands_spin_dn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_dn.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_dn.dat'{% endraw %}\n spin_component = 2\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_dn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"354942f1-9f3d-57a9-b5ae-6bdf5b3a60af","type":"subworkflow","name":"Bandstructure with spin magnetism","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"41e70bc1-ba00-5871-9289-4d57c7b79452","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/band_structure_soc.json":{"name":"Bandstructure with SOC - QE","_id":"b4587b15-eb6f-5316-8497-a79f321b3c76","subworkflows":[{"_id":"153b4a88-5d56-553f-b7d3-40df96968eb4","name":"Bandstructure with SOC","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"nc-fr","data":{"searchText":"nc-fr"}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf_soc","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"74ec024a-f247-5f15-9c21-cc169bcb62c7","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf_soc","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_soc.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_soc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands_soc","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands_soc","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_soc.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_soc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"153b4a88-5d56-553f-b7d3-40df96968eb4","type":"subworkflow","name":"Bandstructure with SOC","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"872d54a6-679c-5af5-a153-72709fcf46df","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/band_structure.json":{"name":"Band Structure","_id":"cc901d3d-bf3f-522c-9dec-849ffc06f62a","subworkflows":[{"_id":"26d32e68-c2b5-50e9-8933-15f684fcc039","name":"Band Structure","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"d618df45-5af3-5da5-8882-d74a27e00b04","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"26d32e68-c2b5-50e9-8933-15f684fcc039","type":"subworkflow","name":"Band Structure","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"c573187f-a8bb-5084-9fcf-1560bf4a7786","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/dielectric_tensor.json":{"name":"Dielectric Function","_id":"554a5473-511e-5c7f-88dc-3f99f544a576","subworkflows":[{"_id":"38340b52-83ad-5862-bc18-c140bdc0cb72","name":"Compute Dielectric Function","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_gaps","dielectric_tensor","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"nc","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b230ec3-0791-52f7-a4db-625390b8718f","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set No-Symmetry Flag","type":"assignment","operand":"NO_SYMMETRY_NO_INVERSION","value":true,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"3b230ec3-0791-52f7-a4db-625390b8718f","head":false,"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_nscf","results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Compute dielectric function","head":false,"results":[{"name":"dielectric_tensor"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"epsilon.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"dielectric_tensor","results":[{"name":"dielectric_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"epsilon.x","input":[{"name":"epsilon.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n","contextProviders":[],"executableName":"epsilon.x","name":"epsilon.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"38340b52-83ad-5862-bc18-c140bdc0cb72","type":"subworkflow","name":"Compute Dielectric Function","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"8408f3c4-1c42-5ffe-bc29-bee11b5a6a05","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_gaps","dielectric_tensor","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/dos.json":{"name":"Density of States","_id":"e930440a-1624-5eb9-b83b-dbe1421b4f5e","subworkflows":[{"_id":"2cf317f3-3306-5a96-bc9b-e9103ebcd5be","name":"Density of States","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_gaps","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_nscf","results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"projwfc","results":[{"name":"density_of_states"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"2cf317f3-3306-5a96-bc9b-e9103ebcd5be","type":"subworkflow","name":"Density of States","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"3e64fdb4-ab5b-52a0-a1d5-51343c49481c","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_gaps","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/electronic_density_mesh.json":{"name":"Electronic Density Mesh","_id":"67b8445c-14ea-5efb-acbf-7dd7bd9df4b4","subworkflows":[{"_id":"e2749c5a-fcd9-589c-819b-8b88c5c90924","name":"Electronic Density Mesh","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pp_density","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"pp_density","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_density.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_density.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"e2749c5a-fcd9-589c-819b-8b88c5c90924","type":"subworkflow","name":"Electronic Density Mesh","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"79e421a1-18aa-5c27-b8a8-9a769c1a89a0","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/esm_relax.json":{"name":"Effective Screening Medium (ESM) Relax","_id":"059da61f-b061-5626-92c4-c103c28b737e","subworkflows":[{"_id":"69728792-afeb-50aa-9b4e-6974a90f676a","name":"Effective Screening Medium (ESM) Relax","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","charge_density_profile","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_esm_relax","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"a2bec506-1fdd-5125-a787-85f31cde20c1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_esm_relax","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm_relax.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"69728792-afeb-50aa-9b4e-6974a90f676a","type":"subworkflow","name":"Effective Screening Medium (ESM) Relax","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"f0733dc9-f3ad-5a1c-82fc-515edc0276b6","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","charge_density_profile","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/esm.json":{"name":"Effective Screening Medium (ESM)","_id":"1f17c10d-9554-5f41-994e-fee3fc0d22a7","subworkflows":[{"_id":"0de669f6-a455-5dae-b331-19dc85f7090f","name":"Effective Screening Medium (ESM)","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","charge_density_profile","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_esm","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"2f487bc6-c237-53e4-bad5-be60369662cb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_esm","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"0de669f6-a455-5dae-b331-19dc85f7090f","type":"subworkflow","name":"Effective Screening Medium (ESM)","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"e7893fdf-0515-58a0-a9e1-0393bdc57d33","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","charge_density_profile","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/fixed_cell_relaxation.json":{"name":"Fixed-cell Relaxation","_id":"10343bab-9cf8-51ed-a0bc-6991cc5ffa8f","subworkflows":[{"_id":"fb75e249-5489-5146-bd8a-786d33330d9c","name":"Fixed-cell Relaxation","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"c42871f6-ab79-5987-b228-c3bd80f16ffd","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_relax","results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_relax.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"fb75e249-5489-5146-bd8a-786d33330d9c","type":"subworkflow","name":"Fixed-cell Relaxation","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"0de8c4c8-b722-5cd2-ae68-b484262e0a01","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/gw_band_structure_band_gap_full_frequency.json":{"name":"Full Frequency GW Band Structure + Band Gap","_id":"500f379f-bc9d-5f6f-8780-e28570f1ed3f","subworkflows":[{"_id":"46bcdcc8-628e-518e-b8c3-9bf38d7a2aef","name":"Full Frequency GW Band Structure + Band Gap","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_gaps","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{"searchText":".*dojo-oncv.*"}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"gw_bands_full_frequency","head":false,"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"gw.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"gw_bands_full_frequency","results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_full_frequency.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_full_frequency.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"46bcdcc8-628e-518e-b8c3-9bf38d7a2aef","type":"subworkflow","name":"Full Frequency GW Band Structure + Band Gap","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"b1748925-1c8e-5c73-a8ff-ec4da33a49ce","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_gaps","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/gw_band_structure_band_gap_plasmon_pole.json":{"name":"Plasmon-Pole GW Band Structure + Band Gap","_id":"dc9cba26-070a-57dd-aaa8-6de7bb714807","subworkflows":[{"_id":"72b79a87-8eef-5fe2-9d6c-6c9c256dd56c","name":"Plasmon-Pole GW Band Structure + Band Gap","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_gaps","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{"searchText":".*dojo-oncv.*"}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"gw_bands_plasmon_pole","head":false,"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"gw.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"gw_bands_plasmon_pole","results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_plasmon_pole.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_plasmon_pole.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"72b79a87-8eef-5fe2-9d6c-6c9c256dd56c","type":"subworkflow","name":"Plasmon-Pole GW Band Structure + Band Gap","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"911d4cc1-cde5-5097-a7be-0e11f73113a7","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_gaps","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/kpoint_convergence.json":{"name":"K-point Convergence","_id":"e8141224-dcea-576b-a556-80f65ab2e230","subworkflows":[{"_id":"ff6a8fbc-2202-5786-9a26-67c843417d0b","name":"K-point Convergence","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-tolerance","head":true,"next":"init-increment","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-increment","head":false,"next":"init-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-result","head":false,"next":"init-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-parameter","head":false,"next":"pwscf-kpoint-convergence","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"pwscf-kpoint-convergence","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf_kpt_conv","results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_kpt_conv.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0{% endraw %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_kpt_conv.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"store-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"pwscf-kpoint-convergence"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"store-result","head":false,"next":"check-convergence","schemaVersion":"2022.8.16","isDefault":false},{"name":"check convergence","type":"condition","input":[],"statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"check-convergence","then":"convergence-is-reached","else":"update-result","head":false,"next":"update-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"update-result","head":false,"next":"increment-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"increment-parameter","next":"pwscf-kpoint-convergence","head":false,"schemaVersion":"2022.8.16","isDefault":false},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"convergence-is-reached","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"ff6a8fbc-2202-5786-9a26-67c843417d0b","type":"subworkflow","name":"K-point Convergence","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"a34eec2c-cdb2-537d-88c0-ed1d7b205879","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/neb.json":{"name":"Nudged Elastic Band (NEB)","_id":"6dc0a5af-7ec5-50e4-b663-42fc5ddf0ef1","subworkflows":[{"isMultiMaterial":true,"_id":"c9034468-df28-5357-8912-02226f919042","name":"Nudged Elastic Band (NEB)","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["reaction_energy_barrier","reaction_energy_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"neb","head":true,"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9f273ca0-d240-5b1f-89a9-64dd579304ac","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"neb.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"neb","results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"neb.x","input":[{"name":"neb.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = {{ 2 + (input.INTERMEDIATE_IMAGES.length or neb.nImages) }},\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_first = false %}\n{%- for position in input.FIRST_IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_first = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.FIRST_IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_first %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n{%- for IMAGE in input.INTERMEDIATE_IMAGES %}\nINTERMEDIATE_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_intermediate = false %}\n{%- for position in IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_intermediate = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_intermediate %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n{%- endfor %}\nLAST_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_last = false %}\n{%- for position in input.LAST_IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_last = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.LAST_IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_last %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nEND_POSITIONS\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nEND_ENGINE_INPUT\nEND\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"NEBFormDataManager"},{"name":"QENEBInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"neb.x","name":"neb.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"c9034468-df28-5357-8912-02226f919042","type":"subworkflow","name":"Nudged Elastic Band (NEB)","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"134c70e2-aeaf-543d-aded-1585cd71b800","schemaVersion":"2022.8.16","isDefault":false}],"properties":["reaction_energy_barrier","reaction_energy_profile"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/phonon_dispersions.json":{"name":"Phonon Dispersions","_id":"8623c689-9ba3-5454-a3c8-0c6c49c402b4","subworkflows":[{"_id":"bfb69b48-8fbf-5a0d-8949-448f20754766","name":"Phonon Dispersions","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"13bcafce-56ef-5b47-b079-317495eb6933","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_grid","results":[{"name":"phonon_dos"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"q2r","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"matdyn_path","results":[{"name":"phonon_dispersions"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"bfb69b48-8fbf-5a0d-8949-448f20754766","type":"subworkflow","name":"Phonon Dispersions","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"2cd13237-d089-5d5e-8372-1db8bb8e383f","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/phonon_dos_dispersion.json":{"name":"Phonon Density of States + Dispersions","_id":"cd3ab6a3-a56c-5626-b527-cfe002c30472","subworkflows":[{"_id":"291d25cd-378a-5be7-9d85-c8013a4b165b","name":"Phonon Density of States + Dispersions","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"13bcafce-56ef-5b47-b079-317495eb6933","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_grid","results":[{"name":"phonon_dos"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"q2r","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"matdyn_grid","results":[{"name":"phonon_dos"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"matdyn_path","results":[{"name":"phonon_dispersions"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"291d25cd-378a-5be7-9d85-c8013a4b165b","type":"subworkflow","name":"Phonon Density of States + Dispersions","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"7897ed9a-6b48-5a79-a50e-28797f3912a5","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/phonon_dos.json":{"name":"Phonon Density of States","_id":"840eb771-6cc0-5141-9a37-9c2eef74aa20","subworkflows":[{"_id":"2232051b-9f2a-5a48-9b4d-6231eb6e8297","name":"Phonon Density of States","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"13bcafce-56ef-5b47-b079-317495eb6933","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_grid","results":[{"name":"phonon_dos"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"q2r","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"matdyn_grid","results":[{"name":"phonon_dos"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"2232051b-9f2a-5a48-9b4d-6231eb6e8297","type":"subworkflow","name":"Phonon Density of States","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"1954e749-1d37-50e6-8ae7-7292f5ef59c0","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/phonon_map.json":{"name":"Phonon Map","_id":"bbf7f87c-d201-537e-8c0f-00dca0cbb7ec","subworkflows":[{"_id":"f52b8039-83d0-5485-a1f1-0bc37cb01ed3","name":"pw-scf","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"2f017bcb-f4ba-55b8-b939-1f780679a88e","name":"ph-init-qpoints","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"ph_init_qpoints","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"b8ea6a33-38f3-5434-b17e-b5eae8fff9fc","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_init_qpoints","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_init_qpoints.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_init_qpoints.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a","name":"espresso-xml-get-qpt-irr","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","name":"reduce","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["phonon_dispersions","phonon_dos"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"ph_grid_restart","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb206177-a4af-599a-81ba-6c88d24253b6","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_grid_restart","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid_restart.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid_restart.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"q2r","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"matdyn_grid","results":[{"name":"phonon_dos"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"matdyn_path","results":[{"name":"phonon_dispersions"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"f52b8039-83d0-5485-a1f1-0bc37cb01ed3","type":"subworkflow","name":"pw-scf","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"d270b789-fb67-573c-a566-9f09fdacea23","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"ph-init-qpoints","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"2f017bcb-f4ba-55b8-b939-1f780679a88e","flowchartId":"4bb74dfb-46a6-5bf4-a477-5d374dc2e271","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"espresso-xml-get-qpt-irr","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a","flowchartId":"9894b91f-6e97-5ee6-af02-0bef26bd62c0","schemaVersion":"2022.8.16","isDefault":false},{"name":"map","type":"map","input":{"target":"MAP_DATA","scope":"global","name":"Q_POINTS","values":[],"useValues":false},"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"workflowId":"b58b7b6b-19b6-4fc2-b655-c3f380b70f5a","flowchartId":"24e3c1f0-8090-512e-9727-8770071d17c8","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"reduce","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","flowchartId":"55a9e9fb-3545-5c4b-a1bb-b64a899b78c6","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[{"_id":"731d3397-3278-516a-b28e-53626ef50f0a","name":"phonon_map_workflow","subworkflows":[{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","name":"pre-processor","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"name":"espresso_link_outdir_save","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_link_outdir_save.sh"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_link_outdir_save.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","name":"ph-single-irr-qpt","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"ph_single_irr_qpt","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"8db9af08-d935-57a0-a824-e7db6d936de8","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_single_irr_qpt","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_single_irr_qpt.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_single_irr_qpt.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","name":"post-processor","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cd5c3e29-511b-5ef8-949d-ad884f210301","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"name":"espresso_collect_dynmat","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_collect_dynmat.sh"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_collect_dynmat.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","type":"subworkflow","name":"pre-processor","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"e9a790f4-dec6-52c1-b951-014f0ff01cb4"},{"type":"subworkflow","name":"ph-single-irr-qpt","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"e68db280-8636-53e3-81a0-88396ba6147d","flowchartId":"c2195045-7a5c-54d3-ab88-211c82de09f1"},{"type":"subworkflow","name":"post-processor","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"7239fc3a-b343-513f-af35-e8687e1829da","flowchartId":"e483c7fb-2a29-5e91-819a-7465ead70134"}],"properties":[],"workflows":[]}],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/recalculate_bands.json":{"name":"Recalculate Bands","_id":"42b2b964-8ccc-5b36-9e33-41a954abc2ba","subworkflows":[{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","name":"Recalculate Bands","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_bands","head":true,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","type":"subworkflow","name":"Recalculate Bands","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"e8b72a45-765e-565f-ab17-c91a21aec09d","schemaVersion":"2022.8.16","isDefault":false}],"properties":["band_structure"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/surface_energy.json":{"name":"Surface Energy","_id":"68512987-de73-5614-bab2-0f8b575cffa3","subworkflows":[{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","name":"Surface Energy","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","type":"subworkflow","name":"Surface Energy","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"d81dc9ce-bb50-5bc6-af1d-e5ede03bb0a6","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/total_energy.json":{"name":"Total Energy","_id":"4e36ca25-fa46-5628-a227-27d22dea8553","subworkflows":[{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","name":"Total Energy","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","type":"subworkflow","name":"Total Energy","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"6059d61a-6a92-5657-9130-02208639aff8","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"tags":["default"],"application":{"name":"espresso"}},"espresso/valence_band_offset.json":{"name":"Valence Band Offset (2D)","_id":"d8e08cac-7747-50aa-b925-41f214d722c6","subworkflows":[{"isMultiMaterial":true,"_id":"9c65d03e-6a30-58f3-947a-f174342be0c3","name":"BS + Avg ESP (Interface)","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"name":"Set Material Index (Interface)","type":"assignment","operand":"MATERIAL_INDEX","value":"0","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"0f21d8c4-ab32-53ba-b40d-fc9b6608e1b9","head":true,"next":"9fc7a088-5533-5f70-bb33-f676ec65f565","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"pw-bands-calculate-band-gap","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a667d9fd-35d5-5897-be0e-fa0247233649","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"pp_electrostatic_potential","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"average-electrostatic-potential","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"average_potential","results":[{"name":"average_potential_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7","name":"Find ESP Values (Interface)","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Find Extrema","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"python-find-extrema","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"generic:processing:find_extrema:scipy","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP_INTERFACE","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"isMultiMaterial":true,"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","name":"BS + Avg ESP (interface left)","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"name":"Set Material Index (Interface left)","type":"assignment","operand":"MATERIAL_INDEX","value":"1","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"0bd31760-f6e4-5826-b282-882c06c97f94","head":true,"next":"3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"pw-bands-calculate-band-gap-left","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap-left","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a667d9fd-35d5-5897-be0e-fa0247233649","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-left"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM_LEFT","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"next":"dfc4f1c5-5856-588a-99df-6d5fb46bb429","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"dfc4f1c5-5856-588a-99df-6d5fb46bb429","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"b1bb2b3e-3197-5bcd-85b0-959cc357c8d3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"b1bb2b3e-3197-5bcd-85b0-959cc357c8d3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"pp_electrostatic_potential","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"average-electrostatic-potential-left","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential-left","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"average_potential","results":[{"name":"average_potential_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-left"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","name":"Find ESP Value (Interface left)","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Find Extrema","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"python-find-extrema-left","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"generic:processing:find_extrema:scipy","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP_LEFT","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema-left"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"isMultiMaterial":true,"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","name":"BS + Avg ESP (interface right)","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"name":"Set Material Index (Interface right)","type":"assignment","operand":"MATERIAL_INDEX","value":"2","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"a05809d1-cc0d-5a0b-bf5e-d43b90a6ac4b","head":true,"next":"b89d6348-3915-5c24-9fbb-350bc98ac708","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"b89d6348-3915-5c24-9fbb-350bc98ac708","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"pw-bands-calculate-band-gap-right","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap-right","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a667d9fd-35d5-5897-be0e-fa0247233649","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-right"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM_RIGHT","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"next":"bc3f514c-4bed-521b-85a3-4e0edfdc3585","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"bc3f514c-4bed-521b-85a3-4e0edfdc3585","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"28bb682d-d287-5beb-8a67-826449c474ee","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"28bb682d-d287-5beb-8a67-826449c474ee","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"pp_electrostatic_potential","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"average-electrostatic-potential-right","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential-right","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"average_potential","results":[{"name":"average_potential_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-right"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"736295e8-2ee0-5974-83bc-362061ac0688","name":"Find ESP Value (Interface right)","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Find Extrema","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"python-find-extrema-right","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"generic:processing:find_extrema:scipy","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP_RIGHT","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema-right"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","name":"Calculate VBO","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["valence_band_offset"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Difference of valence band maxima","type":"assignment","operand":"VBM_DIFF","value":"VBM_LEFT - VBM_RIGHT","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","head":true,"next":"2626f7bb-d392-5fd4-ab71-329b508de347","schemaVersion":"2022.8.16","isDefault":false},{"name":"Difference of macroscopically averaged ESP in bulk","type":"assignment","operand":"AVG_ESP_DIFF","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","head":false,"next":"b7307787-53e2-599b-ad12-d627b04074b4","schemaVersion":"2022.8.16","isDefault":false},{"name":"Lineup of macroscopically averaged ESP in interface","type":"assignment","operand":"ESP_LINEUP","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","head":false,"next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","schemaVersion":"2022.8.16","isDefault":false},{"name":"Valence Band Offset","type":"assignment","operand":"VALENCE_BAND_OFFSET","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))","input":[],"results":[{"name":"valence_band_offset"}],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"9c65d03e-6a30-58f3-947a-f174342be0c3","type":"subworkflow","name":"BS + Avg ESP (Interface)","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"fd622b5c-5c02-594e-b582-b245c17ca9a4","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Find ESP Values (Interface)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7","flowchartId":"ad3b1e4c-5965-5605-a067-dd0c59907c4b","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"BS + Avg ESP (interface left)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","flowchartId":"8d5b4734-edfd-55cc-ad80-aaa72487398d","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Find ESP Value (Interface left)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","flowchartId":"102ec582-5b75-52f5-8b39-19ca725ed47a","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"BS + Avg ESP (interface right)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","flowchartId":"603c45db-93aa-54ce-a7fe-6e9b65b0037d","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Find ESP Value (Interface right)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"736295e8-2ee0-5974-83bc-362061ac0688","flowchartId":"e3444d35-cc41-59f5-8481-78d0c383b84e","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Calculate VBO","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","flowchartId":"0e0b141a-39ca-52bc-9094-e5f96dc72f39","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/variable_cell_relaxation.json":{"name":"Variable-cell Relaxation","_id":"c45dcef1-d16b-59d1-9318-cedd0b1acf08","subworkflows":[{"systemName":"espresso-variable-cell-relaxation","_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","name":"Variable-cell Relaxation","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_vc-relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_vc-relax","results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","type":"subworkflow","name":"Variable-cell Relaxation","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"8f6e9590-6a87-584b-abd7-1fb98253054c","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"tags":["variable-cell_relaxation"],"application":{"name":"espresso"}},"espresso/wavefunction_amplitude.json":{"name":"Wavefunction Amplitude","_id":"196d364a-5a30-549b-a898-8b9704b50ff1","subworkflows":[{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","name":"Wavefunction Amplitude","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"band_structure"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"pw-scf","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"extract-band-energies","schemaVersion":"2022.8.16","isDefault":false},{"name":"Extract Band Energies","type":"assignment","operand":"band_energies","value":"[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]","input":[{"name":"band_structure","scope":"pw-scf"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"extract-band-energies","head":false,"next":"indices-below-fermi","schemaVersion":"2022.8.16","isDefault":false},{"name":"Find Indices Below Fermi","type":"assignment","operand":"indices_below_fermi","value":"[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]","input":[{"name":"fermi_energy","scope":"pw-scf"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"indices-below-fermi","head":false,"next":"8771dc7f-878e-5f13-a840-a3a416854f1e","schemaVersion":"2022.8.16","isDefault":false},{"name":"Store Band Below EF","type":"assignment","operand":"KBAND_VALUE_BELOW_EF","value":"indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8771dc7f-878e-5f13-a840-a3a416854f1e","head":false,"next":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select Band","type":"assignment","operand":"KBAND_VALUE","value":"KBAND_VALUE_BELOW_EF","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","head":false,"next":"pp-wfn","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pp_wfn","head":false,"results":[{"name":"wavefunction_amplitude"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pp-wfn","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"pp_wfn","results":[{"name":"wavefunction_amplitude"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_wfn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","name":"Plot Wavefunction","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"plot WFN","head":true,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"57fca898-8e8b-5ef2-81a5-9d2b612bc18d","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"plot_wavefunction","results":[{"name":"file_content"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","type":"subworkflow","name":"Wavefunction Amplitude","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"36467db9-279f-52a3-a6ef-ffdc26d875ed","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Plot Wavefunction","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"e4ec581f-1cb3-5036-b698-999a96711559","flowchartId":"4ce49281-e731-550e-af66-6d2408db8237","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"tags":["wfn","wfn_plot"],"application":{"name":"espresso"}},"espresso/zero_point_energy.json":{"name":"Zero Point Energy","_id":"3158c78d-58bb-5675-8c7f-6f2337061015","subworkflows":[{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","name":"Zero Point Energy","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"107595d1-490f-53a2-8432-7f8a12f14d96","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_zpe","head":false,"results":[{"name":"zero_point_energy"}],"monitors":[{"name":"standard_output"}],"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_gamma","results":[{"name":"zero_point_energy"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","type":"subworkflow","name":"Zero Point Energy","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"d906bd20-eb92-5a01-a0e2-c81a2d9b2a41","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"nwchem/total_energy.json":{"name":"Total Energy","_id":"937fbac8-2dec-5fb1-a46f-b8a0cc3d3d05","subworkflows":[{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","name":"Total Energy","application":{"name":"nwchem","shortName":"nwchem","summary":"NWChem","build":"GNU","isDefault":true,"version":"7.0.2","schemaVersion":"2022.8.16"},"properties":["total_energy","total_energy_contributions"],"model":{"type":"dft","subtype":"gga","method":{"type":"localorbital","subtype":"pople","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"nwchem_total_energy","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"nwchem","shortName":"nwchem","summary":"NWChem","build":"GNU","isDefault":true,"version":"7.0.2","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"}],"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem","schemaVersion":"2022.8.16"},"flavor":{"name":"nwchem_total_energy","results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"preProcessors":[],"postProcessors":[],"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","type":"subworkflow","name":"Total Energy","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"6059d61a-6a92-5657-9130-02208639aff8","schemaVersion":"2022.8.16","isDefault":false}],"properties":["total_energy","total_energy_contributions"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"nwchem"}},"python/ml/classification_workflow.json":{"name":"Python ML Train Classification","_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"flowchartId":"head-set-predict-status","head":true,"next":"head-fetch-training-data","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Dataset","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"type":"object_storage","basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"head-branch-on-predict-status","schemaVersion":"2022.8.16","isDefault":false},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","then":"head-fetch-trained-model","head":false,"next":"head-fetch-trained-model","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["set-io-unit-filenames"],"enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"type":"object_storage","basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"end-of-ml-train-head","schemaVersion":"2022.8.16","isDefault":false},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"end-of-ml-train-head","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:setup_variables_packages","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:read_csv:pandas","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:train_test_split:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:pre_processing:standardization:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:model:random_forest_classification:sklearn","results":[{"name":"workflow:pyml_predict"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ROC Curve Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:post_processing:roc_curve:sklearn","results":[{"name":"file_content"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","type":"subworkflow","name":"Set Up the Job","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Machine Learning","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","schemaVersion":"2022.8.16","isDefault":false}],"properties":[],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"python/ml/clustering_workflow.json":{"name":"Python ML Train Clustering","_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"flowchartId":"head-set-predict-status","head":true,"next":"head-fetch-training-data","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Dataset","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"type":"object_storage","basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"head-branch-on-predict-status","schemaVersion":"2022.8.16","isDefault":false},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","then":"head-fetch-trained-model","head":false,"next":"head-fetch-trained-model","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["set-io-unit-filenames"],"enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"type":"object_storage","basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"end-of-ml-train-head","schemaVersion":"2022.8.16","isDefault":false},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"end-of-ml-train-head","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:setup_variables_packages","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:read_csv:pandas","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:train_test_split:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:pre_processing:standardization:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:model:random_forest_classification:sklearn","results":[{"name":"workflow:pyml_predict"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ROC Curve Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:post_processing:roc_curve:sklearn","results":[{"name":"file_content"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","type":"subworkflow","name":"Set Up the Job","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Machine Learning","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","schemaVersion":"2022.8.16","isDefault":false}],"properties":[],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"python/ml/regression_workflow.json":{"name":"Python ML Train Regression","_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"flowchartId":"head-set-predict-status","head":true,"next":"head-fetch-training-data","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Dataset","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"type":"object_storage","basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"head-branch-on-predict-status","schemaVersion":"2022.8.16","isDefault":false},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","then":"head-fetch-trained-model","head":false,"next":"head-fetch-trained-model","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["set-io-unit-filenames"],"enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"type":"object_storage","basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"end-of-ml-train-head","schemaVersion":"2022.8.16","isDefault":false},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"end-of-ml-train-head","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:setup_variables_packages","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:read_csv:pandas","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:train_test_split:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:pre_processing:standardization:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:model:multilayer_perceptron:sklearn","results":[{"name":"workflow:pyml_predict"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Parity Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:post_processing:parity_plot:matplotlib","results":[{"name":"file_content"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","type":"subworkflow","name":"Set Up the Job","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Machine Learning","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","schemaVersion":"2022.8.16","isDefault":false}],"properties":[],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"python/python_script.json":{"name":"Python Script","_id":"de816646-766b-5f97-b468-0937d4381440","subworkflows":[{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","name":"Python Script","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"python","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"hello_world","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","type":"subworkflow","name":"Python Script","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"c50e28b2-a0c5-5324-8b6f-e99b5a546bd8","schemaVersion":"2022.8.16","isDefault":false}],"properties":[],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"shell/batch_espresso_pwscf.json":{"name":"Shell Batch Job (Espresso PWSCF)","_id":"e0046fb4-37db-5732-bf81-c48e13081a4c","subworkflows":[{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","name":"Shell Batch Job (Espresso PWSCF)","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"name":"job_espresso_pw_scf","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","type":"subworkflow","name":"Shell Batch Job (Espresso PWSCF)","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"d884e8f7-7acf-5a03-bc9a-186903bdaa0e","schemaVersion":"2022.8.16","isDefault":false}],"properties":[],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"shell"}},"shell/hello_world.json":{"name":"Shell Script","_id":"d2fd444c-06b4-5d66-baeb-449c680ae1bf","subworkflows":[{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","name":"Shell Hello World","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"name":"hello_world","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","type":"subworkflow","name":"Shell Hello World","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"319307c2-bf22-5bf2-b4e9-a4cdf671b786","schemaVersion":"2022.8.16","isDefault":false}],"properties":[],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"shell"}},"vasp/band_gap.json":{"name":"Band Gap","_id":"1a358471-0a73-5fcb-ad3c-7a8079029c86","subworkflows":[{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","name":"Band Gap","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"f0d65517-9592-5bc8-948e-a0851a766cbb","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_nscf","head":false,"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_nscf","results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","type":"subworkflow","name":"Band Gap","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"db3b83ea-0ef5-594c-89a8-bde38dbc6105","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/band_structure_dos.json":{"name":"Band Structure + Density of States","_id":"c8338d40-3c6e-5581-b03c-d7fb5cbb8df5","subworkflows":[{"_id":"d38fea11-9781-5151-8dae-d705381498be","name":"Band Structure + Density of States","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"d38fea11-9781-5151-8dae-d705381498be","type":"subworkflow","name":"Band Structure + Density of States","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"8a098bb9-73b1-5e84-bfc7-b783e02d0f53","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/band_structure.json":{"name":"Band Structure","_id":"25b0ad08-87bb-5400-bea4-acd5fe2163c0","subworkflows":[{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","name":"Band Structure","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","type":"subworkflow","name":"Band Structure","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"c573187f-a8bb-5084-9fcf-1560bf4a7786","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/dos.json":{"name":"Density of States","_id":"629a79fb-a03f-5e34-b2ce-9c735e8ef6c0","subworkflows":[{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","name":"Density of States","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","type":"subworkflow","name":"Density of States","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"3e64fdb4-ab5b-52a0-a1d5-51343c49481c","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/fixed_cell_relaxation.json":{"name":"Fixed-cell Relaxation","_id":"cb69418c-2f6c-551d-af81-0cf20ec1113d","subworkflows":[{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","name":"Fixed-cell Relaxation","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_relax","head":true,"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_relax","results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","type":"subworkflow","name":"Fixed-cell Relaxation","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"0de8c4c8-b722-5cd2-ae68-b484262e0a01","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/kpoint_convergence.json":{"name":"K-point Convergence","_id":"fcf105f9-5ae7-5c32-a6b3-e3579cbdf39a","subworkflows":[{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","name":"K-point Convergence","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-tolerance","head":true,"next":"init-increment","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-increment","head":false,"next":"init-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-result","head":false,"next":"init-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-parameter","head":false,"next":"vasp-kpoint-convergence","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"vasp-kpoint-convergence","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_kpt_conv","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"store-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"store-result","head":false,"next":"check-convergence","schemaVersion":"2022.8.16","isDefault":false},{"name":"check convergence","type":"condition","input":[],"statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"check-convergence","then":"convergence-is-reached","else":"update-result","head":false,"next":"update-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"update-result","head":false,"next":"increment-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"increment-parameter","next":"vasp-kpoint-convergence","head":false,"schemaVersion":"2022.8.16","isDefault":false},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"convergence-is-reached","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","type":"subworkflow","name":"K-point Convergence","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"a34eec2c-cdb2-537d-88c0-ed1d7b205879","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/neb.json":{"name":"Nudged Elastic Band (NEB)","_id":"2973908e-21ae-5424-afc9-ccb3fde477d8","subworkflows":[{"isMultiMaterial":true,"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","name":"Initial/Final Total Energies","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_neb_initial","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_neb_initial","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"e65a17ce-10c8-5710-ad4d-fb3d42434091","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_neb_final","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_neb_final","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"compute":{"ppn":1,"nodes":1,"queue":"D","timeLimit":"01:00:00","notify":"n","cluster":{"fqdn":""},"timeLimitType":"per single attempt","isRestartable":true,"arguments":{"nimage":1,"npools":1,"nband":1,"ntg":1,"ndiag":1}},"schemaVersion":"2022.8.16","isDraft":false},{"isMultiMaterial":true,"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","name":"Prepare Directories","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"prepare-neb-images","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"name":"bash_vasp_prepare_neb_images","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR <=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP_INTERFACE","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"isMultiMaterial":true,"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","name":"BS + Avg ESP (interface left)","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"name":"Set Material Index (Interface left)","type":"assignment","operand":"MATERIAL_INDEX","value":"1","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"0bd31760-f6e4-5826-b282-882c06c97f94","head":true,"next":"3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"pw-bands-calculate-band-gap-left","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap-left","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a667d9fd-35d5-5897-be0e-fa0247233649","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-left"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM_LEFT","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"next":"dfc4f1c5-5856-588a-99df-6d5fb46bb429","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"dfc4f1c5-5856-588a-99df-6d5fb46bb429","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"b1bb2b3e-3197-5bcd-85b0-959cc357c8d3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"b1bb2b3e-3197-5bcd-85b0-959cc357c8d3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"pp_electrostatic_potential","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"average-electrostatic-potential-left","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential-left","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"average_potential","results":[{"name":"average_potential_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-left"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","name":"Find ESP Value (Interface left)","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Find Extrema","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"python-find-extrema-left","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"generic:processing:find_extrema:scipy","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP_LEFT","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema-left"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"isMultiMaterial":true,"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","name":"BS + Avg ESP (interface right)","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"name":"Set Material Index (Interface right)","type":"assignment","operand":"MATERIAL_INDEX","value":"2","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"a05809d1-cc0d-5a0b-bf5e-d43b90a6ac4b","head":true,"next":"b89d6348-3915-5c24-9fbb-350bc98ac708","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"b89d6348-3915-5c24-9fbb-350bc98ac708","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"pw-bands-calculate-band-gap-right","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap-right","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a667d9fd-35d5-5897-be0e-fa0247233649","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-right"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM_RIGHT","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"next":"bc3f514c-4bed-521b-85a3-4e0edfdc3585","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"bc3f514c-4bed-521b-85a3-4e0edfdc3585","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"28bb682d-d287-5beb-8a67-826449c474ee","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"28bb682d-d287-5beb-8a67-826449c474ee","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"pp_electrostatic_potential","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"average-electrostatic-potential-right","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential-right","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"average_potential","results":[{"name":"average_potential_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-right"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"736295e8-2ee0-5974-83bc-362061ac0688","name":"Find ESP Value (Interface right)","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Find Extrema","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"python-find-extrema-right","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"generic:processing:find_extrema:scipy","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP_RIGHT","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema-right"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","name":"Calculate VBO","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["valence_band_offset"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Difference of valence band maxima","type":"assignment","operand":"VBM_DIFF","value":"VBM_LEFT - VBM_RIGHT","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","head":true,"next":"2626f7bb-d392-5fd4-ab71-329b508de347","schemaVersion":"2022.8.16","isDefault":false},{"name":"Difference of macroscopically averaged ESP in bulk","type":"assignment","operand":"AVG_ESP_DIFF","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","head":false,"next":"b7307787-53e2-599b-ad12-d627b04074b4","schemaVersion":"2022.8.16","isDefault":false},{"name":"Lineup of macroscopically averaged ESP in interface","type":"assignment","operand":"ESP_LINEUP","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","head":false,"next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","schemaVersion":"2022.8.16","isDefault":false},{"name":"Valence Band Offset","type":"assignment","operand":"VALENCE_BAND_OFFSET","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))","input":[],"results":[{"name":"valence_band_offset"}],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"BS + Avg ESP (Interface)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"9c65d03e-6a30-58f3-947a-f174342be0c3","flowchartId":"fd622b5c-5c02-594e-b582-b245c17ca9a4","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Find ESP Values (Interface)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7","flowchartId":"ad3b1e4c-5965-5605-a067-dd0c59907c4b","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"BS + Avg ESP (interface left)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","flowchartId":"8d5b4734-edfd-55cc-ad80-aaa72487398d","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Find ESP Value (Interface left)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","flowchartId":"102ec582-5b75-52f5-8b39-19ca725ed47a","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"BS + Avg ESP (interface right)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","flowchartId":"603c45db-93aa-54ce-a7fe-6e9b65b0037d","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Find ESP Value (Interface right)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"736295e8-2ee0-5974-83bc-362061ac0688","flowchartId":"e3444d35-cc41-59f5-8481-78d0c383b84e","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Calculate VBO","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","flowchartId":"0e0b141a-39ca-52bc-9094-e5f96dc72f39","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","valence_band_offset"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/variable_cell_relaxation.json":{"_id":"c45dcef1-d16b-59d1-9318-cedd0b1acf08","name":"Variable-cell Relaxation","subworkflows":[{"systemName":"espresso-variable-cell-relaxation","_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","name":"Variable-cell Relaxation","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_vc-relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_vc-relax","results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Variable-cell Relaxation","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","flowchartId":"8f6e9590-6a87-584b-abd7-1fb98253054c","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"tags":["variable-cell_relaxation"],"application":{"name":"espresso"}},"espresso/wavefunction_amplitude.json":{"_id":"196d364a-5a30-549b-a898-8b9704b50ff1","name":"Wavefunction Amplitude","subworkflows":[{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","name":"Wavefunction Amplitude","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"band_structure"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"pw-scf","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"extract-band-energies","schemaVersion":"2022.8.16","isDefault":false},{"name":"Extract Band Energies","type":"assignment","operand":"band_energies","value":"[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]","input":[{"name":"band_structure","scope":"pw-scf"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"extract-band-energies","head":false,"next":"indices-below-fermi","schemaVersion":"2022.8.16","isDefault":false},{"name":"Find Indices Below Fermi","type":"assignment","operand":"indices_below_fermi","value":"[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]","input":[{"name":"fermi_energy","scope":"pw-scf"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"indices-below-fermi","head":false,"next":"8771dc7f-878e-5f13-a840-a3a416854f1e","schemaVersion":"2022.8.16","isDefault":false},{"name":"Store Band Below EF","type":"assignment","operand":"KBAND_VALUE_BELOW_EF","value":"indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8771dc7f-878e-5f13-a840-a3a416854f1e","head":false,"next":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select Band","type":"assignment","operand":"KBAND_VALUE","value":"KBAND_VALUE_BELOW_EF","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","head":false,"next":"pp-wfn","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pp_wfn","head":false,"results":[{"name":"wavefunction_amplitude"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pp-wfn","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"pp_wfn","results":[{"name":"wavefunction_amplitude"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_wfn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","name":"Plot Wavefunction","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"plot WFN","head":true,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"57fca898-8e8b-5ef2-81a5-9d2b612bc18d","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"plot_wavefunction","results":[{"name":"file_content"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Wavefunction Amplitude","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","flowchartId":"36467db9-279f-52a3-a6ef-ffdc26d875ed","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Plot Wavefunction","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"e4ec581f-1cb3-5036-b698-999a96711559","flowchartId":"4ce49281-e731-550e-af66-6d2408db8237","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude","file_content"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"tags":["wfn","wfn_plot"],"application":{"name":"espresso"}},"espresso/zero_point_energy.json":{"_id":"3158c78d-58bb-5675-8c7f-6f2337061015","name":"Zero Point Energy","subworkflows":[{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","name":"Zero Point Energy","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"107595d1-490f-53a2-8432-7f8a12f14d96","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_zpe","head":false,"results":[{"name":"zero_point_energy"}],"monitors":[{"name":"standard_output"}],"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_gamma","results":[{"name":"zero_point_energy"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Zero Point Energy","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"151538cc-9e71-5269-8b9e-cb5977151227","flowchartId":"d906bd20-eb92-5a01-a0e2-c81a2d9b2a41","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"nwchem/total_energy.json":{"_id":"937fbac8-2dec-5fb1-a46f-b8a0cc3d3d05","name":"Total Energy","subworkflows":[{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","name":"Total Energy","application":{"name":"nwchem","shortName":"nwchem","summary":"NWChem","build":"GNU","isDefault":true,"version":"7.0.2","schemaVersion":"2022.8.16"},"properties":["total_energy","total_energy_contributions"],"model":{"type":"dft","subtype":"gga","method":{"type":"localorbital","subtype":"pople","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"nwchem_total_energy","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"nwchem","shortName":"nwchem","summary":"NWChem","build":"GNU","isDefault":true,"version":"7.0.2","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"}],"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem","schemaVersion":"2022.8.16"},"flavor":{"name":"nwchem_total_energy","results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"preProcessors":[],"postProcessors":[],"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Total Energy","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","flowchartId":"6059d61a-6a92-5657-9130-02208639aff8","schemaVersion":"2022.8.16","isDefault":false}],"properties":["total_energy","total_energy_contributions"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"nwchem"}},"python/ml/classification_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","name":"Python ML Train Classification","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"flowchartId":"head-set-predict-status","head":true,"next":"head-fetch-training-data","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Dataset","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"type":"object_storage","basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"head-branch-on-predict-status","schemaVersion":"2022.8.16","isDefault":false},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","then":"head-fetch-trained-model","head":false,"next":"head-fetch-trained-model","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["set-io-unit-filenames"],"enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"type":"object_storage","basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"end-of-ml-train-head","schemaVersion":"2022.8.16","isDefault":false},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"end-of-ml-train-head","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:setup_variables_packages","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:read_csv:pandas","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:train_test_split:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:pre_processing:standardization:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:model:random_forest_classification:sklearn","results":[{"name":"workflow:pyml_predict"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ROC Curve Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:post_processing:roc_curve:sklearn","results":[{"name":"file_content"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Set Up the Job","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Machine Learning","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","schemaVersion":"2022.8.16","isDefault":false}],"properties":["file_content","workflow:pyml_predict"],"workflows":[],"isUsingDataset":true,"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"python/ml/clustering_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","name":"Python ML Train Clustering","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"flowchartId":"head-set-predict-status","head":true,"next":"head-fetch-training-data","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Dataset","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"type":"object_storage","basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"head-branch-on-predict-status","schemaVersion":"2022.8.16","isDefault":false},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","then":"head-fetch-trained-model","head":false,"next":"head-fetch-trained-model","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["set-io-unit-filenames"],"enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"type":"object_storage","basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"end-of-ml-train-head","schemaVersion":"2022.8.16","isDefault":false},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"end-of-ml-train-head","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:setup_variables_packages","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:read_csv:pandas","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:train_test_split:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:pre_processing:standardization:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:model:random_forest_classification:sklearn","results":[{"name":"workflow:pyml_predict"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ROC Curve Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:post_processing:roc_curve:sklearn","results":[{"name":"file_content"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Set Up the Job","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Machine Learning","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","schemaVersion":"2022.8.16","isDefault":false}],"properties":["file_content","workflow:pyml_predict"],"workflows":[],"isUsingDataset":true,"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"python/ml/regression_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","name":"Python ML Train Regression","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"flowchartId":"head-set-predict-status","head":true,"next":"head-fetch-training-data","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Dataset","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"type":"object_storage","basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"head-branch-on-predict-status","schemaVersion":"2022.8.16","isDefault":false},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","then":"head-fetch-trained-model","head":false,"next":"head-fetch-trained-model","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["set-io-unit-filenames"],"enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"type":"object_storage","basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"end-of-ml-train-head","schemaVersion":"2022.8.16","isDefault":false},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"end-of-ml-train-head","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:setup_variables_packages","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:read_csv:pandas","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:train_test_split:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:pre_processing:standardization:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:model:multilayer_perceptron:sklearn","results":[{"name":"workflow:pyml_predict"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Parity Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:post_processing:parity_plot:matplotlib","results":[{"name":"file_content"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Set Up the Job","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Machine Learning","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","schemaVersion":"2022.8.16","isDefault":false}],"properties":["file_content","workflow:pyml_predict"],"workflows":[],"isUsingDataset":true,"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"python/python_script.json":{"_id":"de816646-766b-5f97-b468-0937d4381440","name":"Python Script","subworkflows":[{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","name":"Python Script","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"python","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"hello_world","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Python Script","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","flowchartId":"c50e28b2-a0c5-5324-8b6f-e99b5a546bd8","schemaVersion":"2022.8.16","isDefault":false}],"properties":[],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"shell/batch_espresso_pwscf.json":{"_id":"e0046fb4-37db-5732-bf81-c48e13081a4c","name":"Shell Batch Job (Espresso PWSCF)","subworkflows":[{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","name":"Shell Batch Job (Espresso PWSCF)","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"name":"job_espresso_pw_scf","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Shell Batch Job (Espresso PWSCF)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","flowchartId":"d884e8f7-7acf-5a03-bc9a-186903bdaa0e","schemaVersion":"2022.8.16","isDefault":false}],"properties":[],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"shell"}},"shell/hello_world.json":{"_id":"d2fd444c-06b4-5d66-baeb-449c680ae1bf","name":"Shell Script","subworkflows":[{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","name":"Shell Hello World","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"name":"hello_world","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Shell Hello World","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","flowchartId":"319307c2-bf22-5bf2-b4e9-a4cdf671b786","schemaVersion":"2022.8.16","isDefault":false}],"properties":[],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"shell"}},"vasp/band_gap.json":{"_id":"1a358471-0a73-5fcb-ad3c-7a8079029c86","name":"Band Gap","subworkflows":[{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","name":"Band Gap","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"f0d65517-9592-5bc8-948e-a0851a766cbb","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_nscf","head":false,"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_nscf","results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Band Gap","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","flowchartId":"db3b83ea-0ef5-594c-89a8-bde38dbc6105","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/band_structure_dos.json":{"_id":"c8338d40-3c6e-5581-b03c-d7fb5cbb8df5","name":"Band Structure + Density of States","subworkflows":[{"_id":"d38fea11-9781-5151-8dae-d705381498be","name":"Band Structure + Density of States","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Band Structure + Density of States","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"d38fea11-9781-5151-8dae-d705381498be","flowchartId":"8a098bb9-73b1-5e84-bfc7-b783e02d0f53","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/band_structure.json":{"_id":"25b0ad08-87bb-5400-bea4-acd5fe2163c0","name":"Band Structure","subworkflows":[{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","name":"Band Structure","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Band Structure","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","flowchartId":"c573187f-a8bb-5084-9fcf-1560bf4a7786","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/dos.json":{"_id":"629a79fb-a03f-5e34-b2ce-9c735e8ef6c0","name":"Density of States","subworkflows":[{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","name":"Density of States","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Density of States","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","flowchartId":"3e64fdb4-ab5b-52a0-a1d5-51343c49481c","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/fixed_cell_relaxation.json":{"_id":"cb69418c-2f6c-551d-af81-0cf20ec1113d","name":"Fixed-cell Relaxation","subworkflows":[{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","name":"Fixed-cell Relaxation","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_relax","head":true,"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_relax","results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Fixed-cell Relaxation","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","flowchartId":"0de8c4c8-b722-5cd2-ae68-b484262e0a01","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/kpoint_convergence.json":{"_id":"fcf105f9-5ae7-5c32-a6b3-e3579cbdf39a","name":"K-point Convergence","subworkflows":[{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","name":"K-point Convergence","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-tolerance","head":true,"next":"init-increment","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-increment","head":false,"next":"init-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-result","head":false,"next":"init-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-parameter","head":false,"next":"vasp-kpoint-convergence","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"vasp-kpoint-convergence","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_kpt_conv","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"store-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"store-result","head":false,"next":"check-convergence","schemaVersion":"2022.8.16","isDefault":false},{"name":"check convergence","type":"condition","input":[],"statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"check-convergence","then":"convergence-is-reached","else":"update-result","head":false,"next":"update-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"update-result","head":false,"next":"increment-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"increment-parameter","next":"vasp-kpoint-convergence","head":false,"schemaVersion":"2022.8.16","isDefault":false},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"convergence-is-reached","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"K-point Convergence","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","flowchartId":"a34eec2c-cdb2-537d-88c0-ed1d7b205879","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/neb.json":{"_id":"2973908e-21ae-5424-afc9-ccb3fde477d8","name":"Nudged Elastic Band (NEB)","subworkflows":[{"isMultiMaterial":true,"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","name":"Initial/Final Total Energies","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_neb_initial","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_neb_initial","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"e65a17ce-10c8-5710-ad4d-fb3d42434091","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_neb_final","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_neb_final","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"compute":{"ppn":1,"nodes":1,"queue":"D","timeLimit":"01:00:00","notify":"n","cluster":{"fqdn":""},"timeLimitType":"per single attempt","isRestartable":true,"arguments":{"nimage":1,"npools":1,"nband":1,"ntg":1,"ndiag":1}},"schemaVersion":"2022.8.16","isDraft":false},{"isMultiMaterial":true,"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","name":"Prepare Directories","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"prepare-neb-images","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"name":"bash_vasp_prepare_neb_images","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < Date: Thu, 19 Mar 2026 15:32:17 +0200 Subject: [PATCH 04/14] chore: remove ade dependency --- package-lock.json | 21 --------------------- package.json | 1 - 2 files changed, 22 deletions(-) diff --git a/package-lock.json b/package-lock.json index da871a55..9a13ce17 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,6 @@ }, "devDependencies": { "@exabyte-io/eslint-config": "2025.5.13-0", - "@mat3ra/ade": "git+https://github.com/Exabyte-io/ade.git#6d494337d83e1b22fe272ff74cc1b6842a7c6561", "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#3b42a844bebd5de65dc3877f7602521af308a09e", "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse.git#be892d203b9f7cf6525270b1a1f6352c7f3fc055", "@mat3ra/fixtures": "git+https://github.com/Exabyte-io/fixtures.git#7501b0dcc28848b48194085685d332828509efdb", @@ -2529,26 +2528,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@mat3ra/ade": { - "version": "0.0.0", - "resolved": "git+ssh://git@github.com/Exabyte-io/ade.git#6d494337d83e1b22fe272ff74cc1b6842a7c6561", - "integrity": "sha512-6c0/WS3y8i1Su1PDiIQKWkAktlFlJN8etFHGVUmYBWEwb7yFlg4fGccvOpLAhqga5Yk/SPcA7NEuMB+BwnpyXQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "@mat3ra/code": "*", - "@mat3ra/esse": "*", - "@mat3ra/made": "*", - "@mat3ra/standata": "*", - "@mat3ra/utils": "*" - } - }, "node_modules/@mat3ra/code": { "version": "0.0.0", "resolved": "git+ssh://git@github.com/Exabyte-io/code.git#3b42a844bebd5de65dc3877f7602521af308a09e", diff --git a/package.json b/package.json index b84456b3..67cbb9f5 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,6 @@ }, "devDependencies": { "@exabyte-io/eslint-config": "2025.5.13-0", - "@mat3ra/ade": "git+https://github.com/Exabyte-io/ade.git#6d494337d83e1b22fe272ff74cc1b6842a7c6561", "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#3b42a844bebd5de65dc3877f7602521af308a09e", "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse.git#be892d203b9f7cf6525270b1a1f6352c7f3fc055", "@mat3ra/fixtures": "git+https://github.com/Exabyte-io/fixtures.git#7501b0dcc28848b48194085685d332828509efdb", From f3699242944d68e9ca741e7f4b1f1fed71836004 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Thu, 19 Mar 2026 16:54:00 +0200 Subject: [PATCH 05/14] chore: move ade factory methods to standata --- .../average_electrostatic_potential.json | 16 +- ...e_electrostatic_potential_find_minima.json | 4 +- ...rostatic_potential_via_band_structure.json | 26 +- .../subworkflows/espresso/band_gap.json | 12 +- .../espresso/band_gap_hse_dos.json | 12 +- .../subworkflows/espresso/band_structure.json | 16 +- .../espresso/band_structure_dos.json | 28 +- .../espresso/band_structure_hse.json | 10 +- .../espresso/band_structure_magn.json | 20 +- .../espresso/band_structure_soc.json | 16 +- .../espresso/dielectric_tensor.json | 18 +- data/workflows/subworkflows/espresso/dos.json | 18 +- .../espresso/electronic_density_mesh.json | 10 +- data/workflows/subworkflows/espresso/esm.json | 6 +- .../subworkflows/espresso/esm_relax.json | 6 +- .../espresso/espresso_extract_kpoints.json | 4 +- .../espresso/fixed_cell_relaxation.json | 6 +- ...and_structure_band_gap_full_frequency.json | 12 +- ..._band_structure_band_gap_plasmon_pole.json | 12 +- .../espresso/kpoint_convergence.json | 6 +- data/workflows/subworkflows/espresso/neb.json | 6 +- .../espresso/ph_init_qpoints.json | 4 +- .../espresso/ph_single_irr_qpt.json | 4 +- .../espresso/phonon_dispersions.json | 22 +- .../subworkflows/espresso/phonon_dos.json | 22 +- .../espresso/phonon_dos_dispersion.json | 28 +- .../subworkflows/espresso/phonon_reduce.json | 20 +- .../espresso/plot_wavefunction.json | 6 +- .../subworkflows/espresso/post_processor.json | 4 +- .../subworkflows/espresso/pre_processor.json | 4 +- .../subworkflows/espresso/pw_scf.json | 6 +- .../espresso/recalculate_bands.json | 10 +- .../subworkflows/espresso/surface_energy.json | 6 +- .../subworkflows/espresso/total_energy.json | 6 +- .../espresso/variable_cell_relaxation.json | 6 +- .../espresso/wavefunction_amplitude.json | 12 +- .../espresso/zero_point_energy.json | 12 +- .../subworkflows/nwchem/total_energy.json | 6 +- .../python/ml/classification_tail.json | 28 +- .../python/ml/clustering_tail.json | 28 +- .../python/ml/regression_tail.json | 28 +- .../subworkflows/python/python_script.json | 4 +- .../shell/batch_espresso_pwscf.json | 4 +- .../subworkflows/shell/hello_world.json | 4 +- .../workflows/subworkflows/vasp/band_gap.json | 12 +- .../subworkflows/vasp/band_structure.json | 12 +- .../subworkflows/vasp/band_structure_dos.json | 12 +- data/workflows/subworkflows/vasp/dos.json | 6 +- .../vasp/fixed_cell_relaxation.json | 14 +- .../vasp/initial_final_total_energies.json | 12 +- .../subworkflows/vasp/kpoint_convergence.json | 6 +- .../subworkflows/vasp/neb_subworkflow.json | 6 +- .../subworkflows/vasp/prepare_images.json | 4 +- .../subworkflows/vasp/recalculate_bands.json | 6 +- .../subworkflows/vasp/surface_energy.json | 6 +- .../subworkflows/vasp/total_energy.json | 6 +- .../vasp/variable_cell_relaxation.json | 14 +- .../subworkflows/vasp/zero_point_energy.json | 6 +- .../average_electrostatic_potential.json | 16 +- .../workflows/espresso/band_gap.json | 12 +- .../workflows/espresso/band_gap_dos_hse.json | 12 +- .../workflows/espresso/band_structure.json | 16 +- .../espresso/band_structure_dos.json | 28 +- .../espresso/band_structure_hse.json | 20 +- .../espresso/band_structure_magn.json | 20 +- .../espresso/band_structure_soc.json | 16 +- .../workflows/espresso/dielectric_tensor.json | 18 +- data/workflows/workflows/espresso/dos.json | 18 +- .../espresso/electronic_density_mesh.json | 10 +- data/workflows/workflows/espresso/esm.json | 6 +- .../workflows/espresso/esm_relax.json | 6 +- .../espresso/fixed_cell_relaxation.json | 6 +- ...and_structure_band_gap_full_frequency.json | 12 +- ..._band_structure_band_gap_plasmon_pole.json | 12 +- .../espresso/kpoint_convergence.json | 6 +- data/workflows/workflows/espresso/neb.json | 6 +- .../espresso/phonon_dispersions.json | 22 +- .../workflows/espresso/phonon_dos.json | 22 +- .../espresso/phonon_dos_dispersion.json | 28 +- .../workflows/espresso/phonon_map.json | 44 +- .../workflows/espresso/recalculate_bands.json | 10 +- .../workflows/espresso/surface_energy.json | 6 +- .../workflows/espresso/total_energy.json | 6 +- .../espresso/valence_band_offset.json | 90 +- .../espresso/variable_cell_relaxation.json | 6 +- .../espresso/wavefunction_amplitude.json | 18 +- .../workflows/espresso/zero_point_energy.json | 12 +- .../workflows/nwchem/total_energy.json | 6 +- .../python/ml/classification_workflow.json | 28 +- .../python/ml/clustering_workflow.json | 28 +- .../python/ml/regression_workflow.json | 28 +- .../workflows/python/python_script.json | 4 +- .../workflows/shell/batch_espresso_pwscf.json | 4 +- .../workflows/shell/hello_world.json | 4 +- data/workflows/workflows/vasp/band_gap.json | 12 +- .../workflows/vasp/band_structure.json | 12 +- .../workflows/vasp/band_structure_dos.json | 12 +- data/workflows/workflows/vasp/dos.json | 6 +- .../workflows/vasp/fixed_cell_relaxation.json | 14 +- .../workflows/vasp/kpoint_convergence.json | 6 +- data/workflows/workflows/vasp/neb.json | 22 +- .../workflows/vasp/recalculate_bands.json | 6 +- .../workflows/vasp/surface_energy.json | 6 +- .../workflows/vasp/total_energy.json | 6 +- .../vasp/variable_cell_relaxation.json | 14 +- .../workflows/vasp/zero_point_energy.json | 6 +- dist/js/application.d.ts | 1286 ++++++++--------- dist/js/application.js | 35 +- dist/js/runtime_data/workflows.json | 2 +- dist/js/types/application.d.ts | 2 +- src/js/application.ts | 44 +- src/js/types/application.ts | 2 +- src/py/mat3ra/standata/data/subworkflows.py | 2 +- src/py/mat3ra/standata/data/workflows.py | 2 +- tests/js/application.test.ts | 63 +- 115 files changed, 1434 insertions(+), 1392 deletions(-) diff --git a/data/workflows/subworkflows/espresso/average_electrostatic_potential.json b/data/workflows/subworkflows/espresso/average_electrostatic_potential.json index 2baf5c17..a06e130b 100644 --- a/data/workflows/subworkflows/espresso/average_electrostatic_potential.json +++ b/data/workflows/subworkflows/espresso/average_electrostatic_potential.json @@ -100,7 +100,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -124,8 +125,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -142,6 +141,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ @@ -212,10 +212,9 @@ "isDefault": false }, "flavor": { - "name": "pp_electrostatic_potential", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "pp.x", "input": [ @@ -228,6 +227,7 @@ "name": "standard_output" } ], + "name": "pp_electrostatic_potential", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -293,14 +293,13 @@ "isDefault": false }, "flavor": { - "name": "average_potential", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "average_potential_profile" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "average.x", "input": [ @@ -313,6 +312,7 @@ "name": "standard_output" } ], + "name": "average_potential", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/espresso/average_electrostatic_potential_find_minima.json b/data/workflows/subworkflows/espresso/average_electrostatic_potential_find_minima.json index 5f935354..2d6b8a9b 100644 --- a/data/workflows/subworkflows/espresso/average_electrostatic_potential_find_minima.json +++ b/data/workflows/subworkflows/espresso/average_electrostatic_potential_find_minima.json @@ -53,10 +53,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "generic:processing:find_extrema:scipy", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -74,6 +73,7 @@ "name": "standard_output" } ], + "name": "generic:processing:find_extrema:scipy", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/espresso/average_electrostatic_potential_via_band_structure.json b/data/workflows/subworkflows/espresso/average_electrostatic_potential_via_band_structure.json index e584d1e3..85fc5f27 100644 --- a/data/workflows/subworkflows/espresso/average_electrostatic_potential_via_band_structure.json +++ b/data/workflows/subworkflows/espresso/average_electrostatic_potential_via_band_structure.json @@ -121,7 +121,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -145,8 +146,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -163,6 +162,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ @@ -248,14 +248,13 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_bands", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "band_structure" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -268,6 +267,7 @@ "name": "standard_output" } ], + "name": "pw_bands", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -382,10 +382,9 @@ "isDefault": false }, "flavor": { - "name": "bands", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -398,6 +397,7 @@ "name": "standard_output" } ], + "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -459,10 +459,9 @@ "isDefault": false }, "flavor": { - "name": "pp_electrostatic_potential", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "pp.x", "input": [ @@ -475,6 +474,7 @@ "name": "standard_output" } ], + "name": "pp_electrostatic_potential", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -540,14 +540,13 @@ "isDefault": false }, "flavor": { - "name": "average_potential", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "average_potential_profile" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "average.x", "input": [ @@ -560,6 +559,7 @@ "name": "standard_output" } ], + "name": "average_potential", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/espresso/band_gap.json b/data/workflows/subworkflows/espresso/band_gap.json index 5617f87a..8e5e8841 100644 --- a/data/workflows/subworkflows/espresso/band_gap.json +++ b/data/workflows/subworkflows/espresso/band_gap.json @@ -100,7 +100,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -124,8 +125,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -142,6 +141,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ @@ -230,7 +230,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_nscf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "fermi_energy" @@ -239,8 +240,6 @@ "name": "band_gaps" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -253,6 +252,7 @@ "name": "standard_output" } ], + "name": "pw_nscf", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/espresso/band_gap_hse_dos.json b/data/workflows/subworkflows/espresso/band_gap_hse_dos.json index 19381919..8d7b00c9 100644 --- a/data/workflows/subworkflows/espresso/band_gap_hse_dos.json +++ b/data/workflows/subworkflows/espresso/band_gap_hse_dos.json @@ -104,7 +104,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf_hse", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -131,8 +132,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -148,6 +147,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf_hse", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -223,14 +223,13 @@ "isDefault": false }, "flavor": { - "name": "projwfc", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "density_of_states" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "projwfc.x", "input": [ @@ -243,6 +242,7 @@ "name": "standard_output" } ], + "name": "projwfc", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/espresso/band_structure.json b/data/workflows/subworkflows/espresso/band_structure.json index fe8151c9..ad6dfb8c 100644 --- a/data/workflows/subworkflows/espresso/band_structure.json +++ b/data/workflows/subworkflows/espresso/band_structure.json @@ -100,7 +100,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -124,8 +125,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -142,6 +141,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ @@ -227,14 +227,13 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_bands", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "band_structure" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -247,6 +246,7 @@ "name": "standard_output" } ], + "name": "pw_bands", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -318,10 +318,9 @@ "isDefault": false }, "flavor": { - "name": "bands", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -334,6 +333,7 @@ "name": "standard_output" } ], + "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/espresso/band_structure_dos.json b/data/workflows/subworkflows/espresso/band_structure_dos.json index 0fd3ab7f..51d9a149 100644 --- a/data/workflows/subworkflows/espresso/band_structure_dos.json +++ b/data/workflows/subworkflows/espresso/band_structure_dos.json @@ -102,7 +102,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -126,8 +127,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -144,6 +143,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ @@ -229,14 +229,13 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_bands", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "band_structure" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -249,6 +248,7 @@ "name": "standard_output" } ], + "name": "pw_bands", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -320,10 +320,9 @@ "isDefault": false }, "flavor": { - "name": "bands", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -336,6 +335,7 @@ "name": "standard_output" } ], + "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -415,7 +415,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_nscf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "fermi_energy" @@ -424,8 +425,6 @@ "name": "band_gaps" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -438,6 +437,7 @@ "name": "standard_output" } ], + "name": "pw_nscf", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -513,14 +513,13 @@ "isDefault": false }, "flavor": { - "name": "projwfc", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "density_of_states" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "projwfc.x", "input": [ @@ -533,6 +532,7 @@ "name": "standard_output" } ], + "name": "projwfc", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/espresso/band_structure_hse.json b/data/workflows/subworkflows/espresso/band_structure_hse.json index fde7e013..fe355616 100644 --- a/data/workflows/subworkflows/espresso/band_structure_hse.json +++ b/data/workflows/subworkflows/espresso/band_structure_hse.json @@ -99,7 +99,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf_bands_hse", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "total_energy" @@ -123,8 +124,6 @@ "name": "stress_tensor" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -140,6 +139,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf_bands_hse", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -214,10 +214,9 @@ "isDefault": false }, "flavor": { - "name": "bands", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -230,6 +229,7 @@ "name": "standard_output" } ], + "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/espresso/band_structure_magn.json b/data/workflows/subworkflows/espresso/band_structure_magn.json index be2d6688..4b205363 100644 --- a/data/workflows/subworkflows/espresso/band_structure_magn.json +++ b/data/workflows/subworkflows/espresso/band_structure_magn.json @@ -100,7 +100,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf_magn", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -124,8 +125,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -141,6 +140,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf_magn", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -230,14 +230,13 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_bands_magn", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "band_structure" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -250,6 +249,7 @@ "name": "standard_output" } ], + "name": "pw_bands_magn", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -324,10 +324,9 @@ "isDefault": false }, "flavor": { - "name": "bands_spin_up", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -340,6 +339,7 @@ "name": "standard_output" } ], + "name": "bands_spin_up", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -401,10 +401,9 @@ "isDefault": false }, "flavor": { - "name": "bands_spin_dn", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -417,6 +416,7 @@ "name": "standard_output" } ], + "name": "bands_spin_dn", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/espresso/band_structure_soc.json b/data/workflows/subworkflows/espresso/band_structure_soc.json index 105bd41c..c93235fb 100644 --- a/data/workflows/subworkflows/espresso/band_structure_soc.json +++ b/data/workflows/subworkflows/espresso/band_structure_soc.json @@ -102,7 +102,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf_soc", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -126,8 +127,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -143,6 +142,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf_soc", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -232,14 +232,13 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_bands_soc", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "band_structure" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -252,6 +251,7 @@ "name": "standard_output" } ], + "name": "pw_bands_soc", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -326,10 +326,9 @@ "isDefault": false }, "flavor": { - "name": "bands", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -342,6 +341,7 @@ "name": "standard_output" } ], + "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/espresso/dielectric_tensor.json b/data/workflows/subworkflows/espresso/dielectric_tensor.json index 88f1f6b8..9c8ed845 100644 --- a/data/workflows/subworkflows/espresso/dielectric_tensor.json +++ b/data/workflows/subworkflows/espresso/dielectric_tensor.json @@ -101,7 +101,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -125,8 +126,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -143,6 +142,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ @@ -250,7 +250,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_nscf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "fermi_energy" @@ -259,8 +260,6 @@ "name": "band_gaps" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -273,6 +272,7 @@ "name": "standard_output" } ], + "name": "pw_nscf", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -348,14 +348,13 @@ "isDefault": false }, "flavor": { - "name": "dielectric_tensor", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "dielectric_tensor" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "epsilon.x", "input": [ @@ -368,6 +367,7 @@ "name": "standard_output" } ], + "name": "dielectric_tensor", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/espresso/dos.json b/data/workflows/subworkflows/espresso/dos.json index bcba4b24..b420243f 100644 --- a/data/workflows/subworkflows/espresso/dos.json +++ b/data/workflows/subworkflows/espresso/dos.json @@ -101,7 +101,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -125,8 +126,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -143,6 +142,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ @@ -231,7 +231,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_nscf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "fermi_energy" @@ -240,8 +241,6 @@ "name": "band_gaps" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -254,6 +253,7 @@ "name": "standard_output" } ], + "name": "pw_nscf", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -329,14 +329,13 @@ "isDefault": false }, "flavor": { - "name": "projwfc", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "density_of_states" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "projwfc.x", "input": [ @@ -349,6 +348,7 @@ "name": "standard_output" } ], + "name": "projwfc", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/espresso/electronic_density_mesh.json b/data/workflows/subworkflows/espresso/electronic_density_mesh.json index 65fff8eb..5737f5bd 100644 --- a/data/workflows/subworkflows/espresso/electronic_density_mesh.json +++ b/data/workflows/subworkflows/espresso/electronic_density_mesh.json @@ -99,7 +99,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -123,8 +124,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -141,6 +140,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ @@ -211,10 +211,9 @@ "isDefault": false }, "flavor": { - "name": "pp_density", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "pp.x", "input": [ @@ -227,6 +226,7 @@ "name": "standard_output" } ], + "name": "pp_density", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/espresso/esm.json b/data/workflows/subworkflows/espresso/esm.json index e795c7a7..fd873491 100644 --- a/data/workflows/subworkflows/espresso/esm.json +++ b/data/workflows/subworkflows/espresso/esm.json @@ -107,7 +107,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_esm", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "total_energy" @@ -137,8 +138,6 @@ "name": "charge_density_profile" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -154,6 +153,7 @@ "name": "convergence_electronic" } ], + "name": "pw_esm", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/espresso/esm_relax.json b/data/workflows/subworkflows/espresso/esm_relax.json index fffb2979..4cd988bb 100644 --- a/data/workflows/subworkflows/espresso/esm_relax.json +++ b/data/workflows/subworkflows/espresso/esm_relax.json @@ -107,7 +107,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_esm_relax", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "total_energy" @@ -137,8 +138,6 @@ "name": "charge_density_profile" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -154,6 +153,7 @@ "name": "convergence_electronic" } ], + "name": "pw_esm_relax", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/espresso/espresso_extract_kpoints.json b/data/workflows/subworkflows/espresso/espresso_extract_kpoints.json index 4aa5b2e8..e3a52fe0 100644 --- a/data/workflows/subworkflows/espresso/espresso_extract_kpoints.json +++ b/data/workflows/subworkflows/espresso/espresso_extract_kpoints.json @@ -53,10 +53,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "espresso_extract_kpoints", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -73,6 +72,7 @@ "name": "standard_output" } ], + "name": "espresso_extract_kpoints", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/espresso/fixed_cell_relaxation.json b/data/workflows/subworkflows/espresso/fixed_cell_relaxation.json index b7b58cbc..33d1c246 100644 --- a/data/workflows/subworkflows/espresso/fixed_cell_relaxation.json +++ b/data/workflows/subworkflows/espresso/fixed_cell_relaxation.json @@ -102,7 +102,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_relax", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "total_energy" @@ -126,8 +127,6 @@ "name": "final_structure" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -146,6 +145,7 @@ "name": "convergence_ionic" } ], + "name": "pw_relax", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/espresso/gw_band_structure_band_gap_full_frequency.json b/data/workflows/subworkflows/espresso/gw_band_structure_band_gap_full_frequency.json index 2dbde822..9aee8e89 100644 --- a/data/workflows/subworkflows/espresso/gw_band_structure_band_gap_full_frequency.json +++ b/data/workflows/subworkflows/espresso/gw_band_structure_band_gap_full_frequency.json @@ -103,7 +103,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -127,8 +128,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -145,6 +144,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ @@ -225,7 +225,8 @@ "isDefault": false }, "flavor": { - "name": "gw_bands_full_frequency", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "band_structure" @@ -237,8 +238,6 @@ "name": "band_gaps" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "gw.x", "input": [ @@ -251,6 +250,7 @@ "name": "standard_output" } ], + "name": "gw_bands_full_frequency", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/espresso/gw_band_structure_band_gap_plasmon_pole.json b/data/workflows/subworkflows/espresso/gw_band_structure_band_gap_plasmon_pole.json index 791c3075..59544f68 100644 --- a/data/workflows/subworkflows/espresso/gw_band_structure_band_gap_plasmon_pole.json +++ b/data/workflows/subworkflows/espresso/gw_band_structure_band_gap_plasmon_pole.json @@ -103,7 +103,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -127,8 +128,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -145,6 +144,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ @@ -225,7 +225,8 @@ "isDefault": false }, "flavor": { - "name": "gw_bands_plasmon_pole", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "band_structure" @@ -237,8 +238,6 @@ "name": "band_gaps" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "gw.x", "input": [ @@ -251,6 +250,7 @@ "name": "standard_output" } ], + "name": "gw_bands_plasmon_pole", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/espresso/kpoint_convergence.json b/data/workflows/subworkflows/espresso/kpoint_convergence.json index e0b33a12..b46e6b8d 100644 --- a/data/workflows/subworkflows/espresso/kpoint_convergence.json +++ b/data/workflows/subworkflows/espresso/kpoint_convergence.json @@ -171,7 +171,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf_kpt_conv", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "total_energy" @@ -192,8 +193,6 @@ "name": "stress_tensor" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -209,6 +208,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf_kpt_conv", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/espresso/neb.json b/data/workflows/subworkflows/espresso/neb.json index b065a727..918c7caf 100644 --- a/data/workflows/subworkflows/espresso/neb.json +++ b/data/workflows/subworkflows/espresso/neb.json @@ -66,7 +66,8 @@ "isDefault": false }, "flavor": { - "name": "neb", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "reaction_energy_barrier" @@ -75,8 +76,6 @@ "name": "reaction_energy_profile" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "neb.x", "input": [ @@ -89,6 +88,7 @@ "name": "standard_output" } ], + "name": "neb", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/espresso/ph_init_qpoints.json b/data/workflows/subworkflows/espresso/ph_init_qpoints.json index a340876e..0241d351 100644 --- a/data/workflows/subworkflows/espresso/ph_init_qpoints.json +++ b/data/workflows/subworkflows/espresso/ph_init_qpoints.json @@ -55,10 +55,9 @@ "isDefault": false }, "flavor": { - "name": "ph_init_qpoints", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "ph.x", "input": [ @@ -71,6 +70,7 @@ "name": "standard_output" } ], + "name": "ph_init_qpoints", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/espresso/ph_single_irr_qpt.json b/data/workflows/subworkflows/espresso/ph_single_irr_qpt.json index 90fd5a06..c5b26c2e 100644 --- a/data/workflows/subworkflows/espresso/ph_single_irr_qpt.json +++ b/data/workflows/subworkflows/espresso/ph_single_irr_qpt.json @@ -55,10 +55,9 @@ "isDefault": false }, "flavor": { - "name": "ph_single_irr_qpt", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "ph.x", "input": [ @@ -71,6 +70,7 @@ "name": "standard_output" } ], + "name": "ph_single_irr_qpt", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/espresso/phonon_dispersions.json b/data/workflows/subworkflows/espresso/phonon_dispersions.json index de58851b..3ea703f3 100644 --- a/data/workflows/subworkflows/espresso/phonon_dispersions.json +++ b/data/workflows/subworkflows/espresso/phonon_dispersions.json @@ -101,7 +101,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -125,8 +126,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -143,6 +142,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ @@ -217,14 +217,13 @@ "isDefault": false }, "flavor": { - "name": "ph_grid", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "phonon_dos" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "ph.x", "input": [ @@ -237,6 +236,7 @@ "name": "standard_output" } ], + "name": "ph_grid", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -302,10 +302,9 @@ "isDefault": false }, "flavor": { - "name": "q2r", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "q2r.x", "input": [ @@ -318,6 +317,7 @@ "name": "standard_output" } ], + "name": "q2r", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -383,14 +383,13 @@ "isDefault": false }, "flavor": { - "name": "matdyn_path", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "phonon_dispersions" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "matdyn.x", "input": [ @@ -403,6 +402,7 @@ "name": "standard_output" } ], + "name": "matdyn_path", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/espresso/phonon_dos.json b/data/workflows/subworkflows/espresso/phonon_dos.json index 9c0d7cd7..47962df6 100644 --- a/data/workflows/subworkflows/espresso/phonon_dos.json +++ b/data/workflows/subworkflows/espresso/phonon_dos.json @@ -100,7 +100,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -124,8 +125,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -142,6 +141,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ @@ -216,14 +216,13 @@ "isDefault": false }, "flavor": { - "name": "ph_grid", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "phonon_dos" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "ph.x", "input": [ @@ -236,6 +235,7 @@ "name": "standard_output" } ], + "name": "ph_grid", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -301,10 +301,9 @@ "isDefault": false }, "flavor": { - "name": "q2r", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "q2r.x", "input": [ @@ -317,6 +316,7 @@ "name": "standard_output" } ], + "name": "q2r", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -382,14 +382,13 @@ "isDefault": false }, "flavor": { - "name": "matdyn_grid", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "phonon_dos" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "matdyn.x", "input": [ @@ -402,6 +401,7 @@ "name": "standard_output" } ], + "name": "matdyn_grid", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/espresso/phonon_dos_dispersion.json b/data/workflows/subworkflows/espresso/phonon_dos_dispersion.json index 95f59923..b74b7163 100644 --- a/data/workflows/subworkflows/espresso/phonon_dos_dispersion.json +++ b/data/workflows/subworkflows/espresso/phonon_dos_dispersion.json @@ -101,7 +101,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -125,8 +126,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -143,6 +142,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ @@ -217,14 +217,13 @@ "isDefault": false }, "flavor": { - "name": "ph_grid", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "phonon_dos" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "ph.x", "input": [ @@ -237,6 +236,7 @@ "name": "standard_output" } ], + "name": "ph_grid", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -302,10 +302,9 @@ "isDefault": false }, "flavor": { - "name": "q2r", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "q2r.x", "input": [ @@ -318,6 +317,7 @@ "name": "standard_output" } ], + "name": "q2r", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -383,14 +383,13 @@ "isDefault": false }, "flavor": { - "name": "matdyn_grid", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "phonon_dos" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "matdyn.x", "input": [ @@ -403,6 +402,7 @@ "name": "standard_output" } ], + "name": "matdyn_grid", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -472,14 +472,13 @@ "isDefault": false }, "flavor": { - "name": "matdyn_path", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "phonon_dispersions" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "matdyn.x", "input": [ @@ -492,6 +491,7 @@ "name": "standard_output" } ], + "name": "matdyn_path", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/espresso/phonon_reduce.json b/data/workflows/subworkflows/espresso/phonon_reduce.json index 77279c40..dcdfaeb7 100644 --- a/data/workflows/subworkflows/espresso/phonon_reduce.json +++ b/data/workflows/subworkflows/espresso/phonon_reduce.json @@ -58,10 +58,9 @@ "isDefault": false }, "flavor": { - "name": "ph_grid_restart", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "ph.x", "input": [ @@ -74,6 +73,7 @@ "name": "standard_output" } ], + "name": "ph_grid_restart", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -139,10 +139,9 @@ "isDefault": false }, "flavor": { - "name": "q2r", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "q2r.x", "input": [ @@ -155,6 +154,7 @@ "name": "standard_output" } ], + "name": "q2r", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -220,14 +220,13 @@ "isDefault": false }, "flavor": { - "name": "matdyn_grid", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "phonon_dos" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "matdyn.x", "input": [ @@ -240,6 +239,7 @@ "name": "standard_output" } ], + "name": "matdyn_grid", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -309,14 +309,13 @@ "isDefault": false }, "flavor": { - "name": "matdyn_path", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "phonon_dispersions" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "matdyn.x", "input": [ @@ -329,6 +328,7 @@ "name": "standard_output" } ], + "name": "matdyn_path", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/espresso/plot_wavefunction.json b/data/workflows/subworkflows/espresso/plot_wavefunction.json index f2112c7b..2ea6fa3f 100644 --- a/data/workflows/subworkflows/espresso/plot_wavefunction.json +++ b/data/workflows/subworkflows/espresso/plot_wavefunction.json @@ -59,14 +59,13 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "plot_wavefunction", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "file_content" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -84,6 +83,7 @@ "name": "standard_output" } ], + "name": "plot_wavefunction", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/espresso/post_processor.json b/data/workflows/subworkflows/espresso/post_processor.json index 15df1e04..eb94f22f 100644 --- a/data/workflows/subworkflows/espresso/post_processor.json +++ b/data/workflows/subworkflows/espresso/post_processor.json @@ -53,10 +53,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "espresso_collect_dynmat", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "shell", "executableName": "sh", "input": [ @@ -69,6 +68,7 @@ "name": "standard_output" } ], + "name": "espresso_collect_dynmat", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/espresso/pre_processor.json b/data/workflows/subworkflows/espresso/pre_processor.json index 6dc11dea..b780c0fd 100644 --- a/data/workflows/subworkflows/espresso/pre_processor.json +++ b/data/workflows/subworkflows/espresso/pre_processor.json @@ -53,10 +53,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "espresso_link_outdir_save", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "shell", "executableName": "sh", "input": [ @@ -69,6 +68,7 @@ "name": "standard_output" } ], + "name": "espresso_link_outdir_save", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/espresso/pw_scf.json b/data/workflows/subworkflows/espresso/pw_scf.json index bc653ad6..d65132b8 100644 --- a/data/workflows/subworkflows/espresso/pw_scf.json +++ b/data/workflows/subworkflows/espresso/pw_scf.json @@ -99,7 +99,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -123,8 +124,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -141,6 +140,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ diff --git a/data/workflows/subworkflows/espresso/recalculate_bands.json b/data/workflows/subworkflows/espresso/recalculate_bands.json index 554d11f2..41757ba8 100644 --- a/data/workflows/subworkflows/espresso/recalculate_bands.json +++ b/data/workflows/subworkflows/espresso/recalculate_bands.json @@ -72,14 +72,13 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_bands", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "band_structure" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -92,6 +91,7 @@ "name": "standard_output" } ], + "name": "pw_bands", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -163,10 +163,9 @@ "isDefault": false }, "flavor": { - "name": "bands", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -179,6 +178,7 @@ "name": "standard_output" } ], + "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/espresso/surface_energy.json b/data/workflows/subworkflows/espresso/surface_energy.json index 879c66e2..0bab1866 100644 --- a/data/workflows/subworkflows/espresso/surface_energy.json +++ b/data/workflows/subworkflows/espresso/surface_energy.json @@ -100,7 +100,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -124,8 +125,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -142,6 +141,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ diff --git a/data/workflows/subworkflows/espresso/total_energy.json b/data/workflows/subworkflows/espresso/total_energy.json index c78b20d8..068b8cc2 100644 --- a/data/workflows/subworkflows/espresso/total_energy.json +++ b/data/workflows/subworkflows/espresso/total_energy.json @@ -99,7 +99,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -123,8 +124,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -141,6 +140,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ diff --git a/data/workflows/subworkflows/espresso/variable_cell_relaxation.json b/data/workflows/subworkflows/espresso/variable_cell_relaxation.json index 3e2d02d4..946bde02 100644 --- a/data/workflows/subworkflows/espresso/variable_cell_relaxation.json +++ b/data/workflows/subworkflows/espresso/variable_cell_relaxation.json @@ -103,7 +103,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_vc-relax", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "total_energy" @@ -127,8 +128,6 @@ "name": "final_structure" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -147,6 +146,7 @@ "name": "convergence_ionic" } ], + "name": "pw_vc-relax", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/espresso/wavefunction_amplitude.json b/data/workflows/subworkflows/espresso/wavefunction_amplitude.json index d3957b45..aa69b6e9 100644 --- a/data/workflows/subworkflows/espresso/wavefunction_amplitude.json +++ b/data/workflows/subworkflows/espresso/wavefunction_amplitude.json @@ -104,7 +104,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -128,8 +129,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -146,6 +145,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ @@ -306,14 +306,13 @@ "isDefault": false }, "flavor": { - "name": "pp_wfn", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "wavefunction_amplitude" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pp.x", "input": [ @@ -326,6 +325,7 @@ "name": "standard_output" } ], + "name": "pp_wfn", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/espresso/zero_point_energy.json b/data/workflows/subworkflows/espresso/zero_point_energy.json index 9a026c21..9980fe52 100644 --- a/data/workflows/subworkflows/espresso/zero_point_energy.json +++ b/data/workflows/subworkflows/espresso/zero_point_energy.json @@ -100,7 +100,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -124,8 +125,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -142,6 +141,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ @@ -216,14 +216,13 @@ "isDefault": false }, "flavor": { - "name": "ph_gamma", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "zero_point_energy" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "ph.x", "input": [ @@ -236,6 +235,7 @@ "name": "standard_output" } ], + "name": "ph_gamma", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/nwchem/total_energy.json b/data/workflows/subworkflows/nwchem/total_energy.json index 80b21cd9..9771caca 100644 --- a/data/workflows/subworkflows/nwchem/total_energy.json +++ b/data/workflows/subworkflows/nwchem/total_energy.json @@ -69,7 +69,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "nwchem_total_energy", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "total_energy" @@ -78,8 +79,6 @@ "name": "total_energy_contributions" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "nwchem", "executableName": "nwchem", "input": [ @@ -93,6 +92,7 @@ "name": "standard_output" } ], + "name": "nwchem_total_energy", "schemaVersion": "2022.8.16" }, "input": [ diff --git a/data/workflows/subworkflows/python/ml/classification_tail.json b/data/workflows/subworkflows/python/ml/classification_tail.json index ec620a53..9b0f2572 100644 --- a/data/workflows/subworkflows/python/ml/classification_tail.json +++ b/data/workflows/subworkflows/python/ml/classification_tail.json @@ -56,10 +56,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:setup_variables_packages", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -77,6 +76,7 @@ "name": "standard_output" } ], + "name": "pyml:setup_variables_packages", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -154,10 +154,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:data_input:read_csv:pandas", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -175,6 +174,7 @@ "name": "standard_output" } ], + "name": "pyml:data_input:read_csv:pandas", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -247,10 +247,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:data_input:train_test_split:sklearn", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -268,6 +267,7 @@ "name": "standard_output" } ], + "name": "pyml:data_input:train_test_split:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -344,10 +344,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:pre_processing:standardization:sklearn", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -365,6 +364,7 @@ "name": "standard_output" } ], + "name": "pyml:pre_processing:standardization:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -444,14 +444,13 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:model:random_forest_classification:sklearn", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "workflow:pyml_predict" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -469,6 +468,7 @@ "name": "standard_output" } ], + "name": "pyml:model:random_forest_classification:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -551,14 +551,13 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:post_processing:roc_curve:sklearn", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "file_content" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -576,6 +575,7 @@ "name": "standard_output" } ], + "name": "pyml:post_processing:roc_curve:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/python/ml/clustering_tail.json b/data/workflows/subworkflows/python/ml/clustering_tail.json index c3829320..22886b2a 100644 --- a/data/workflows/subworkflows/python/ml/clustering_tail.json +++ b/data/workflows/subworkflows/python/ml/clustering_tail.json @@ -56,10 +56,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:setup_variables_packages", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -77,6 +76,7 @@ "name": "standard_output" } ], + "name": "pyml:setup_variables_packages", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -154,10 +154,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:data_input:read_csv:pandas", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -175,6 +174,7 @@ "name": "standard_output" } ], + "name": "pyml:data_input:read_csv:pandas", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -247,10 +247,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:data_input:train_test_split:sklearn", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -268,6 +267,7 @@ "name": "standard_output" } ], + "name": "pyml:data_input:train_test_split:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -344,10 +344,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:pre_processing:standardization:sklearn", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -365,6 +364,7 @@ "name": "standard_output" } ], + "name": "pyml:pre_processing:standardization:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -444,14 +444,13 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:model:k_means_clustering:sklearn", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "workflow:pyml_predict" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -469,6 +468,7 @@ "name": "standard_output" } ], + "name": "pyml:model:k_means_clustering:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -557,14 +557,13 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:post_processing:pca_2d_clusters:matplotlib", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "file_content" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -582,6 +581,7 @@ "name": "standard_output" } ], + "name": "pyml:post_processing:pca_2d_clusters:matplotlib", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/python/ml/regression_tail.json b/data/workflows/subworkflows/python/ml/regression_tail.json index 42ff8661..84fb1aa7 100644 --- a/data/workflows/subworkflows/python/ml/regression_tail.json +++ b/data/workflows/subworkflows/python/ml/regression_tail.json @@ -56,10 +56,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:setup_variables_packages", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -77,6 +76,7 @@ "name": "standard_output" } ], + "name": "pyml:setup_variables_packages", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -154,10 +154,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:data_input:read_csv:pandas", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -175,6 +174,7 @@ "name": "standard_output" } ], + "name": "pyml:data_input:read_csv:pandas", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -247,10 +247,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:data_input:train_test_split:sklearn", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -268,6 +267,7 @@ "name": "standard_output" } ], + "name": "pyml:data_input:train_test_split:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -344,10 +344,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:pre_processing:standardization:sklearn", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -365,6 +364,7 @@ "name": "standard_output" } ], + "name": "pyml:pre_processing:standardization:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -444,14 +444,13 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:model:multilayer_perceptron:sklearn", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "workflow:pyml_predict" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -469,6 +468,7 @@ "name": "standard_output" } ], + "name": "pyml:model:multilayer_perceptron:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -551,14 +551,13 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:post_processing:parity_plot:matplotlib", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "file_content" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -576,6 +575,7 @@ "name": "standard_output" } ], + "name": "pyml:post_processing:parity_plot:matplotlib", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/python/python_script.json b/data/workflows/subworkflows/python/python_script.json index 31f818bc..4c772ff9 100644 --- a/data/workflows/subworkflows/python/python_script.json +++ b/data/workflows/subworkflows/python/python_script.json @@ -53,10 +53,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "hello_world", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -74,6 +73,7 @@ "name": "standard_output" } ], + "name": "hello_world", "schemaVersion": "2022.8.16" }, "input": [ diff --git a/data/workflows/subworkflows/shell/batch_espresso_pwscf.json b/data/workflows/subworkflows/shell/batch_espresso_pwscf.json index 4d18d8c4..e73f11bb 100644 --- a/data/workflows/subworkflows/shell/batch_espresso_pwscf.json +++ b/data/workflows/subworkflows/shell/batch_espresso_pwscf.json @@ -53,10 +53,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "job_espresso_pw_scf", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "shell", "executableName": "sh", "input": [ @@ -69,6 +68,7 @@ "name": "standard_output" } ], + "name": "job_espresso_pw_scf", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/shell/hello_world.json b/data/workflows/subworkflows/shell/hello_world.json index 641263df..9f1e340a 100644 --- a/data/workflows/subworkflows/shell/hello_world.json +++ b/data/workflows/subworkflows/shell/hello_world.json @@ -53,10 +53,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "hello_world", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "shell", "executableName": "sh", "input": [ @@ -70,6 +69,7 @@ "name": "standard_output" } ], + "name": "hello_world", "schemaVersion": "2022.8.16" }, "input": [ diff --git a/data/workflows/subworkflows/vasp/band_gap.json b/data/workflows/subworkflows/vasp/band_gap.json index c559e32b..aed47155 100644 --- a/data/workflows/subworkflows/vasp/band_gap.json +++ b/data/workflows/subworkflows/vasp/band_gap.json @@ -105,7 +105,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "vasp", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "total_energy" @@ -129,8 +130,6 @@ "name": "stress_tensor" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -153,6 +152,7 @@ "name": "convergence_electronic" } ], + "name": "vasp", "schemaVersion": "2022.8.16" }, "input": [ @@ -278,7 +278,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "vasp_nscf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "band_gaps" @@ -287,8 +288,6 @@ "name": "fermi_energy" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -313,6 +312,7 @@ "name": "convergence_electronic" } ], + "name": "vasp_nscf", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/vasp/band_structure.json b/data/workflows/subworkflows/vasp/band_structure.json index d1daed0f..dc8d8047 100644 --- a/data/workflows/subworkflows/vasp/band_structure.json +++ b/data/workflows/subworkflows/vasp/band_structure.json @@ -105,7 +105,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "vasp", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "total_energy" @@ -129,8 +130,6 @@ "name": "stress_tensor" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -153,6 +152,7 @@ "name": "convergence_electronic" } ], + "name": "vasp", "schemaVersion": "2022.8.16" }, "input": [ @@ -275,14 +275,13 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "vasp_bands", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "band_structure" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -307,6 +306,7 @@ "name": "convergence_electronic" } ], + "name": "vasp_bands", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/vasp/band_structure_dos.json b/data/workflows/subworkflows/vasp/band_structure_dos.json index d2684c98..015744d2 100644 --- a/data/workflows/subworkflows/vasp/band_structure_dos.json +++ b/data/workflows/subworkflows/vasp/band_structure_dos.json @@ -109,7 +109,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "vasp", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "total_energy" @@ -133,8 +134,6 @@ "name": "stress_tensor" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -157,6 +156,7 @@ "name": "convergence_electronic" } ], + "name": "vasp", "schemaVersion": "2022.8.16" }, "input": [ @@ -279,14 +279,13 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "vasp_bands", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "band_structure" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -311,6 +310,7 @@ "name": "convergence_electronic" } ], + "name": "vasp_bands", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/vasp/dos.json b/data/workflows/subworkflows/vasp/dos.json index adbef9c5..c7132477 100644 --- a/data/workflows/subworkflows/vasp/dos.json +++ b/data/workflows/subworkflows/vasp/dos.json @@ -108,7 +108,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "vasp", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "total_energy" @@ -132,8 +133,6 @@ "name": "stress_tensor" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -156,6 +155,7 @@ "name": "convergence_electronic" } ], + "name": "vasp", "schemaVersion": "2022.8.16" }, "input": [ diff --git a/data/workflows/subworkflows/vasp/fixed_cell_relaxation.json b/data/workflows/subworkflows/vasp/fixed_cell_relaxation.json index 8721c6d2..61deaeef 100644 --- a/data/workflows/subworkflows/vasp/fixed_cell_relaxation.json +++ b/data/workflows/subworkflows/vasp/fixed_cell_relaxation.json @@ -111,7 +111,12 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "vasp_relax", + "preProcessors": [], + "postProcessors": [ + { + "name": "prepare_restart" + } + ], "results": [ { "name": "total_energy" @@ -135,12 +140,6 @@ "name": "final_structure" } ], - "preProcessors": [], - "postProcessors": [ - { - "name": "prepare_restart" - } - ], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -168,6 +167,7 @@ "name": "convergence_ionic" } ], + "name": "vasp_relax", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/vasp/initial_final_total_energies.json b/data/workflows/subworkflows/vasp/initial_final_total_energies.json index 88367f1f..9c9e31d2 100644 --- a/data/workflows/subworkflows/vasp/initial_final_total_energies.json +++ b/data/workflows/subworkflows/vasp/initial_final_total_energies.json @@ -105,7 +105,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "vasp_neb_initial", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "total_energy" @@ -129,8 +130,6 @@ "name": "stress_tensor" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -154,6 +153,7 @@ "name": "convergence_electronic" } ], + "name": "vasp_neb_initial", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -301,7 +301,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "vasp_neb_final", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "total_energy" @@ -325,8 +326,6 @@ "name": "stress_tensor" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -350,6 +349,7 @@ "name": "convergence_electronic" } ], + "name": "vasp_neb_final", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/vasp/kpoint_convergence.json b/data/workflows/subworkflows/vasp/kpoint_convergence.json index bf1a8031..b4c0bee1 100644 --- a/data/workflows/subworkflows/vasp/kpoint_convergence.json +++ b/data/workflows/subworkflows/vasp/kpoint_convergence.json @@ -180,7 +180,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "vasp_kpt_conv", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "total_energy" @@ -204,8 +205,6 @@ "name": "stress_tensor" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -230,6 +229,7 @@ "name": "convergence_electronic" } ], + "name": "vasp_kpt_conv", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/vasp/neb_subworkflow.json b/data/workflows/subworkflows/vasp/neb_subworkflow.json index 0d70871e..ecf43e1e 100644 --- a/data/workflows/subworkflows/vasp/neb_subworkflow.json +++ b/data/workflows/subworkflows/vasp/neb_subworkflow.json @@ -82,7 +82,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "vasp_neb", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "reaction_energy_barrier" @@ -91,8 +92,6 @@ "name": "reaction_energy_profile" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -110,6 +109,7 @@ "name": "standard_output" } ], + "name": "vasp_neb", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/vasp/prepare_images.json b/data/workflows/subworkflows/vasp/prepare_images.json index e6544d5b..80c8996b 100644 --- a/data/workflows/subworkflows/vasp/prepare_images.json +++ b/data/workflows/subworkflows/vasp/prepare_images.json @@ -54,10 +54,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "bash_vasp_prepare_neb_images", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "shell", "executableName": "sh", "input": [ @@ -70,6 +69,7 @@ "name": "standard_output" } ], + "name": "bash_vasp_prepare_neb_images", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/vasp/recalculate_bands.json b/data/workflows/subworkflows/vasp/recalculate_bands.json index b04b8cc9..2a164fd7 100644 --- a/data/workflows/subworkflows/vasp/recalculate_bands.json +++ b/data/workflows/subworkflows/vasp/recalculate_bands.json @@ -80,14 +80,13 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "vasp_bands", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "band_structure" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -112,6 +111,7 @@ "name": "convergence_electronic" } ], + "name": "vasp_bands", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/vasp/surface_energy.json b/data/workflows/subworkflows/vasp/surface_energy.json index 84f1ce94..809abcaf 100644 --- a/data/workflows/subworkflows/vasp/surface_energy.json +++ b/data/workflows/subworkflows/vasp/surface_energy.json @@ -105,7 +105,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "vasp_symprec", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "total_energy" @@ -129,8 +130,6 @@ "name": "stress_tensor" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -153,6 +152,7 @@ "name": "convergence_electronic" } ], + "name": "vasp_symprec", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/vasp/total_energy.json b/data/workflows/subworkflows/vasp/total_energy.json index 2c76a67c..97d49d62 100644 --- a/data/workflows/subworkflows/vasp/total_energy.json +++ b/data/workflows/subworkflows/vasp/total_energy.json @@ -104,7 +104,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "vasp", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "total_energy" @@ -128,8 +129,6 @@ "name": "stress_tensor" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -152,6 +151,7 @@ "name": "convergence_electronic" } ], + "name": "vasp", "schemaVersion": "2022.8.16" }, "input": [ diff --git a/data/workflows/subworkflows/vasp/variable_cell_relaxation.json b/data/workflows/subworkflows/vasp/variable_cell_relaxation.json index f93bc55c..554fd6a2 100644 --- a/data/workflows/subworkflows/vasp/variable_cell_relaxation.json +++ b/data/workflows/subworkflows/vasp/variable_cell_relaxation.json @@ -112,7 +112,12 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "vasp_vc_relax", + "preProcessors": [], + "postProcessors": [ + { + "name": "prepare_restart" + } + ], "results": [ { "name": "total_energy" @@ -136,12 +141,6 @@ "name": "final_structure" } ], - "preProcessors": [], - "postProcessors": [ - { - "name": "prepare_restart" - } - ], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -169,6 +168,7 @@ "name": "convergence_ionic" } ], + "name": "vasp_vc_relax", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/subworkflows/vasp/zero_point_energy.json b/data/workflows/subworkflows/vasp/zero_point_energy.json index 862ded66..9668d947 100644 --- a/data/workflows/subworkflows/vasp/zero_point_energy.json +++ b/data/workflows/subworkflows/vasp/zero_point_energy.json @@ -107,7 +107,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "vasp_zpe", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "total_energy" @@ -131,8 +132,6 @@ "name": "zero_point_energy" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -160,6 +159,7 @@ "name": "convergence_ionic" } ], + "name": "vasp_zpe", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/espresso/average_electrostatic_potential.json b/data/workflows/workflows/espresso/average_electrostatic_potential.json index e8b98b66..8181c629 100644 --- a/data/workflows/workflows/espresso/average_electrostatic_potential.json +++ b/data/workflows/workflows/espresso/average_electrostatic_potential.json @@ -111,7 +111,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -135,8 +136,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -153,6 +152,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ @@ -223,10 +223,9 @@ "isDefault": false }, "flavor": { - "name": "pp_electrostatic_potential", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "pp.x", "input": [ @@ -239,6 +238,7 @@ "name": "standard_output" } ], + "name": "pp_electrostatic_potential", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -304,14 +304,13 @@ "isDefault": false }, "flavor": { - "name": "average_potential", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "average_potential_profile" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "average.x", "input": [ @@ -324,6 +323,7 @@ "name": "standard_output" } ], + "name": "average_potential", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/espresso/band_gap.json b/data/workflows/workflows/espresso/band_gap.json index a73f662f..505c42f8 100644 --- a/data/workflows/workflows/espresso/band_gap.json +++ b/data/workflows/workflows/espresso/band_gap.json @@ -111,7 +111,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -135,8 +136,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -153,6 +152,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ @@ -241,7 +241,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_nscf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "fermi_energy" @@ -250,8 +251,6 @@ "name": "band_gaps" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -264,6 +263,7 @@ "name": "standard_output" } ], + "name": "pw_nscf", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/espresso/band_gap_dos_hse.json b/data/workflows/workflows/espresso/band_gap_dos_hse.json index 210f8110..c6b3f39b 100644 --- a/data/workflows/workflows/espresso/band_gap_dos_hse.json +++ b/data/workflows/workflows/espresso/band_gap_dos_hse.json @@ -115,7 +115,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf_hse", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -142,8 +143,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -159,6 +158,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf_hse", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -234,14 +234,13 @@ "isDefault": false }, "flavor": { - "name": "projwfc", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "density_of_states" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "projwfc.x", "input": [ @@ -254,6 +253,7 @@ "name": "standard_output" } ], + "name": "projwfc", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/espresso/band_structure.json b/data/workflows/workflows/espresso/band_structure.json index 231e3d8b..dbcc772b 100644 --- a/data/workflows/workflows/espresso/band_structure.json +++ b/data/workflows/workflows/espresso/band_structure.json @@ -111,7 +111,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -135,8 +136,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -153,6 +152,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ @@ -238,14 +238,13 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_bands", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "band_structure" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -258,6 +257,7 @@ "name": "standard_output" } ], + "name": "pw_bands", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -329,10 +329,9 @@ "isDefault": false }, "flavor": { - "name": "bands", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -345,6 +344,7 @@ "name": "standard_output" } ], + "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/espresso/band_structure_dos.json b/data/workflows/workflows/espresso/band_structure_dos.json index 4c085144..ea06fe2f 100644 --- a/data/workflows/workflows/espresso/band_structure_dos.json +++ b/data/workflows/workflows/espresso/band_structure_dos.json @@ -113,7 +113,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -137,8 +138,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -155,6 +154,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ @@ -240,14 +240,13 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_bands", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "band_structure" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -260,6 +259,7 @@ "name": "standard_output" } ], + "name": "pw_bands", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -331,10 +331,9 @@ "isDefault": false }, "flavor": { - "name": "bands", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -347,6 +346,7 @@ "name": "standard_output" } ], + "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -426,7 +426,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_nscf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "fermi_energy" @@ -435,8 +436,6 @@ "name": "band_gaps" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -449,6 +448,7 @@ "name": "standard_output" } ], + "name": "pw_nscf", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -524,14 +524,13 @@ "isDefault": false }, "flavor": { - "name": "projwfc", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "density_of_states" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "projwfc.x", "input": [ @@ -544,6 +543,7 @@ "name": "standard_output" } ], + "name": "projwfc", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/espresso/band_structure_hse.json b/data/workflows/workflows/espresso/band_structure_hse.json index 4b982fd4..fc4b03e6 100644 --- a/data/workflows/workflows/espresso/band_structure_hse.json +++ b/data/workflows/workflows/espresso/band_structure_hse.json @@ -110,7 +110,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -134,8 +135,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -152,6 +151,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ @@ -247,10 +247,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "espresso_extract_kpoints", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -267,6 +266,7 @@ "name": "standard_output" } ], + "name": "espresso_extract_kpoints", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -412,7 +412,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf_bands_hse", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "total_energy" @@ -436,8 +437,6 @@ "name": "stress_tensor" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -453,6 +452,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf_bands_hse", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -527,10 +527,9 @@ "isDefault": false }, "flavor": { - "name": "bands", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -543,6 +542,7 @@ "name": "standard_output" } ], + "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/espresso/band_structure_magn.json b/data/workflows/workflows/espresso/band_structure_magn.json index a422b0e6..30958fd2 100644 --- a/data/workflows/workflows/espresso/band_structure_magn.json +++ b/data/workflows/workflows/espresso/band_structure_magn.json @@ -111,7 +111,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf_magn", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -135,8 +136,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -152,6 +151,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf_magn", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -241,14 +241,13 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_bands_magn", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "band_structure" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -261,6 +260,7 @@ "name": "standard_output" } ], + "name": "pw_bands_magn", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -335,10 +335,9 @@ "isDefault": false }, "flavor": { - "name": "bands_spin_up", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -351,6 +350,7 @@ "name": "standard_output" } ], + "name": "bands_spin_up", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -412,10 +412,9 @@ "isDefault": false }, "flavor": { - "name": "bands_spin_dn", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -428,6 +427,7 @@ "name": "standard_output" } ], + "name": "bands_spin_dn", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/espresso/band_structure_soc.json b/data/workflows/workflows/espresso/band_structure_soc.json index e2600713..287f8837 100644 --- a/data/workflows/workflows/espresso/band_structure_soc.json +++ b/data/workflows/workflows/espresso/band_structure_soc.json @@ -113,7 +113,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf_soc", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -137,8 +138,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -154,6 +153,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf_soc", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -243,14 +243,13 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_bands_soc", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "band_structure" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -263,6 +262,7 @@ "name": "standard_output" } ], + "name": "pw_bands_soc", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -337,10 +337,9 @@ "isDefault": false }, "flavor": { - "name": "bands", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -353,6 +352,7 @@ "name": "standard_output" } ], + "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/espresso/dielectric_tensor.json b/data/workflows/workflows/espresso/dielectric_tensor.json index 01a9ba91..116d68d2 100644 --- a/data/workflows/workflows/espresso/dielectric_tensor.json +++ b/data/workflows/workflows/espresso/dielectric_tensor.json @@ -112,7 +112,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -136,8 +137,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -154,6 +153,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ @@ -261,7 +261,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_nscf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "fermi_energy" @@ -270,8 +271,6 @@ "name": "band_gaps" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -284,6 +283,7 @@ "name": "standard_output" } ], + "name": "pw_nscf", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -359,14 +359,13 @@ "isDefault": false }, "flavor": { - "name": "dielectric_tensor", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "dielectric_tensor" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "epsilon.x", "input": [ @@ -379,6 +378,7 @@ "name": "standard_output" } ], + "name": "dielectric_tensor", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/espresso/dos.json b/data/workflows/workflows/espresso/dos.json index 79719b95..af703a76 100644 --- a/data/workflows/workflows/espresso/dos.json +++ b/data/workflows/workflows/espresso/dos.json @@ -112,7 +112,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -136,8 +137,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -154,6 +153,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ @@ -242,7 +242,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_nscf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "fermi_energy" @@ -251,8 +252,6 @@ "name": "band_gaps" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -265,6 +264,7 @@ "name": "standard_output" } ], + "name": "pw_nscf", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -340,14 +340,13 @@ "isDefault": false }, "flavor": { - "name": "projwfc", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "density_of_states" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "projwfc.x", "input": [ @@ -360,6 +359,7 @@ "name": "standard_output" } ], + "name": "projwfc", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/espresso/electronic_density_mesh.json b/data/workflows/workflows/espresso/electronic_density_mesh.json index 6d0f4a75..7191a8a1 100644 --- a/data/workflows/workflows/espresso/electronic_density_mesh.json +++ b/data/workflows/workflows/espresso/electronic_density_mesh.json @@ -110,7 +110,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -134,8 +135,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -152,6 +151,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ @@ -222,10 +222,9 @@ "isDefault": false }, "flavor": { - "name": "pp_density", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "pp.x", "input": [ @@ -238,6 +237,7 @@ "name": "standard_output" } ], + "name": "pp_density", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/espresso/esm.json b/data/workflows/workflows/espresso/esm.json index 51d5a04f..5272060c 100644 --- a/data/workflows/workflows/espresso/esm.json +++ b/data/workflows/workflows/espresso/esm.json @@ -118,7 +118,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_esm", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "total_energy" @@ -148,8 +149,6 @@ "name": "charge_density_profile" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -165,6 +164,7 @@ "name": "convergence_electronic" } ], + "name": "pw_esm", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/espresso/esm_relax.json b/data/workflows/workflows/espresso/esm_relax.json index 0e8e97dc..b62c9adb 100644 --- a/data/workflows/workflows/espresso/esm_relax.json +++ b/data/workflows/workflows/espresso/esm_relax.json @@ -118,7 +118,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_esm_relax", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "total_energy" @@ -148,8 +149,6 @@ "name": "charge_density_profile" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -165,6 +164,7 @@ "name": "convergence_electronic" } ], + "name": "pw_esm_relax", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/espresso/fixed_cell_relaxation.json b/data/workflows/workflows/espresso/fixed_cell_relaxation.json index f1609594..98255955 100644 --- a/data/workflows/workflows/espresso/fixed_cell_relaxation.json +++ b/data/workflows/workflows/espresso/fixed_cell_relaxation.json @@ -113,7 +113,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_relax", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "total_energy" @@ -137,8 +138,6 @@ "name": "final_structure" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -157,6 +156,7 @@ "name": "convergence_ionic" } ], + "name": "pw_relax", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/espresso/gw_band_structure_band_gap_full_frequency.json b/data/workflows/workflows/espresso/gw_band_structure_band_gap_full_frequency.json index e39cfc66..f97cd59e 100644 --- a/data/workflows/workflows/espresso/gw_band_structure_band_gap_full_frequency.json +++ b/data/workflows/workflows/espresso/gw_band_structure_band_gap_full_frequency.json @@ -114,7 +114,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -138,8 +139,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -156,6 +155,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ @@ -236,7 +236,8 @@ "isDefault": false }, "flavor": { - "name": "gw_bands_full_frequency", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "band_structure" @@ -248,8 +249,6 @@ "name": "band_gaps" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "gw.x", "input": [ @@ -262,6 +261,7 @@ "name": "standard_output" } ], + "name": "gw_bands_full_frequency", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/espresso/gw_band_structure_band_gap_plasmon_pole.json b/data/workflows/workflows/espresso/gw_band_structure_band_gap_plasmon_pole.json index 9ebd6fa4..abf535d5 100644 --- a/data/workflows/workflows/espresso/gw_band_structure_band_gap_plasmon_pole.json +++ b/data/workflows/workflows/espresso/gw_band_structure_band_gap_plasmon_pole.json @@ -114,7 +114,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -138,8 +139,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -156,6 +155,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ @@ -236,7 +236,8 @@ "isDefault": false }, "flavor": { - "name": "gw_bands_plasmon_pole", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "band_structure" @@ -248,8 +249,6 @@ "name": "band_gaps" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "gw.x", "input": [ @@ -262,6 +261,7 @@ "name": "standard_output" } ], + "name": "gw_bands_plasmon_pole", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/espresso/kpoint_convergence.json b/data/workflows/workflows/espresso/kpoint_convergence.json index c1b6010e..5984d835 100644 --- a/data/workflows/workflows/espresso/kpoint_convergence.json +++ b/data/workflows/workflows/espresso/kpoint_convergence.json @@ -182,7 +182,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf_kpt_conv", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "total_energy" @@ -203,8 +204,6 @@ "name": "stress_tensor" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -220,6 +219,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf_kpt_conv", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/espresso/neb.json b/data/workflows/workflows/espresso/neb.json index d4432c37..d840de60 100644 --- a/data/workflows/workflows/espresso/neb.json +++ b/data/workflows/workflows/espresso/neb.json @@ -77,7 +77,8 @@ "isDefault": false }, "flavor": { - "name": "neb", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "reaction_energy_barrier" @@ -86,8 +87,6 @@ "name": "reaction_energy_profile" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "neb.x", "input": [ @@ -100,6 +99,7 @@ "name": "standard_output" } ], + "name": "neb", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/espresso/phonon_dispersions.json b/data/workflows/workflows/espresso/phonon_dispersions.json index 1cfb6637..8a25c732 100644 --- a/data/workflows/workflows/espresso/phonon_dispersions.json +++ b/data/workflows/workflows/espresso/phonon_dispersions.json @@ -112,7 +112,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -136,8 +137,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -154,6 +153,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ @@ -228,14 +228,13 @@ "isDefault": false }, "flavor": { - "name": "ph_grid", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "phonon_dos" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "ph.x", "input": [ @@ -248,6 +247,7 @@ "name": "standard_output" } ], + "name": "ph_grid", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -313,10 +313,9 @@ "isDefault": false }, "flavor": { - "name": "q2r", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "q2r.x", "input": [ @@ -329,6 +328,7 @@ "name": "standard_output" } ], + "name": "q2r", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -394,14 +394,13 @@ "isDefault": false }, "flavor": { - "name": "matdyn_path", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "phonon_dispersions" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "matdyn.x", "input": [ @@ -414,6 +413,7 @@ "name": "standard_output" } ], + "name": "matdyn_path", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/espresso/phonon_dos.json b/data/workflows/workflows/espresso/phonon_dos.json index 2dd752a2..92866be4 100644 --- a/data/workflows/workflows/espresso/phonon_dos.json +++ b/data/workflows/workflows/espresso/phonon_dos.json @@ -111,7 +111,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -135,8 +136,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -153,6 +152,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ @@ -227,14 +227,13 @@ "isDefault": false }, "flavor": { - "name": "ph_grid", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "phonon_dos" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "ph.x", "input": [ @@ -247,6 +246,7 @@ "name": "standard_output" } ], + "name": "ph_grid", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -312,10 +312,9 @@ "isDefault": false }, "flavor": { - "name": "q2r", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "q2r.x", "input": [ @@ -328,6 +327,7 @@ "name": "standard_output" } ], + "name": "q2r", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -393,14 +393,13 @@ "isDefault": false }, "flavor": { - "name": "matdyn_grid", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "phonon_dos" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "matdyn.x", "input": [ @@ -413,6 +412,7 @@ "name": "standard_output" } ], + "name": "matdyn_grid", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/espresso/phonon_dos_dispersion.json b/data/workflows/workflows/espresso/phonon_dos_dispersion.json index ab828d43..b564b921 100644 --- a/data/workflows/workflows/espresso/phonon_dos_dispersion.json +++ b/data/workflows/workflows/espresso/phonon_dos_dispersion.json @@ -112,7 +112,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -136,8 +137,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -154,6 +153,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ @@ -228,14 +228,13 @@ "isDefault": false }, "flavor": { - "name": "ph_grid", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "phonon_dos" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "ph.x", "input": [ @@ -248,6 +247,7 @@ "name": "standard_output" } ], + "name": "ph_grid", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -313,10 +313,9 @@ "isDefault": false }, "flavor": { - "name": "q2r", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "q2r.x", "input": [ @@ -329,6 +328,7 @@ "name": "standard_output" } ], + "name": "q2r", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -394,14 +394,13 @@ "isDefault": false }, "flavor": { - "name": "matdyn_grid", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "phonon_dos" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "matdyn.x", "input": [ @@ -414,6 +413,7 @@ "name": "standard_output" } ], + "name": "matdyn_grid", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -483,14 +483,13 @@ "isDefault": false }, "flavor": { - "name": "matdyn_path", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "phonon_dispersions" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "matdyn.x", "input": [ @@ -503,6 +502,7 @@ "name": "standard_output" } ], + "name": "matdyn_path", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/espresso/phonon_map.json b/data/workflows/workflows/espresso/phonon_map.json index 92538e32..35e0f9b7 100644 --- a/data/workflows/workflows/espresso/phonon_map.json +++ b/data/workflows/workflows/espresso/phonon_map.json @@ -110,7 +110,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -134,8 +135,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -152,6 +151,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ @@ -250,10 +250,9 @@ "isDefault": false }, "flavor": { - "name": "ph_init_qpoints", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "ph.x", "input": [ @@ -266,6 +265,7 @@ "name": "standard_output" } ], + "name": "ph_init_qpoints", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -388,10 +388,9 @@ "isDefault": false }, "flavor": { - "name": "ph_grid_restart", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "ph.x", "input": [ @@ -404,6 +403,7 @@ "name": "standard_output" } ], + "name": "ph_grid_restart", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -469,10 +469,9 @@ "isDefault": false }, "flavor": { - "name": "q2r", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "q2r.x", "input": [ @@ -485,6 +484,7 @@ "name": "standard_output" } ], + "name": "q2r", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -550,14 +550,13 @@ "isDefault": false }, "flavor": { - "name": "matdyn_grid", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "phonon_dos" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "matdyn.x", "input": [ @@ -570,6 +569,7 @@ "name": "standard_output" } ], + "name": "matdyn_grid", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -639,14 +639,13 @@ "isDefault": false }, "flavor": { - "name": "matdyn_path", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "phonon_dispersions" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "matdyn.x", "input": [ @@ -659,6 +658,7 @@ "name": "standard_output" } ], + "name": "matdyn_path", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -752,7 +752,7 @@ "status": "idle", "statusTrack": [], "tags": [], - "workflowId": "3c30219d-b8d7-4206-a4af-845815342935", + "workflowId": "d380c881-756d-4160-941b-9c57c22b71e4", "flowchartId": "24e3c1f0-8090-512e-9727-8770071d17c8", "schemaVersion": "2022.8.16", "isDefault": false @@ -850,10 +850,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "espresso_link_outdir_save", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "shell", "executableName": "sh", "input": [ @@ -866,6 +865,7 @@ "name": "standard_output" } ], + "name": "espresso_link_outdir_save", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -955,10 +955,9 @@ "isDefault": false }, "flavor": { - "name": "ph_single_irr_qpt", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "ph.x", "input": [ @@ -971,6 +970,7 @@ "name": "standard_output" } ], + "name": "ph_single_irr_qpt", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -1061,10 +1061,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "espresso_collect_dynmat", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "shell", "executableName": "sh", "input": [ @@ -1077,6 +1076,7 @@ "name": "standard_output" } ], + "name": "espresso_collect_dynmat", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/espresso/recalculate_bands.json b/data/workflows/workflows/espresso/recalculate_bands.json index 81e5ac03..75ecf930 100644 --- a/data/workflows/workflows/espresso/recalculate_bands.json +++ b/data/workflows/workflows/espresso/recalculate_bands.json @@ -83,14 +83,13 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_bands", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "band_structure" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -103,6 +102,7 @@ "name": "standard_output" } ], + "name": "pw_bands", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -174,10 +174,9 @@ "isDefault": false }, "flavor": { - "name": "bands", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -190,6 +189,7 @@ "name": "standard_output" } ], + "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/espresso/surface_energy.json b/data/workflows/workflows/espresso/surface_energy.json index cf0cfe7c..277b3fb3 100644 --- a/data/workflows/workflows/espresso/surface_energy.json +++ b/data/workflows/workflows/espresso/surface_energy.json @@ -111,7 +111,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -135,8 +136,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -153,6 +152,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ diff --git a/data/workflows/workflows/espresso/total_energy.json b/data/workflows/workflows/espresso/total_energy.json index dd9a8151..1d8065bf 100644 --- a/data/workflows/workflows/espresso/total_energy.json +++ b/data/workflows/workflows/espresso/total_energy.json @@ -110,7 +110,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -134,8 +135,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -152,6 +151,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ diff --git a/data/workflows/workflows/espresso/valence_band_offset.json b/data/workflows/workflows/espresso/valence_band_offset.json index 337a891b..84dc4713 100644 --- a/data/workflows/workflows/espresso/valence_band_offset.json +++ b/data/workflows/workflows/espresso/valence_band_offset.json @@ -132,7 +132,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -156,8 +157,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -174,6 +173,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ @@ -259,14 +259,13 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_bands", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "band_structure" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -279,6 +278,7 @@ "name": "standard_output" } ], + "name": "pw_bands", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -393,10 +393,9 @@ "isDefault": false }, "flavor": { - "name": "bands", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -409,6 +408,7 @@ "name": "standard_output" } ], + "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -470,10 +470,9 @@ "isDefault": false }, "flavor": { - "name": "pp_electrostatic_potential", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "pp.x", "input": [ @@ -486,6 +485,7 @@ "name": "standard_output" } ], + "name": "pp_electrostatic_potential", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -551,14 +551,13 @@ "isDefault": false }, "flavor": { - "name": "average_potential", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "average_potential_profile" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "average.x", "input": [ @@ -571,6 +570,7 @@ "name": "standard_output" } ], + "name": "average_potential", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -681,10 +681,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "generic:processing:find_extrema:scipy", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -702,6 +701,7 @@ "name": "standard_output" } ], + "name": "generic:processing:find_extrema:scipy", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -893,7 +893,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -917,8 +918,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -935,6 +934,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ @@ -1020,14 +1020,13 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_bands", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "band_structure" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -1040,6 +1039,7 @@ "name": "standard_output" } ], + "name": "pw_bands", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -1154,10 +1154,9 @@ "isDefault": false }, "flavor": { - "name": "bands", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -1170,6 +1169,7 @@ "name": "standard_output" } ], + "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -1231,10 +1231,9 @@ "isDefault": false }, "flavor": { - "name": "pp_electrostatic_potential", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "pp.x", "input": [ @@ -1247,6 +1246,7 @@ "name": "standard_output" } ], + "name": "pp_electrostatic_potential", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -1312,14 +1312,13 @@ "isDefault": false }, "flavor": { - "name": "average_potential", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "average_potential_profile" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "average.x", "input": [ @@ -1332,6 +1331,7 @@ "name": "standard_output" } ], + "name": "average_potential", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -1442,10 +1442,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "generic:processing:find_extrema:scipy", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -1463,6 +1462,7 @@ "name": "standard_output" } ], + "name": "generic:processing:find_extrema:scipy", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -1654,7 +1654,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -1678,8 +1679,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -1696,6 +1695,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ @@ -1781,14 +1781,13 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_bands", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "band_structure" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -1801,6 +1800,7 @@ "name": "standard_output" } ], + "name": "pw_bands", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -1915,10 +1915,9 @@ "isDefault": false }, "flavor": { - "name": "bands", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -1931,6 +1930,7 @@ "name": "standard_output" } ], + "name": "bands", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -1992,10 +1992,9 @@ "isDefault": false }, "flavor": { - "name": "pp_electrostatic_potential", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "pp.x", "input": [ @@ -2008,6 +2007,7 @@ "name": "standard_output" } ], + "name": "pp_electrostatic_potential", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -2073,14 +2073,13 @@ "isDefault": false }, "flavor": { - "name": "average_potential", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "average_potential_profile" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "average.x", "input": [ @@ -2093,6 +2092,7 @@ "name": "standard_output" } ], + "name": "average_potential", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -2203,10 +2203,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "generic:processing:find_extrema:scipy", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -2224,6 +2223,7 @@ "name": "standard_output" } ], + "name": "generic:processing:find_extrema:scipy", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/espresso/variable_cell_relaxation.json b/data/workflows/workflows/espresso/variable_cell_relaxation.json index 805af817..b364ca3d 100644 --- a/data/workflows/workflows/espresso/variable_cell_relaxation.json +++ b/data/workflows/workflows/espresso/variable_cell_relaxation.json @@ -114,7 +114,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_vc-relax", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "total_energy" @@ -138,8 +139,6 @@ "name": "final_structure" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -158,6 +157,7 @@ "name": "convergence_ionic" } ], + "name": "pw_vc-relax", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/espresso/wavefunction_amplitude.json b/data/workflows/workflows/espresso/wavefunction_amplitude.json index 61a32c3f..ca03d2db 100644 --- a/data/workflows/workflows/espresso/wavefunction_amplitude.json +++ b/data/workflows/workflows/espresso/wavefunction_amplitude.json @@ -115,7 +115,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -139,8 +140,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -157,6 +156,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ @@ -317,14 +317,13 @@ "isDefault": false }, "flavor": { - "name": "pp_wfn", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "wavefunction_amplitude" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pp.x", "input": [ @@ -337,6 +336,7 @@ "name": "standard_output" } ], + "name": "pp_wfn", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -429,14 +429,13 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "plot_wavefunction", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "file_content" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -454,6 +453,7 @@ "name": "standard_output" } ], + "name": "plot_wavefunction", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/espresso/zero_point_energy.json b/data/workflows/workflows/espresso/zero_point_energy.json index 8853afec..da1306c1 100644 --- a/data/workflows/workflows/espresso/zero_point_energy.json +++ b/data/workflows/workflows/espresso/zero_point_energy.json @@ -111,7 +111,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pw_scf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "atomic_forces" @@ -135,8 +136,6 @@ "name": "total_force" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -153,6 +152,7 @@ "name": "convergence_electronic" } ], + "name": "pw_scf", "schemaVersion": "2022.8.16" }, "input": [ @@ -227,14 +227,13 @@ "isDefault": false }, "flavor": { - "name": "ph_gamma", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "zero_point_energy" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "espresso", "executableName": "ph.x", "input": [ @@ -247,6 +246,7 @@ "name": "standard_output" } ], + "name": "ph_gamma", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/nwchem/total_energy.json b/data/workflows/workflows/nwchem/total_energy.json index 1dab2015..5e61d1c8 100644 --- a/data/workflows/workflows/nwchem/total_energy.json +++ b/data/workflows/workflows/nwchem/total_energy.json @@ -79,7 +79,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "nwchem_total_energy", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "total_energy" @@ -88,8 +89,6 @@ "name": "total_energy_contributions" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "nwchem", "executableName": "nwchem", "input": [ @@ -103,6 +102,7 @@ "name": "standard_output" } ], + "name": "nwchem_total_energy", "schemaVersion": "2022.8.16" }, "input": [ diff --git a/data/workflows/workflows/python/ml/classification_workflow.json b/data/workflows/workflows/python/ml/classification_workflow.json index e0cfb363..633b90ca 100644 --- a/data/workflows/workflows/python/ml/classification_workflow.json +++ b/data/workflows/workflows/python/ml/classification_workflow.json @@ -222,10 +222,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:setup_variables_packages", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -243,6 +242,7 @@ "name": "standard_output" } ], + "name": "pyml:setup_variables_packages", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -320,10 +320,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:data_input:read_csv:pandas", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -341,6 +340,7 @@ "name": "standard_output" } ], + "name": "pyml:data_input:read_csv:pandas", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -413,10 +413,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:data_input:train_test_split:sklearn", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -434,6 +433,7 @@ "name": "standard_output" } ], + "name": "pyml:data_input:train_test_split:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -510,10 +510,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:pre_processing:standardization:sklearn", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -531,6 +530,7 @@ "name": "standard_output" } ], + "name": "pyml:pre_processing:standardization:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -610,14 +610,13 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:model:random_forest_classification:sklearn", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "workflow:pyml_predict" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -635,6 +634,7 @@ "name": "standard_output" } ], + "name": "pyml:model:random_forest_classification:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -717,14 +717,13 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:post_processing:roc_curve:sklearn", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "file_content" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -742,6 +741,7 @@ "name": "standard_output" } ], + "name": "pyml:post_processing:roc_curve:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/python/ml/clustering_workflow.json b/data/workflows/workflows/python/ml/clustering_workflow.json index baa680e6..467b58b2 100644 --- a/data/workflows/workflows/python/ml/clustering_workflow.json +++ b/data/workflows/workflows/python/ml/clustering_workflow.json @@ -222,10 +222,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:setup_variables_packages", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -243,6 +242,7 @@ "name": "standard_output" } ], + "name": "pyml:setup_variables_packages", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -320,10 +320,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:data_input:read_csv:pandas", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -341,6 +340,7 @@ "name": "standard_output" } ], + "name": "pyml:data_input:read_csv:pandas", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -413,10 +413,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:data_input:train_test_split:sklearn", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -434,6 +433,7 @@ "name": "standard_output" } ], + "name": "pyml:data_input:train_test_split:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -510,10 +510,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:pre_processing:standardization:sklearn", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -531,6 +530,7 @@ "name": "standard_output" } ], + "name": "pyml:pre_processing:standardization:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -610,14 +610,13 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:model:random_forest_classification:sklearn", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "workflow:pyml_predict" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -635,6 +634,7 @@ "name": "standard_output" } ], + "name": "pyml:model:random_forest_classification:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -717,14 +717,13 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:post_processing:roc_curve:sklearn", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "file_content" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -742,6 +741,7 @@ "name": "standard_output" } ], + "name": "pyml:post_processing:roc_curve:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/python/ml/regression_workflow.json b/data/workflows/workflows/python/ml/regression_workflow.json index 30459247..e09564b1 100644 --- a/data/workflows/workflows/python/ml/regression_workflow.json +++ b/data/workflows/workflows/python/ml/regression_workflow.json @@ -222,10 +222,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:setup_variables_packages", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -243,6 +242,7 @@ "name": "standard_output" } ], + "name": "pyml:setup_variables_packages", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -320,10 +320,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:data_input:read_csv:pandas", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -341,6 +340,7 @@ "name": "standard_output" } ], + "name": "pyml:data_input:read_csv:pandas", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -413,10 +413,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:data_input:train_test_split:sklearn", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -434,6 +433,7 @@ "name": "standard_output" } ], + "name": "pyml:data_input:train_test_split:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -510,10 +510,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:pre_processing:standardization:sklearn", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -531,6 +530,7 @@ "name": "standard_output" } ], + "name": "pyml:pre_processing:standardization:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -610,14 +610,13 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:model:multilayer_perceptron:sklearn", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "workflow:pyml_predict" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -635,6 +634,7 @@ "name": "standard_output" } ], + "name": "pyml:model:multilayer_perceptron:sklearn", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -717,14 +717,13 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "pyml:post_processing:parity_plot:matplotlib", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "file_content" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "python", "executableName": "python", "input": [ @@ -742,6 +741,7 @@ "name": "standard_output" } ], + "name": "pyml:post_processing:parity_plot:matplotlib", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/python/python_script.json b/data/workflows/workflows/python/python_script.json index 7d4a607a..8c6856c9 100644 --- a/data/workflows/workflows/python/python_script.json +++ b/data/workflows/workflows/python/python_script.json @@ -63,10 +63,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "hello_world", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -84,6 +83,7 @@ "name": "standard_output" } ], + "name": "hello_world", "schemaVersion": "2022.8.16" }, "input": [ diff --git a/data/workflows/workflows/shell/batch_espresso_pwscf.json b/data/workflows/workflows/shell/batch_espresso_pwscf.json index 0f68b1c0..057b527b 100644 --- a/data/workflows/workflows/shell/batch_espresso_pwscf.json +++ b/data/workflows/workflows/shell/batch_espresso_pwscf.json @@ -63,10 +63,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "job_espresso_pw_scf", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "shell", "executableName": "sh", "input": [ @@ -79,6 +78,7 @@ "name": "standard_output" } ], + "name": "job_espresso_pw_scf", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/shell/hello_world.json b/data/workflows/workflows/shell/hello_world.json index bfa53951..cc0c1ea9 100644 --- a/data/workflows/workflows/shell/hello_world.json +++ b/data/workflows/workflows/shell/hello_world.json @@ -63,10 +63,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "hello_world", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "shell", "executableName": "sh", "input": [ @@ -80,6 +79,7 @@ "name": "standard_output" } ], + "name": "hello_world", "schemaVersion": "2022.8.16" }, "input": [ diff --git a/data/workflows/workflows/vasp/band_gap.json b/data/workflows/workflows/vasp/band_gap.json index a5840412..72bdbbd2 100644 --- a/data/workflows/workflows/vasp/band_gap.json +++ b/data/workflows/workflows/vasp/band_gap.json @@ -116,7 +116,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "vasp", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "total_energy" @@ -140,8 +141,6 @@ "name": "stress_tensor" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -164,6 +163,7 @@ "name": "convergence_electronic" } ], + "name": "vasp", "schemaVersion": "2022.8.16" }, "input": [ @@ -289,7 +289,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "vasp_nscf", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "band_gaps" @@ -298,8 +299,6 @@ "name": "fermi_energy" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -324,6 +323,7 @@ "name": "convergence_electronic" } ], + "name": "vasp_nscf", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/vasp/band_structure.json b/data/workflows/workflows/vasp/band_structure.json index 7c68f66e..f4e96ca8 100644 --- a/data/workflows/workflows/vasp/band_structure.json +++ b/data/workflows/workflows/vasp/band_structure.json @@ -116,7 +116,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "vasp", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "total_energy" @@ -140,8 +141,6 @@ "name": "stress_tensor" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -164,6 +163,7 @@ "name": "convergence_electronic" } ], + "name": "vasp", "schemaVersion": "2022.8.16" }, "input": [ @@ -286,14 +286,13 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "vasp_bands", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "band_structure" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -318,6 +317,7 @@ "name": "convergence_electronic" } ], + "name": "vasp_bands", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/vasp/band_structure_dos.json b/data/workflows/workflows/vasp/band_structure_dos.json index eb889131..fabb4dda 100644 --- a/data/workflows/workflows/vasp/band_structure_dos.json +++ b/data/workflows/workflows/vasp/band_structure_dos.json @@ -120,7 +120,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "vasp", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "total_energy" @@ -144,8 +145,6 @@ "name": "stress_tensor" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -168,6 +167,7 @@ "name": "convergence_electronic" } ], + "name": "vasp", "schemaVersion": "2022.8.16" }, "input": [ @@ -290,14 +290,13 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "vasp_bands", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "band_structure" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -322,6 +321,7 @@ "name": "convergence_electronic" } ], + "name": "vasp_bands", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/vasp/dos.json b/data/workflows/workflows/vasp/dos.json index 70882012..8e6ed2fc 100644 --- a/data/workflows/workflows/vasp/dos.json +++ b/data/workflows/workflows/vasp/dos.json @@ -119,7 +119,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "vasp", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "total_energy" @@ -143,8 +144,6 @@ "name": "stress_tensor" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -167,6 +166,7 @@ "name": "convergence_electronic" } ], + "name": "vasp", "schemaVersion": "2022.8.16" }, "input": [ diff --git a/data/workflows/workflows/vasp/fixed_cell_relaxation.json b/data/workflows/workflows/vasp/fixed_cell_relaxation.json index 3b2f9fb4..5ab1489d 100644 --- a/data/workflows/workflows/vasp/fixed_cell_relaxation.json +++ b/data/workflows/workflows/vasp/fixed_cell_relaxation.json @@ -122,7 +122,12 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "vasp_relax", + "preProcessors": [], + "postProcessors": [ + { + "name": "prepare_restart" + } + ], "results": [ { "name": "total_energy" @@ -146,12 +151,6 @@ "name": "final_structure" } ], - "preProcessors": [], - "postProcessors": [ - { - "name": "prepare_restart" - } - ], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -179,6 +178,7 @@ "name": "convergence_ionic" } ], + "name": "vasp_relax", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/vasp/kpoint_convergence.json b/data/workflows/workflows/vasp/kpoint_convergence.json index 188b26ed..299d0b1e 100644 --- a/data/workflows/workflows/vasp/kpoint_convergence.json +++ b/data/workflows/workflows/vasp/kpoint_convergence.json @@ -191,7 +191,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "vasp_kpt_conv", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "total_energy" @@ -215,8 +216,6 @@ "name": "stress_tensor" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -241,6 +240,7 @@ "name": "convergence_electronic" } ], + "name": "vasp_kpt_conv", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/vasp/neb.json b/data/workflows/workflows/vasp/neb.json index d879f213..1c86e3a8 100644 --- a/data/workflows/workflows/vasp/neb.json +++ b/data/workflows/workflows/vasp/neb.json @@ -116,7 +116,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "vasp_neb_initial", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "total_energy" @@ -140,8 +141,6 @@ "name": "stress_tensor" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -165,6 +164,7 @@ "name": "convergence_electronic" } ], + "name": "vasp_neb_initial", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -312,7 +312,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "vasp_neb_final", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "total_energy" @@ -336,8 +337,6 @@ "name": "stress_tensor" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -361,6 +360,7 @@ "name": "convergence_electronic" } ], + "name": "vasp_neb_final", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -512,10 +512,9 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "bash_vasp_prepare_neb_images", - "results": [], "preProcessors": [], "postProcessors": [], + "results": [], "applicationName": "shell", "executableName": "sh", "input": [ @@ -528,6 +527,7 @@ "name": "standard_output" } ], + "name": "bash_vasp_prepare_neb_images", "schemaVersion": "2022.8.16", "isDefault": false }, @@ -648,7 +648,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "vasp_neb", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "reaction_energy_barrier" @@ -657,8 +658,6 @@ "name": "reaction_energy_profile" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -676,6 +675,7 @@ "name": "standard_output" } ], + "name": "vasp_neb", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/vasp/recalculate_bands.json b/data/workflows/workflows/vasp/recalculate_bands.json index fd41e9c1..3b494ce9 100644 --- a/data/workflows/workflows/vasp/recalculate_bands.json +++ b/data/workflows/workflows/vasp/recalculate_bands.json @@ -91,14 +91,13 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "vasp_bands", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "band_structure" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -123,6 +122,7 @@ "name": "convergence_electronic" } ], + "name": "vasp_bands", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/vasp/surface_energy.json b/data/workflows/workflows/vasp/surface_energy.json index 92666115..cb491007 100644 --- a/data/workflows/workflows/vasp/surface_energy.json +++ b/data/workflows/workflows/vasp/surface_energy.json @@ -116,7 +116,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "vasp_symprec", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "total_energy" @@ -140,8 +141,6 @@ "name": "stress_tensor" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -164,6 +163,7 @@ "name": "convergence_electronic" } ], + "name": "vasp_symprec", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/vasp/total_energy.json b/data/workflows/workflows/vasp/total_energy.json index 6f16bc7e..54c3efd7 100644 --- a/data/workflows/workflows/vasp/total_energy.json +++ b/data/workflows/workflows/vasp/total_energy.json @@ -115,7 +115,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "vasp", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "total_energy" @@ -139,8 +140,6 @@ "name": "stress_tensor" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -163,6 +162,7 @@ "name": "convergence_electronic" } ], + "name": "vasp", "schemaVersion": "2022.8.16" }, "input": [ diff --git a/data/workflows/workflows/vasp/variable_cell_relaxation.json b/data/workflows/workflows/vasp/variable_cell_relaxation.json index 991d7382..982f328b 100644 --- a/data/workflows/workflows/vasp/variable_cell_relaxation.json +++ b/data/workflows/workflows/vasp/variable_cell_relaxation.json @@ -123,7 +123,12 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "vasp_vc_relax", + "preProcessors": [], + "postProcessors": [ + { + "name": "prepare_restart" + } + ], "results": [ { "name": "total_energy" @@ -147,12 +152,6 @@ "name": "final_structure" } ], - "preProcessors": [], - "postProcessors": [ - { - "name": "prepare_restart" - } - ], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -180,6 +179,7 @@ "name": "convergence_ionic" } ], + "name": "vasp_vc_relax", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/data/workflows/workflows/vasp/zero_point_energy.json b/data/workflows/workflows/vasp/zero_point_energy.json index 01a9859f..13599de8 100644 --- a/data/workflows/workflows/vasp/zero_point_energy.json +++ b/data/workflows/workflows/vasp/zero_point_energy.json @@ -118,7 +118,8 @@ "schemaVersion": "2022.8.16" }, "flavor": { - "name": "vasp_zpe", + "preProcessors": [], + "postProcessors": [], "results": [ { "name": "total_energy" @@ -142,8 +143,6 @@ "name": "zero_point_energy" } ], - "preProcessors": [], - "postProcessors": [], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -171,6 +170,7 @@ "name": "convergence_ionic" } ], + "name": "vasp_zpe", "schemaVersion": "2022.8.16", "isDefault": false }, diff --git a/dist/js/application.d.ts b/dist/js/application.d.ts index 0f299a83..9da4bb67 100644 --- a/dist/js/application.d.ts +++ b/dist/js/application.d.ts @@ -1,5 +1,6 @@ import type { ApplicationSchema, FlavorSchema, TemplateSchema } from "@mat3ra/esse/dist/js/types"; import { Standata } from "./base"; +import { type ExecutableTreeItem } from "./types/application"; export declare enum TAGS { DEFAULT = "default", DEFAULT_VERSION = "default_version", @@ -85,301 +86,297 @@ export declare class ApplicationStandata extends Standata { getAllAppTree(): { espresso: { "abcoeff_to_eps.x": { - monitors: { - name: string; - }[]; - results: never[]; flavors: { abcoeff_to_eps_simple: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: never[]; monitors: { name: string; }[]; - applicationName: string; - executableName: string; + results: never[]; }; }; - }; - "average.x": { monitors: { name: string; }[]; - results: { - name: string; - }[]; + results: never[]; + }; + "average.x": { flavors: { average: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: never[]; monitors: { name: string; }[]; - applicationName: string; - executableName: string; + results: never[]; }; average_potential: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; - applicationName: string; - executableName: string; }; }; - }; - "bands.x": { monitors: { name: string; }[]; results: { name: string; }[]; + }; + "bands.x": { flavors: { bands: { + applicationName: string; + executableName: string; input: { name: string; }[]; monitors: { name: string; }[]; + }; + bands_spin_dn: { applicationName: string; executableName: string; - }; - bands_spin_up: { input: { name: string; }[]; monitors: { name: string; }[]; + }; + bands_spin_up: { applicationName: string; executableName: string; - }; - bands_spin_dn: { input: { name: string; }[]; monitors: { name: string; }[]; - applicationName: string; - executableName: string; }; }; - }; - "cp.x": { monitors: { name: string; }[]; - results: never[]; + results: { + name: string; + }[]; + }; + "cp.x": { flavors: { cp: { - isDefault: boolean; + applicationName: string; + executableName: string; input: { name: string; }[]; - results: never[]; + isDefault: boolean; monitors: { name: string; }[]; - applicationName: string; - executableName: string; + results: never[]; }; cp_wf: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: never[]; monitors: { name: string; }[]; - applicationName: string; - executableName: string; + results: never[]; }; }; - }; - "dos.x": { monitors: { name: string; }[]; - results: { - name: string; - }[]; + results: never[]; + }; + "dos.x": { flavors: { dos: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; - applicationName: string; - executableName: string; }; }; - }; - "dynmat.x": { monitors: { name: string; }[]; - results: never[]; + results: { + name: string; + }[]; + }; + "dynmat.x": { flavors: { dynmat: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: never[]; monitors: { name: string; }[]; - applicationName: string; - executableName: string; + results: never[]; }; }; - }; - "epsilon.x": { monitors: { name: string; }[]; - results: { - name: string; - }[]; + results: never[]; + }; + "epsilon.x": { flavors: { dielectric_tensor: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; - applicationName: string; - executableName: string; }; }; - }; - "gw.x": { monitors: { name: string; }[]; results: { name: string; }[]; + }; + "gw.x": { flavors: { - gw_bands_plasmon_pole: { + gw_bands_full_frequency: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + }; + gw_bands_plasmon_pole: { applicationName: string; executableName: string; - }; - gw_bands_full_frequency: { input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; - applicationName: string; - executableName: string; }; }; - }; - "gww.x": { monitors: { name: string; }[]; - results: never[]; + results: { + name: string; + }[]; + }; + "gww.x": { flavors: { gww_simple: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: never[]; monitors: { name: string; }[]; - applicationName: string; - executableName: string; + results: never[]; }; }; - }; - "head.x": { monitors: { name: string; }[]; results: never[]; + }; + "head.x": { flavors: { head_simple: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: never[]; monitors: { name: string; }[]; - applicationName: string; - executableName: string; + results: never[]; }; }; - }; - "hp.x": { monitors: { name: string; }[]; - results: { - name: string; - }[]; + results: never[]; + }; + "hp.x": { flavors: { hp: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; - applicationName: string; - executableName: string; }; }; - supportedApplicationVersions: string[]; - }; - "matdyn.x": { monitors: { name: string; }[]; results: { name: string; }[]; + supportedApplicationVersions: string[]; + }; + "matdyn.x": { flavors: { matdyn_grid: { + applicationName: string; + executableName: string; input: { name: string; }[]; @@ -389,10 +386,10 @@ export declare class ApplicationStandata extends Standata { results: { name: string; }[]; - applicationName: string; - executableName: string; }; matdyn_path: { + applicationName: string; + executableName: string; input: { name: string; }[]; @@ -402,688 +399,683 @@ export declare class ApplicationStandata extends Standata { results: { name: string; }[]; - applicationName: string; - executableName: string; }; }; - }; - "neb.x": { monitors: { name: string; }[]; results: { name: string; }[]; + }; + "neb.x": { flavors: { neb: { - isMultiMaterial: boolean; + applicationName: string; + executableName: string; input: { name: string; }[]; - results: { + isMultiMaterial: boolean; + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; - applicationName: string; - executableName: string; }; }; - }; - "ph.x": { monitors: { name: string; }[]; results: { name: string; }[]; + }; + "ph.x": { flavors: { - ph_path: { + ph_gamma: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; - applicationName: string; - executableName: string; }; ph_grid: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + }; + ph_grid_restart: { applicationName: string; executableName: string; - }; - ph_gamma: { input: { name: string; }[]; - results: { - name: string; - }[]; monitors: { name: string; }[]; - applicationName: string; - executableName: string; + results: never[]; }; ph_init_qpoints: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: never[]; monitors: { name: string; }[]; + results: never[]; + }; + ph_path: { applicationName: string; executableName: string; - }; - ph_grid_restart: { input: { name: string; }[]; - results: never[]; monitors: { name: string; }[]; - applicationName: string; - executableName: string; + results: { + name: string; + }[]; }; ph_single_irr_qpt: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: never[]; monitors: { name: string; }[]; - applicationName: string; - executableName: string; + results: never[]; }; }; - }; - "pp.x": { monitors: { name: string; }[]; - results: never[]; + results: { + name: string; + }[]; + }; + "pp.x": { flavors: { pp_density: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: never[]; monitors: { name: string; }[]; - applicationName: string; - executableName: string; + results: never[]; }; pp_electrostatic_potential: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: never[]; monitors: { name: string; }[]; - applicationName: string; - executableName: string; + results: never[]; }; pp_wfn: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; - applicationName: string; - executableName: string; }; }; - }; - "projwfc.x": { monitors: { name: string; }[]; - results: { - name: string; - }[]; + results: never[]; + }; + "projwfc.x": { flavors: { projwfc: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; - applicationName: string; - executableName: string; }; }; - }; - "pw.x": { - isDefault: boolean; - hasAdvancedComputeOptions: boolean; - postProcessors: { - name: string; - }[]; monitors: { name: string; }[]; results: { name: string; }[]; + }; + "pw.x": { flavors: { - pw_scf: { - isDefault: boolean; + pw_bands: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + }; + "pw_bands_dft_u+j_magn": { applicationName: string; executableName: string; - }; - pw_scf_bands_hse: { input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + supportedApplicationVersions: string[]; + }; + "pw_bands_dft_u+v_magn": { applicationName: string; executableName: string; - }; - pw_scf_hse: { input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + supportedApplicationVersions: string[]; + }; + pw_bands_dft_u_magn: { applicationName: string; executableName: string; - }; - pw_scf_kpt_conv: { input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + supportedApplicationVersions: string[]; + }; + pw_bands_dft_u_magn_legacy: { applicationName: string; executableName: string; - }; - pw_scf_dft_u: { input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; - applicationName: string; - executableName: string; supportedApplicationVersions: string[]; }; - "pw_scf_dft_u+v": { + pw_bands_dft_u_soc: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; - applicationName: string; - executableName: string; supportedApplicationVersions: string[]; }; - "pw_scf_dft_u+j": { + pw_bands_dft_u_soc_legacy: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; - applicationName: string; - executableName: string; supportedApplicationVersions: string[]; }; - pw_scf_dft_u_legacy: { + pw_bands_magn: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + }; + pw_bands_soc: { applicationName: string; executableName: string; - supportedApplicationVersions: string[]; - }; - pw_scf_magn: { input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + }; + pw_esm: { applicationName: string; executableName: string; - }; - pw_scf_soc: { input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + }; + pw_esm_relax: { applicationName: string; executableName: string; - }; - pw_scf_dft_u_magn: { input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + }; + pw_md: { applicationName: string; executableName: string; - supportedApplicationVersions: string[]; - }; - pw_scf_dft_u_soc: { input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + }; + pw_nscf: { applicationName: string; executableName: string; - supportedApplicationVersions: string[]; - }; - "pw_scf_dft_u+v_magn": { input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + }; + "pw_nscf_dft_u+j_magn": { applicationName: string; executableName: string; - supportedApplicationVersions: string[]; - }; - "pw_scf_dft_u+j_magn": { input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; - applicationName: string; - executableName: string; supportedApplicationVersions: string[]; }; - pw_scf_dft_u_magn_legacy: { + "pw_nscf_dft_u+v_magn": { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; - applicationName: string; - executableName: string; supportedApplicationVersions: string[]; }; - pw_scf_dft_u_soc_legacy: { + pw_nscf_dft_u_magn: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; - applicationName: string; - executableName: string; supportedApplicationVersions: string[]; }; - pw_esm: { + pw_nscf_dft_u_magn_legacy: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + supportedApplicationVersions: string[]; + }; + pw_nscf_dft_u_soc: { applicationName: string; executableName: string; - }; - pw_esm_relax: { input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + supportedApplicationVersions: string[]; + }; + pw_nscf_dft_u_soc_legacy: { applicationName: string; executableName: string; - }; - pw_nscf: { input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; - applicationName: string; - executableName: string; + supportedApplicationVersions: string[]; }; pw_nscf_magn: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; - applicationName: string; - executableName: string; }; pw_nscf_soc: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + }; + pw_relax: { applicationName: string; executableName: string; - }; - pw_nscf_dft_u_magn: { input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + }; + pw_scf: { applicationName: string; executableName: string; - supportedApplicationVersions: string[]; - }; - "pw_nscf_dft_u+v_magn": { input: { name: string; }[]; - results: { + isDefault: boolean; + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + }; + pw_scf_bands_hse: { applicationName: string; executableName: string; - supportedApplicationVersions: string[]; - }; - "pw_nscf_dft_u+j_magn": { input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + }; + pw_scf_dft_u: { applicationName: string; executableName: string; - supportedApplicationVersions: string[]; - }; - pw_nscf_dft_u_magn_legacy: { input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; - applicationName: string; - executableName: string; supportedApplicationVersions: string[]; }; - pw_nscf_dft_u_soc: { + "pw_scf_dft_u+j": { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; - applicationName: string; - executableName: string; supportedApplicationVersions: string[]; }; - pw_nscf_dft_u_soc_legacy: { + "pw_scf_dft_u+j_magn": { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; - applicationName: string; - executableName: string; supportedApplicationVersions: string[]; }; - pw_bands: { + "pw_scf_dft_u+v": { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + supportedApplicationVersions: string[]; + }; + "pw_scf_dft_u+v_magn": { applicationName: string; executableName: string; - }; - pw_bands_magn: { input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + supportedApplicationVersions: string[]; + }; + pw_scf_dft_u_legacy: { applicationName: string; executableName: string; - }; - pw_bands_soc: { input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + supportedApplicationVersions: string[]; + }; + pw_scf_dft_u_magn: { applicationName: string; executableName: string; - }; - pw_bands_dft_u_magn: { input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; - applicationName: string; - executableName: string; supportedApplicationVersions: string[]; }; - "pw_bands_dft_u+v_magn": { + pw_scf_dft_u_magn_legacy: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; - applicationName: string; - executableName: string; supportedApplicationVersions: string[]; }; - "pw_bands_dft_u+j_magn": { + pw_scf_dft_u_soc: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; - applicationName: string; - executableName: string; supportedApplicationVersions: string[]; }; - pw_bands_dft_u_magn_legacy: { + pw_scf_dft_u_soc_legacy: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; - applicationName: string; - executableName: string; supportedApplicationVersions: string[]; }; - pw_bands_dft_u_soc: { + pw_scf_hse: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + }; + pw_scf_kpt_conv: { applicationName: string; executableName: string; - supportedApplicationVersions: string[]; - }; - pw_bands_dft_u_soc_legacy: { input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + }; + pw_scf_magn: { applicationName: string; executableName: string; - supportedApplicationVersions: string[]; - }; - pw_relax: { input: { name: string; }[]; @@ -1093,10 +1085,10 @@ export declare class ApplicationStandata extends Standata { results: { name: string; }[]; + }; + pw_scf_soc: { applicationName: string; executableName: string; - }; - "pw_vc-relax": { input: { name: string; }[]; @@ -1106,228 +1098,227 @@ export declare class ApplicationStandata extends Standata { results: { name: string; }[]; + }; + "pw_vc-relax": { applicationName: string; executableName: string; - }; - pw_md: { input: { name: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; - applicationName: string; - executableName: string; }; }; - }; - "pw4gww.x": { + hasAdvancedComputeOptions: boolean; + isDefault: boolean; monitors: { name: string; }[]; - results: never[]; + postProcessors: { + name: string; + }[]; + results: { + name: string; + }[]; + }; + "pw4gww.x": { flavors: { pw4gww_simple: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: never[]; monitors: { name: string; }[]; - applicationName: string; - executableName: string; + results: never[]; }; }; - }; - "q2r.x": { monitors: { name: string; }[]; results: never[]; + }; + "q2r.x": { flavors: { q2r: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: never[]; monitors: { name: string; }[]; - applicationName: string; - executableName: string; + results: never[]; }; }; - }; - "simple.x": { monitors: { name: string; }[]; results: never[]; + }; + "simple.x": { flavors: { simple: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: never[]; monitors: { name: string; }[]; - applicationName: string; - executableName: string; + results: never[]; }; }; - }; - "simple_bse.x": { monitors: { name: string; }[]; results: never[]; + }; + "simple_bse.x": { flavors: { simple_bse: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: never[]; monitors: { name: string; }[]; - applicationName: string; - executableName: string; + results: never[]; }; }; - }; - "simple_ip.x": { monitors: { name: string; }[]; results: never[]; + }; + "simple_ip.x": { flavors: { simple_ip: { + applicationName: string; + executableName: string; input: { name: string; }[]; - results: never[]; monitors: { name: string; }[]; - applicationName: string; - executableName: string; + results: never[]; }; }; + monitors: { + name: string; + }[]; + results: never[]; }; }; nwchem: { nwchem: { - isDefault: boolean; - hasAdvancedComputeOptions: boolean; - postProcessors: { - name: string; - }[]; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; flavors: { nwchem_total_energy: { - isDefault: boolean; + applicationName: string; + executableName: string; input: { name: string; }[]; - results: { + isDefault: boolean; + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; - applicationName: string; - executableName: string; }; }; - }; - }; - python: { - python: { + hasAdvancedComputeOptions: boolean; isDefault: boolean; monitors: { name: string; }[]; + postProcessors: { + name: string; + }[]; results: { name: string; }[]; + }; + }; + python: { + python: { flavors: { - hello_world: { - isDefault: boolean; + espresso_extract_kpoints: { + applicationName: string; + executableName: string; input: ({ name: string; - templateName: string; + templateName?: undefined; } | { name: string; - templateName?: undefined; + templateName: string; })[]; monitors: { name: string; }[]; - applicationName: string; - executableName: string; }; espresso_xml_get_qpt_irr: { + applicationName: string; + executableName: string; input: { name: string; }[]; monitors: { name: string; }[]; + }; + "generic:post_processing:plot:matplotlib": { applicationName: string; executableName: string; - }; - espresso_extract_kpoints: { - input: ({ - name: string; - templateName?: undefined; - } | { + input: { name: string; templateName: string; - })[]; + }[]; monitors: { name: string; }[]; + }; + "generic:processing:find_extrema:scipy": { applicationName: string; executableName: string; - }; - plot_wavefunction: { input: { name: string; templateName: string; }[]; - results: { - name: string; - filetype: string; - basename: string; - }[]; monitors: { name: string; }[]; + }; + hello_world: { applicationName: string; executableName: string; - }; - "generic:post_processing:plot:matplotlib": { - input: { + input: ({ name: string; templateName: string; - }[]; + } | { + name: string; + templateName?: undefined; + })[]; + isDefault: boolean; monitors: { name: string; }[]; + }; + plot_wavefunction: { applicationName: string; executableName: string; - }; - "generic:processing:find_extrema:scipy": { input: { name: string; templateName: string; @@ -1335,10 +1326,15 @@ export declare class ApplicationStandata extends Standata { monitors: { name: string; }[]; + results: { + basename: string; + filetype: string; + name: string; + }[]; + }; + "pyml:custom": { applicationName: string; executableName: string; - }; - "pyml:setup_variables_packages": { input: { name: string; templateName: string; @@ -1346,10 +1342,10 @@ export declare class ApplicationStandata extends Standata { monitors: { name: string; }[]; + }; + "pyml:data_input:read_csv:pandas": { applicationName: string; executableName: string; - }; - "pyml:custom": { input: { name: string; templateName: string; @@ -1357,10 +1353,10 @@ export declare class ApplicationStandata extends Standata { monitors: { name: string; }[]; + }; + "pyml:data_input:train_test_split:sklearn": { applicationName: string; executableName: string; - }; - "pyml:data_input:read_csv:pandas": { input: { name: string; templateName: string; @@ -1368,10 +1364,10 @@ export declare class ApplicationStandata extends Standata { monitors: { name: string; }[]; + }; + "pyml:model:adaboosted_trees_regression:sklearn": { applicationName: string; executableName: string; - }; - "pyml:data_input:train_test_split:sklearn": { input: { name: string; templateName: string; @@ -1379,10 +1375,13 @@ export declare class ApplicationStandata extends Standata { monitors: { name: string; }[]; + results: { + name: string; + }[]; + }; + "pyml:model:bagged_trees_regression:sklearn": { applicationName: string; executableName: string; - }; - "pyml:pre_processing:min_max_scaler:sklearn": { input: { name: string; templateName: string; @@ -1390,10 +1389,13 @@ export declare class ApplicationStandata extends Standata { monitors: { name: string; }[]; + results: { + name: string; + }[]; + }; + "pyml:model:extreme_gradboosted_trees_classification:sklearn": { applicationName: string; executableName: string; - }; - "pyml:pre_processing:remove_duplicates:pandas": { input: { name: string; templateName: string; @@ -1401,10 +1403,13 @@ export declare class ApplicationStandata extends Standata { monitors: { name: string; }[]; + results: { + name: string; + }[]; + }; + "pyml:model:extreme_gradboosted_trees_regression:sklearn": { applicationName: string; executableName: string; - }; - "pyml:pre_processing:remove_missing:pandas": { input: { name: string; templateName: string; @@ -1412,10 +1417,13 @@ export declare class ApplicationStandata extends Standata { monitors: { name: string; }[]; + results: { + name: string; + }[]; + }; + "pyml:model:gradboosted_trees_classification:sklearn": { applicationName: string; executableName: string; - }; - "pyml:pre_processing:standardization:sklearn": { input: { name: string; templateName: string; @@ -1423,10 +1431,13 @@ export declare class ApplicationStandata extends Standata { monitors: { name: string; }[]; + results: { + name: string; + }[]; + }; + "pyml:model:gradboosted_trees_regression:sklearn": { applicationName: string; executableName: string; - }; - "pyml:model:adaboosted_trees_regression:sklearn": { input: { name: string; templateName: string; @@ -1437,224 +1448,203 @@ export declare class ApplicationStandata extends Standata { results: { name: string; }[]; + }; + "pyml:model:k_means_clustering:sklearn": { applicationName: string; executableName: string; - }; - "pyml:model:bagged_trees_regression:sklearn": { input: { name: string; templateName: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + }; + "pyml:model:kernel_ridge_regression:sklearn": { applicationName: string; executableName: string; - }; - "pyml:model:gradboosted_trees_regression:sklearn": { input: { name: string; templateName: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + }; + "pyml:model:lasso_regression:sklearn": { applicationName: string; executableName: string; - }; - "pyml:model:extreme_gradboosted_trees_regression:sklearn": { input: { name: string; templateName: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + }; + "pyml:model:multilayer_perceptron:sklearn": { applicationName: string; executableName: string; - }; - "pyml:model:k_means_clustering:sklearn": { input: { name: string; templateName: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + }; + "pyml:model:random_forest_classification:sklearn": { applicationName: string; executableName: string; - }; - "pyml:model:kernel_ridge_regression:sklearn": { input: { name: string; templateName: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + }; + "pyml:model:random_forest_regression:sklearn": { applicationName: string; executableName: string; - }; - "pyml:model:lasso_regression:sklearn": { input: { name: string; templateName: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + }; + "pyml:model:ridge_regression:sklearn": { applicationName: string; executableName: string; - }; - "pyml:model:multilayer_perceptron:sklearn": { input: { name: string; templateName: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + }; + "pyml:post_processing:parity_plot:matplotlib": { applicationName: string; executableName: string; - }; - "pyml:model:random_forest_classification:sklearn": { input: { name: string; templateName: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + }; + "pyml:post_processing:pca_2d_clusters:matplotlib": { applicationName: string; executableName: string; - }; - "pyml:model:gradboosted_trees_classification:sklearn": { input: { name: string; templateName: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + }; + "pyml:post_processing:roc_curve:sklearn": { applicationName: string; executableName: string; - }; - "pyml:model:extreme_gradboosted_trees_classification:sklearn": { input: { name: string; templateName: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + }; + "pyml:pre_processing:min_max_scaler:sklearn": { applicationName: string; executableName: string; - }; - "pyml:model:random_forest_regression:sklearn": { input: { name: string; templateName: string; }[]; - results: { - name: string; - }[]; monitors: { name: string; }[]; + }; + "pyml:pre_processing:remove_duplicates:pandas": { applicationName: string; executableName: string; - }; - "pyml:model:ridge_regression:sklearn": { input: { name: string; templateName: string; }[]; - results: { - name: string; - }[]; monitors: { name: string; }[]; + }; + "pyml:pre_processing:remove_missing:pandas": { applicationName: string; executableName: string; - }; - "pyml:post_processing:parity_plot:matplotlib": { input: { name: string; templateName: string; }[]; - results: { - name: string; - }[]; monitors: { name: string; }[]; + }; + "pyml:pre_processing:standardization:sklearn": { applicationName: string; executableName: string; - }; - "pyml:post_processing:pca_2d_clusters:matplotlib": { input: { name: string; templateName: string; }[]; - results: { - name: string; - }[]; monitors: { name: string; }[]; + }; + "pyml:setup_variables_packages": { applicationName: string; executableName: string; - }; - "pyml:post_processing:roc_curve:sklearn": { input: { name: string; templateName: string; }[]; - results: { - name: string; - }[]; monitors: { name: string; }[]; - applicationName: string; - executableName: string; }; }; - }; - }; - shell: { - sh: { isDefault: boolean; monitors: { name: string; @@ -1662,136 +1652,122 @@ export declare class ApplicationStandata extends Standata { results: { name: string; }[]; + }; + }; + shell: { + sh: { flavors: { - hello_world: { - isDefault: boolean; + bash_vasp_prepare_neb_images: { + applicationName: string; + executableName: string; input: { name: string; }[]; + isMultiMaterial: boolean; monitors: { name: string; }[]; + }; + espresso_collect_dynmat: { applicationName: string; executableName: string; - }; - job_espresso_pw_scf: { input: { name: string; }[]; monitors: { name: string; }[]; - applicationName: string; - executableName: string; }; espresso_link_outdir_save: { + applicationName: string; + executableName: string; input: { name: string; }[]; monitors: { name: string; }[]; + }; + hello_world: { applicationName: string; executableName: string; - }; - espresso_collect_dynmat: { input: { name: string; }[]; + isDefault: boolean; monitors: { name: string; }[]; + }; + job_espresso_pw_scf: { applicationName: string; executableName: string; - }; - bash_vasp_prepare_neb_images: { - isMultiMaterial: boolean; input: { name: string; }[]; monitors: { name: string; }[]; - applicationName: string; - executableName: string; }; }; - }; - }; - vasp: { - vasp: { isDefault: boolean; - postProcessors: { - name: string; - }[]; monitors: { name: string; }[]; results: { name: string; }[]; + }; + }; + vasp: { + vasp: { flavors: { vasp: { - isDefault: boolean; + applicationName: string; + executableName: string; input: { name: string; }[]; - results: { - name: string; - }[]; + isDefault: boolean; monitors: { name: string; }[]; - applicationName: string; - executableName: string; - }; - vasp_symprec: { - input: ({ - name: string; - templateName: string; - } | { - name: string; - templateName?: undefined; - })[]; results: { name: string; }[]; - monitors: { - name: string; - }[]; - applicationName: string; - executableName: string; }; vasp_bands: { + applicationName: string; + executableName: string; input: { name: string; templateName: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + }; + vasp_bands_hse: { applicationName: string; executableName: string; - }; - vasp_nscf: { input: { name: string; templateName: string; }[]; - results: { + isDefault: boolean; + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; - applicationName: string; - executableName: string; }; vasp_hse: { - isDefault: boolean; + applicationName: string; + executableName: string; input: ({ name: string; templateName: string; @@ -1799,138 +1775,128 @@ export declare class ApplicationStandata extends Standata { name: string; templateName?: undefined; })[]; - results: { + isDefault: boolean; + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + }; + vasp_kpt_conv: { applicationName: string; executableName: string; - }; - vasp_bands_hse: { - isDefault: boolean; input: { name: string; templateName: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + }; + vasp_neb: { applicationName: string; executableName: string; - }; - vasp_nscf_hse: { - isDefault: boolean; input: { name: string; templateName: string; }[]; - results: { + isMultiMaterial: boolean; + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + }; + vasp_neb_final: { applicationName: string; executableName: string; - }; - vasp_relax: { - input: { + input: ({ name: string; templateName: string; - }[]; - results: { + } | { name: string; - }[]; + templateName?: undefined; + })[]; + isMultiMaterial: boolean; monitors: { name: string; }[]; - postProcessors: { + results: { name: string; }[]; + }; + vasp_neb_initial: { applicationName: string; executableName: string; - }; - vasp_vc_relax: { - input: { + input: ({ name: string; templateName: string; - }[]; - results: { + } | { name: string; - }[]; + templateName?: undefined; + })[]; + isMultiMaterial: boolean; monitors: { name: string; }[]; - postProcessors: { + results: { name: string; }[]; + }; + vasp_nscf: { applicationName: string; executableName: string; - }; - vasp_zpe: { input: { name: string; templateName: string; }[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + }; + vasp_nscf_hse: { applicationName: string; executableName: string; - }; - vasp_kpt_conv: { input: { name: string; templateName: string; }[]; - results: { + isDefault: boolean; + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + }; + vasp_relax: { applicationName: string; executableName: string; - }; - vasp_vc_relax_conv: { input: { name: string; templateName: string; }[]; - results: { - name: string; - }[]; monitors: { name: string; }[]; - applicationName: string; - executableName: string; - }; - vasp_neb: { - isMultiMaterial: boolean; - input: { + postProcessors: { name: string; - templateName: string; }[]; results: { name: string; }[]; - monitors: { - name: string; - }[]; + }; + vasp_symprec: { applicationName: string; executableName: string; - }; - vasp_neb_initial: { - isMultiMaterial: boolean; input: ({ name: string; templateName: string; @@ -1938,34 +1904,69 @@ export declare class ApplicationStandata extends Standata { name: string; templateName?: undefined; })[]; - results: { + monitors: { name: string; }[]; - monitors: { + results: { name: string; }[]; + }; + vasp_vc_relax: { applicationName: string; executableName: string; - }; - vasp_neb_final: { - isMultiMaterial: boolean; - input: ({ + input: { name: string; templateName: string; - } | { + }[]; + monitors: { name: string; - templateName?: undefined; - })[]; + }[]; + postProcessors: { + name: string; + }[]; results: { name: string; }[]; + }; + vasp_vc_relax_conv: { + applicationName: string; + executableName: string; + input: { + name: string; + templateName: string; + }[]; monitors: { name: string; }[]; + results: { + name: string; + }[]; + }; + vasp_zpe: { applicationName: string; executableName: string; + input: { + name: string; + templateName: string; + }[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; }; }; + isDefault: boolean; + monitors: { + name: string; + }[]; + postProcessors: { + name: string; + }[]; + results: { + name: string; + }[]; }; }; }; @@ -1989,63 +1990,26 @@ export declare class ApplicationStandata extends Standata { getApplications(): ApplicationSchema[]; getApplicationTreeItem(appName: string): ApplicationTreeItem; getApplication({ name, version, build }: ApplicationConfig): ApplicationSchema; - getExecutableByName(appName: string, execName?: string): { + getExecutableByName(appName: string, execName?: string): ExecutableTreeItem; + /** + * + * @deprecated use getExecutableByName directly + */ + getExecutableByConfig(appName: string, config?: { name: string; - isDefault?: boolean | undefined; - hasAdvancedComputeOptions?: boolean | undefined; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - flavors: Record & Pick, "results">>; - supportedApplicationVersions?: string[] | undefined; - preProcessors: never[]; - applicationId: never[]; - }; + }): ExecutableTreeItem; getExecutableAndFlavorByName(appName: string, execName?: string, flavorName?: string): { - executable: { - name: string; - isDefault?: boolean | undefined; - hasAdvancedComputeOptions?: boolean | undefined; - monitors: { - name: string; - }[]; - results: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - flavors: Record & Pick, "results">>; - supportedApplicationVersions?: string[] | undefined; - preProcessors: never[]; - applicationId: never[]; - }; - flavor: { - isDefault?: boolean | undefined; - input: { - templateId?: string | undefined; - templateName?: string | undefined; - name?: string | undefined; - }[]; - monitors: { - name: string; - }[]; - applicationName?: string | undefined; - executableName?: string | undefined; - results: { - name: string; - }[]; - name: string; - preProcessors: never[]; - postProcessors: never[]; - }; + executable: ExecutableTreeItem; + flavor: FlavorSchema; }; + getFlavorByName(executable: ExecutableTreeItem, name?: string): FlavorSchema | undefined; + /** + * @deprecated use getFlavorByName directly + */ + getFlavorByConfig(executable: ExecutableTreeItem, config?: { + name: string; + }): FlavorSchema | undefined; + getExecutableFlavors(executable: ExecutableTreeItem): FlavorSchema[]; getInput(flavor: FlavorSchema): TemplateSchema[]; } export {}; diff --git a/dist/js/application.js b/dist/js/application.js index 2df68a0d..c82d7b48 100644 --- a/dist/js/application.js +++ b/dist/js/application.js @@ -187,20 +187,41 @@ class ApplicationStandata extends base_1.Standata { } return config; } + /** + * + * @deprecated use getExecutableByName directly + */ + getExecutableByConfig(appName, config) { + return this.getExecutableByName(appName, config === null || config === void 0 ? void 0 : config.name); + } getExecutableAndFlavorByName(appName, execName, flavorName) { const executable = this.getExecutableByName(appName, execName); - const flavor = Object.entries(executable.flavors) - .map(([name, flavor]) => { - return { name, results: [], preProcessors: [], postProcessors: [], ...flavor }; - }) - .find(({ name, isDefault }) => { - return flavorName ? name === flavorName : isDefault; - }); + const flavor = this.getFlavorByName(executable, flavorName); if (!flavor) { throw new Error(`Flavor ${flavorName} not found for executable ${execName} in application ${appName}`); } return { executable, flavor }; } + getFlavorByName(executable, name) { + return this.getExecutableFlavors(executable).find((flavor) => name ? flavor.name === name : flavor.isDefault); + } + /** + * @deprecated use getFlavorByName directly + */ + getFlavorByConfig(executable, config) { + return this.getFlavorByName(executable, config === null || config === void 0 ? void 0 : config.name); + } + getExecutableFlavors(executable) { + return Object.entries(executable.flavors).map(([key, value]) => { + return { + preProcessors: [], + postProcessors: [], + results: [], + ...value, + name: key, + }; + }); + } getInput(flavor) { const appName = flavor.applicationName || ""; const execName = flavor.executableName || ""; diff --git a/dist/js/runtime_data/workflows.json b/dist/js/runtime_data/workflows.json index 7f34907f..9d4269bd 100644 --- a/dist/js/runtime_data/workflows.json +++ b/dist/js/runtime_data/workflows.json @@ -1 +1 @@ -{"filesMapByName":{"espresso/average_electrostatic_potential.json":{"_id":"7e865869-82fb-5769-84f0-ac9f9df354db","application":{"name":"espresso"},"isDefault":false,"name":"Average Electrostatic Potential","properties":["atomic_forces","average_potential_profile","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"7f2f8a38-c3bd-5aa9-b3b0-2c367287dd60","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Average Electrostatic Potential","properties":["atomic_forces","average_potential_profile","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average_potential","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average ESP","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"7f2f8a38-c3bd-5aa9-b3b0-2c367287dd60","flowchartId":"88861e21-1e6d-557d-b080-eafe3511872f","isDefault":false,"monitors":[],"name":"Average Electrostatic Potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/band_gap.json":{"_id":"b18a356e-9a14-5502-80fc-30a456b1c398","application":{"name":"espresso"},"isDefault":false,"name":"Band Gap","properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"233bb8cf-3b4a-5378-84d9-a6a95a2ab43d","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Gap","properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16"},"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"233bb8cf-3b4a-5378-84d9-a6a95a2ab43d","flowchartId":"db3b83ea-0ef5-594c-89a8-bde38dbc6105","isDefault":false,"monitors":[],"name":"Band Gap","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/band_gap_dos_hse.json":{"_id":"ab28e7cf-a363-5223-ae0b-a60c82bb4f9a","application":{"name":"espresso"},"isDefault":false,"name":"Band Gap + DoS - HSE","properties":["atomic_forces","band_gaps","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"f1341a29-777d-5ca3-8933-78a5e0d3f6f2","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"hse06","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"hybrid","type":"dft"},"name":"HSE Band Gap","properties":["atomic_forces","band_gaps","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_hse.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_hse","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"f494cdb2-304f-5da2-b979-ce3fbba3a6c4","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = {% if kgrid.dimensions[0]%2 == 0 %}{{kgrid.dimensions[0]/2}}{% else %}{{(kgrid.dimensions[0]+1)/2}}{% endif %}, nqx2 = {% if kgrid.dimensions[1]%2 == 0 %}{{kgrid.dimensions[1]/2}}{% else %}{{(kgrid.dimensions[1]+1)/2}}{% endif %}, nqx3 = {% if kgrid.dimensions[2]%2 == 0 %}{{kgrid.dimensions[2]/2}}{% else %}{{(kgrid.dimensions[2]+1)/2}}{% endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{% if d%2 == 0 %}{{d}} {% else %}{{d+1}} {% endif %}{% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_hse.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_hse","next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"schemaVersion":"2022.8.16"},"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"f1341a29-777d-5ca3-8933-78a5e0d3f6f2","flowchartId":"f7a0860d-6f9e-59e3-b600-07bbf986998a","isDefault":false,"monitors":[],"name":"HSE Band Gap","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/band_structure.json":{"_id":"cc901d3d-bf3f-522c-9dec-849ffc06f62a","application":{"name":"espresso"},"isDefault":false,"name":"Band Structure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"26d32e68-c2b5-50e9-8933-15f684fcc039","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"d618df45-5af3-5da5-8882-d74a27e00b04","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"26d32e68-c2b5-50e9-8933-15f684fcc039","flowchartId":"c573187f-a8bb-5084-9fcf-1560bf4a7786","isDefault":false,"monitors":[],"name":"Band Structure","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/band_structure_dos.json":{"_id":"fbf81b2c-0a99-5062-98e5-9f41b8fba8d5","application":{"name":"espresso"},"isDefault":false,"name":"Band Structure + Density of States","properties":["atomic_forces","band_gaps","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"fa594399-6b98-5d79-986c-0713601dc06c","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure + Density of States","properties":["atomic_forces","band_gaps","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"d618df45-5af3-5da5-8882-d74a27e00b04","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16"},"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"schemaVersion":"2022.8.16"},"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"fa594399-6b98-5d79-986c-0713601dc06c","flowchartId":"8a098bb9-73b1-5e84-bfc7-b783e02d0f53","isDefault":false,"monitors":[],"name":"Band Structure + Density of States","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/band_structure_hse.json":{"_id":"23b9058b-884c-52d4-82a8-ee162b9761e0","application":{"name":"espresso"},"isDefault":false,"name":"Band Structure - HSE","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"79f2cb6a-7994-5369-8c85-af07c55ad26f","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Preliminary SCF Calculation","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"a2785cc5-2427-5c7a-b30f-7077475b948c","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Extract KPOINTS","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"espresso_extract_kpoints.py"},{"name":"requirements.txt","templateName":"requirements_empty.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"espresso_extract_kpoints","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"a716b133-2d04-50b5-b497-100265e3fa24","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_extract_kpoints.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Extract kpoints","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"e47ca302-96f2-5726-9b4c-f34cdfaa7f72","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"hse06","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"hybrid","type":"dft"},"name":"Main HSE Run","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_bands_hse.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_bands_hse","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"08bd7e4a-2454-53b7-8cc9-9a95975f7e6f","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n {% for d in qgrid.dimensions -%}\n nqx{{loop.index}} = {{d}}\n {% endfor %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal\n{{ '{{' }} {{ explicitKPath.length }} {% raw %} + KPOINTS|length {% endraw %} {{ '}}' }}\n{% raw %}\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n{% endraw %}\n{% for point in explicitKPath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}0.0000001\n{% endfor %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPathFormDataManager"}],"executableName":"pw.x","name":"pw_scf_bands_hse.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_bands_hse","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"79f2cb6a-7994-5369-8c85-af07c55ad26f","flowchartId":"b6a2b27a-0fec-5e0e-8974-073ee9d2ad83","isDefault":false,"monitors":[],"name":"Preliminary SCF Calculation","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"a2785cc5-2427-5c7a-b30f-7077475b948c","flowchartId":"65789b0a-cfe2-5062-a53e-89f71112fb57","isDefault":false,"monitors":[],"name":"Extract KPOINTS","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"e47ca302-96f2-5726-9b4c-f34cdfaa7f72","flowchartId":"8f4c63a3-a06a-5f73-88d7-a57d7958b91d","isDefault":false,"monitors":[],"name":"Main HSE Run","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/band_structure_magn.json":{"_id":"f2767e1a-fce7-578f-b627-8806d3cd59de","application":{"name":"espresso"},"isDefault":false,"name":"Bandstructure with spin magnetism - QE","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"354942f1-9f3d-57a9-b5ae-6bdf5b3a60af","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Bandstructure with spin magnetism","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_magn.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_magn","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"c229d2a0-3c19-5f13-b3e0-ceb86cb9fbc1","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_magn.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_magn","next":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_magn.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands_magn","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_magn.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands_magn","next":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_up.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands_spin_up","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_up.dat'{% endraw %}\n spin_component = 1\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_up.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands_spin_up","next":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_dn.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands_spin_dn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_dn.dat'{% endraw %}\n spin_component = 2\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_dn.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands_spin_dn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"354942f1-9f3d-57a9-b5ae-6bdf5b3a60af","flowchartId":"41e70bc1-ba00-5871-9289-4d57c7b79452","isDefault":false,"monitors":[],"name":"Bandstructure with spin magnetism","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/band_structure_soc.json":{"_id":"b4587b15-eb6f-5316-8497-a79f321b3c76","application":{"name":"espresso"},"isDefault":false,"name":"Bandstructure with SOC - QE","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"153b4a88-5d56-553f-b7d3-40df96968eb4","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{"searchText":"nc-fr"},"subtype":"nc-fr","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Bandstructure with SOC","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_soc.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_soc","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"74ec024a-f247-5f15-9c21-cc169bcb62c7","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_soc.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_soc","next":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_soc.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands_soc","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_soc.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands_soc","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"153b4a88-5d56-553f-b7d3-40df96968eb4","flowchartId":"872d54a6-679c-5af5-a153-72709fcf46df","isDefault":false,"monitors":[],"name":"Bandstructure with SOC","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/dielectric_tensor.json":{"_id":"554a5473-511e-5c7f-88dc-3f99f544a576","application":{"name":"espresso"},"isDefault":false,"name":"Dielectric Function","properties":["atomic_forces","band_gaps","dielectric_tensor","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"38340b52-83ad-5862-bc18-c140bdc0cb72","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"nc","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Compute Dielectric Function","properties":["atomic_forces","band_gaps","dielectric_tensor","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"3b230ec3-0791-52f7-a4db-625390b8718f","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"3b230ec3-0791-52f7-a4db-625390b8718f","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Set No-Symmetry Flag","next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","operand":"NO_SYMMETRY_NO_INVERSION","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":true},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16"},"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","next":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"epsilon.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"epsilon.x","input":[{"name":"epsilon.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"dielectric_tensor","postProcessors":[],"preProcessors":[],"results":[{"name":"dielectric_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n","contextProviders":[],"executableName":"epsilon.x","name":"epsilon.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Compute dielectric function","postProcessors":[],"preProcessors":[],"results":[{"name":"dielectric_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"38340b52-83ad-5862-bc18-c140bdc0cb72","flowchartId":"8408f3c4-1c42-5ffe-bc29-bee11b5a6a05","isDefault":false,"monitors":[],"name":"Compute Dielectric Function","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/dos.json":{"_id":"e930440a-1624-5eb9-b83b-dbe1421b4f5e","application":{"name":"espresso"},"isDefault":false,"name":"Density of States","properties":["atomic_forces","band_gaps","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"2cf317f3-3306-5a96-bc9b-e9103ebcd5be","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Density of States","properties":["atomic_forces","band_gaps","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16"},"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"schemaVersion":"2022.8.16"},"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"2cf317f3-3306-5a96-bc9b-e9103ebcd5be","flowchartId":"3e64fdb4-ab5b-52a0-a1d5-51343c49481c","isDefault":false,"monitors":[],"name":"Density of States","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/electronic_density_mesh.json":{"_id":"67b8445c-14ea-5efb-acbf-7dd7bd9df4b4","application":{"name":"espresso"},"isDefault":false,"name":"Electronic Density Mesh","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"e2749c5a-fcd9-589c-819b-8b88c5c90924","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Electronic Density Mesh","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_density.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_density","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_density.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_density","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"e2749c5a-fcd9-589c-819b-8b88c5c90924","flowchartId":"79e421a1-18aa-5c27-b8a8-9a769c1a89a0","isDefault":false,"monitors":[],"name":"Electronic Density Mesh","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/esm.json":{"_id":"1f17c10d-9554-5f41-994e-fee3fc0d22a7","application":{"name":"espresso"},"isDefault":false,"name":"Effective Screening Medium (ESM)","properties":["atomic_forces","charge_density_profile","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"0de669f6-a455-5dae-b331-19dc85f7090f","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Effective Screening Medium (ESM)","properties":["atomic_forces","charge_density_profile","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_esm","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"2f487bc6-c237-53e4-bad5-be60369662cb","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_esm","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"0de669f6-a455-5dae-b331-19dc85f7090f","flowchartId":"e7893fdf-0515-58a0-a9e1-0393bdc57d33","isDefault":false,"monitors":[],"name":"Effective Screening Medium (ESM)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/esm_relax.json":{"_id":"059da61f-b061-5626-92c4-c103c28b737e","application":{"name":"espresso"},"isDefault":false,"name":"Effective Screening Medium (ESM) Relax","properties":["atomic_forces","charge_density_profile","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"69728792-afeb-50aa-9b4e-6974a90f676a","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Effective Screening Medium (ESM) Relax","properties":["atomic_forces","charge_density_profile","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm_relax.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_esm_relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"a2bec506-1fdd-5125-a787-85f31cde20c1","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm_relax.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_esm_relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"69728792-afeb-50aa-9b4e-6974a90f676a","flowchartId":"f0733dc9-f3ad-5a1c-82fc-515edc0276b6","isDefault":false,"monitors":[],"name":"Effective Screening Medium (ESM) Relax","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/fixed_cell_relaxation.json":{"_id":"10343bab-9cf8-51ed-a0bc-6991cc5ffa8f","application":{"name":"espresso"},"isDefault":false,"name":"Fixed-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"fb75e249-5489-5146-bd8a-786d33330d9c","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Fixed-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_relax.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"c42871f6-ab79-5987-b228-c3bd80f16ffd","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_relax.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"fb75e249-5489-5146-bd8a-786d33330d9c","flowchartId":"0de8c4c8-b722-5cd2-ae68-b484262e0a01","isDefault":false,"monitors":[],"name":"Fixed-cell Relaxation","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/gw_band_structure_band_gap_full_frequency.json":{"_id":"500f379f-bc9d-5f6f-8780-e28570f1ed3f","application":{"name":"espresso"},"isDefault":false,"name":"Full Frequency GW Band Structure + Band Gap","properties":["atomic_forces","band_gaps","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"46bcdcc8-628e-518e-b8c3-9bf38d7a2aef","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{"searchText":".*dojo-oncv.*"},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Full Frequency GW Band Structure + Band Gap","properties":["atomic_forces","band_gaps","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"gw.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_full_frequency.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"gw_bands_full_frequency","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16"},"flowchartId":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_full_frequency.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"gw_bands_full_frequency","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"46bcdcc8-628e-518e-b8c3-9bf38d7a2aef","flowchartId":"b1748925-1c8e-5c73-a8ff-ec4da33a49ce","isDefault":false,"monitors":[],"name":"Full Frequency GW Band Structure + Band Gap","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/gw_band_structure_band_gap_plasmon_pole.json":{"_id":"dc9cba26-070a-57dd-aaa8-6de7bb714807","application":{"name":"espresso"},"isDefault":false,"name":"Plasmon-Pole GW Band Structure + Band Gap","properties":["atomic_forces","band_gaps","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"72b79a87-8eef-5fe2-9d6c-6c9c256dd56c","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{"searchText":".*dojo-oncv.*"},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Plasmon-Pole GW Band Structure + Band Gap","properties":["atomic_forces","band_gaps","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"gw.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_plasmon_pole.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"gw_bands_plasmon_pole","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16"},"flowchartId":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_plasmon_pole.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"gw_bands_plasmon_pole","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"72b79a87-8eef-5fe2-9d6c-6c9c256dd56c","flowchartId":"911d4cc1-cde5-5097-a7be-0e11f73113a7","isDefault":false,"monitors":[],"name":"Plasmon-Pole GW Band Structure + Band Gap","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/kpoint_convergence.json":{"_id":"e8141224-dcea-576b-a556-80f65ab2e230","application":{"name":"espresso"},"isDefault":false,"name":"K-point Convergence","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"ff6a8fbc-2202-5786-9a26-67c843417d0b","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"K-point Convergence","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"init-tolerance","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Init tolerance","next":"init-increment","operand":"TOL","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0.00001},{"flowchartId":"init-increment","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init increment","next":"init-result","operand":"INC","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"flowchartId":"init-result","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init result","next":"init-parameter","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0},{"flowchartId":"init-parameter","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init parameter","next":"pwscf-kpoint-convergence","operand":"PARAMETER","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_kpt_conv.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_kpt_conv","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"pwscf-kpoint-convergence","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0{% endraw %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_kpt_conv.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_kpt_conv","next":"store-result","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"store-result","head":false,"input":[{"name":"total_energy","scope":"pwscf-kpoint-convergence"}],"isDefault":false,"monitors":[],"name":"store result","next":"check-convergence","operand":"RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"else":"update-result","flowchartId":"check-convergence","head":false,"input":[],"isDefault":false,"maxOccurrences":50,"monitors":[],"name":"check convergence","next":"update-result","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","status":"idle","statusTrack":[],"tags":[],"then":"convergence-is-reached","type":"condition"},{"flowchartId":"update-result","head":false,"input":[{"name":"RESULT","scope":"global"}],"isDefault":false,"monitors":[],"name":"update result","next":"increment-parameter","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"RESULT"},{"flowchartId":"increment-parameter","head":false,"input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"isDefault":false,"monitors":[],"name":"increment parameter","next":"pwscf-kpoint-convergence","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER+INC"},{"flowchartId":"convergence-is-reached","head":false,"input":[{"name":"PARAMETER","scope":"global"}],"isDefault":false,"monitors":[],"name":"exit","operand":"PARAMETER","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER"}]}],"units":[{"_id":"ff6a8fbc-2202-5786-9a26-67c843417d0b","flowchartId":"a34eec2c-cdb2-537d-88c0-ed1d7b205879","isDefault":false,"monitors":[],"name":"K-point Convergence","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/neb.json":{"_id":"6dc0a5af-7ec5-50e4-b663-42fc5ddf0ef1","application":{"name":"espresso"},"isDefault":false,"name":"Nudged Elastic Band (NEB)","properties":["reaction_energy_barrier","reaction_energy_profile"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"c9034468-df28-5357-8912-02226f919042","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Nudged Elastic Band (NEB)","properties":["reaction_energy_barrier","reaction_energy_profile"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"neb.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"neb.x","input":[{"name":"neb.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"neb","postProcessors":[],"preProcessors":[],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"9f273ca0-d240-5b1f-89a9-64dd579304ac","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = {{ 2 + (input.INTERMEDIATE_IMAGES.length or neb.nImages) }},\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_first = false %}\n{%- for position in input.FIRST_IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_first = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.FIRST_IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_first %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n{%- for IMAGE in input.INTERMEDIATE_IMAGES %}\nINTERMEDIATE_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_intermediate = false %}\n{%- for position in IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_intermediate = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_intermediate %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n{%- endfor %}\nLAST_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_last = false %}\n{%- for position in input.LAST_IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_last = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.LAST_IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_last %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nEND_POSITIONS\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nEND_ENGINE_INPUT\nEND\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"NEBFormDataManager"},{"name":"QENEBInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"neb.x","name":"neb.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"neb","postProcessors":[],"preProcessors":[],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"c9034468-df28-5357-8912-02226f919042","flowchartId":"134c70e2-aeaf-543d-aded-1585cd71b800","isDefault":false,"monitors":[],"name":"Nudged Elastic Band (NEB)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/phonon_dispersions.json":{"_id":"8623c689-9ba3-5454-a3c8-0c6c49c402b4","application":{"name":"espresso"},"isDefault":false,"name":"Phonon Dispersions","properties":["atomic_forces","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"bfb69b48-8fbf-5a0d-8949-448f20754766","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Phonon Dispersions","properties":["atomic_forces","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"13bcafce-56ef-5b47-b079-317495eb6933","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16"},"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","next":"a7fded20-889b-54fc-bbb0-456e82689ab1","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"schemaVersion":"2022.8.16"},"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"bfb69b48-8fbf-5a0d-8949-448f20754766","flowchartId":"2cd13237-d089-5d5e-8372-1db8bb8e383f","isDefault":false,"monitors":[],"name":"Phonon Dispersions","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/phonon_dos.json":{"_id":"840eb771-6cc0-5141-9a37-9c2eef74aa20","application":{"name":"espresso"},"isDefault":false,"name":"Phonon Density of States","properties":["atomic_forces","fermi_energy","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"2232051b-9f2a-5a48-9b4d-6231eb6e8297","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Phonon Density of States","properties":["atomic_forces","fermi_energy","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"13bcafce-56ef-5b47-b079-317495eb6933","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16"},"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","next":"8fe6a24b-c994-55a2-a448-88657292e8c2","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16"},"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"2232051b-9f2a-5a48-9b4d-6231eb6e8297","flowchartId":"1954e749-1d37-50e6-8ae7-7292f5ef59c0","isDefault":false,"monitors":[],"name":"Phonon Density of States","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/phonon_dos_dispersion.json":{"_id":"cd3ab6a3-a56c-5626-b527-cfe002c30472","application":{"name":"espresso"},"isDefault":false,"name":"Phonon Density of States + Dispersions","properties":["atomic_forces","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"291d25cd-378a-5be7-9d85-c8013a4b165b","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Phonon Density of States + Dispersions","properties":["atomic_forces","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"13bcafce-56ef-5b47-b079-317495eb6933","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16"},"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","next":"8fe6a24b-c994-55a2-a448-88657292e8c2","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16"},"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","next":"a7fded20-889b-54fc-bbb0-456e82689ab1","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"schemaVersion":"2022.8.16"},"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"291d25cd-378a-5be7-9d85-c8013a4b165b","flowchartId":"7897ed9a-6b48-5a79-a50e-28797f3912a5","isDefault":false,"monitors":[],"name":"Phonon Density of States + Dispersions","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/phonon_map.json":{"_id":"bbf7f87c-d201-537e-8c0f-00dca0cbb7ec","application":{"name":"espresso"},"isDefault":false,"name":"Phonon Map","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","phonon_dispersions","phonon_dos"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"f52b8039-83d0-5485-a1f1-0bc37cb01ed3","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"pw-scf","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"2f017bcb-f4ba-55b8-b939-1f780679a88e","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"ph-init-qpoints","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_init_qpoints.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_init_qpoints","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"b8ea6a33-38f3-5434-b17e-b5eae8fff9fc","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_init_qpoints.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_init_qpoints","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"espresso-xml-get-qpt-irr","properties":[],"schemaVersion":"2022.8.16","units":[]},{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"reduce","properties":["phonon_dispersions","phonon_dos"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid_restart.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid_restart","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb206177-a4af-599a-81ba-6c88d24253b6","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid_restart.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid_restart","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","next":"8fe6a24b-c994-55a2-a448-88657292e8c2","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16"},"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","next":"a7fded20-889b-54fc-bbb0-456e82689ab1","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"schemaVersion":"2022.8.16"},"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"f52b8039-83d0-5485-a1f1-0bc37cb01ed3","flowchartId":"d270b789-fb67-573c-a566-9f09fdacea23","isDefault":false,"monitors":[],"name":"pw-scf","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"2f017bcb-f4ba-55b8-b939-1f780679a88e","flowchartId":"4bb74dfb-46a6-5bf4-a477-5d374dc2e271","isDefault":false,"monitors":[],"name":"ph-init-qpoints","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a","flowchartId":"9894b91f-6e97-5ee6-af02-0bef26bd62c0","isDefault":false,"monitors":[],"name":"espresso-xml-get-qpt-irr","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"flowchartId":"24e3c1f0-8090-512e-9727-8770071d17c8","input":{"name":"Q_POINTS","scope":"global","target":"MAP_DATA","useValues":false,"values":[]},"isDefault":false,"monitors":[],"name":"map","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"map","workflowId":"3c30219d-b8d7-4206-a4af-845815342935"},{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","flowchartId":"55a9e9fb-3545-5c4b-a1bb-b64a899b78c6","isDefault":false,"monitors":[],"name":"reduce","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[{"_id":"731d3397-3278-516a-b28e-53626ef50f0a","name":"phonon_map_workflow","properties":[],"subworkflows":[{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"pre-processor","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_link_outdir_save.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"espresso_link_outdir_save","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_link_outdir_save.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"ph-single-irr-qpt","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_single_irr_qpt.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_single_irr_qpt","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"8db9af08-d935-57a0-a824-e7db6d936de8","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_single_irr_qpt.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_single_irr_qpt","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"post-processor","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_collect_dynmat.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"espresso_collect_dynmat","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cd5c3e29-511b-5ef8-949d-ad884f210301","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_collect_dynmat.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","flowchartId":"e9a790f4-dec6-52c1-b951-014f0ff01cb4","monitors":[],"name":"pre-processor","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","flowchartId":"c2195045-7a5c-54d3-ab88-211c82de09f1","monitors":[],"name":"ph-single-irr-qpt","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","flowchartId":"e483c7fb-2a29-5e91-819a-7465ead70134","monitors":[],"name":"post-processor","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]}]},"espresso/recalculate_bands.json":{"_id":"42b2b964-8ccc-5b36-9e33-41a954abc2ba","application":{"name":"espresso"},"isDefault":false,"name":"Recalculate Bands","properties":["band_structure"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Recalculate Bands","properties":["band_structure"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","flowchartId":"e8b72a45-765e-565f-ab17-c91a21aec09d","isDefault":false,"monitors":[],"name":"Recalculate Bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/surface_energy.json":{"_id":"68512987-de73-5614-bab2-0f8b575cffa3","application":{"name":"espresso"},"isDefault":false,"name":"Surface Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Surface Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","flowchartId":"d81dc9ce-bb50-5bc6-af1d-e5ede03bb0a6","isDefault":false,"monitors":[],"name":"Surface Energy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/total_energy.json":{"_id":"4e36ca25-fa46-5628-a227-27d22dea8553","application":{"name":"espresso"},"isDefault":false,"name":"Total Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Total Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"tags":["default"],"units":[{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","flowchartId":"6059d61a-6a92-5657-9130-02208639aff8","isDefault":false,"monitors":[],"name":"Total Energy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/valence_band_offset.json":{"_id":"d8e08cac-7747-50aa-b925-41f214d722c6","application":{"name":"espresso"},"isDefault":false,"name":"Valence Band Offset (2D)","properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","valence_band_offset"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"9c65d03e-6a30-58f3-947a-f174342be0c3","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"BS + Avg ESP (Interface)","properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"0f21d8c4-ab32-53ba-b40d-fc9b6608e1b9","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Material Index (Interface)","next":"9fc7a088-5533-5f70-bb33-f676ec65f565","operand":"MATERIAL_INDEX","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"0"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap"}],"isDefault":false,"monitors":[],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Set Valence Band Maximum","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","operand":"VBM","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average_potential","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential"}],"isDefault":false,"monitors":[],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},{"_id":"ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Find ESP Values (Interface)","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"generic:processing:find_extrema:scipy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"python-find-extrema","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema"}],"isDefault":false,"monitors":[],"name":"Set Average ESP Value","operand":"AVG_ESP_INTERFACE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},{"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"BS + Avg ESP (interface left)","properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"0bd31760-f6e4-5826-b282-882c06c97f94","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Material Index (Interface left)","next":"3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08","operand":"MATERIAL_INDEX","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"1"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap-left","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap-left","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-left"}],"isDefault":false,"monitors":[],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Set Valence Band Maximum","next":"dfc4f1c5-5856-588a-99df-6d5fb46bb429","operand":"VBM_LEFT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"dfc4f1c5-5856-588a-99df-6d5fb46bb429","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","next":"b1bb2b3e-3197-5bcd-85b0-959cc357c8d3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"b1bb2b3e-3197-5bcd-85b0-959cc357c8d3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential-left","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average_potential","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential-left","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-left"}],"isDefault":false,"monitors":[],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},{"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Find ESP Value (Interface left)","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"generic:processing:find_extrema:scipy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"python-find-extrema-left","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema-left"}],"isDefault":false,"monitors":[],"name":"Set Average ESP Value","operand":"AVG_ESP_LEFT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},{"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"BS + Avg ESP (interface right)","properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"a05809d1-cc0d-5a0b-bf5e-d43b90a6ac4b","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Material Index (Interface right)","next":"b89d6348-3915-5c24-9fbb-350bc98ac708","operand":"MATERIAL_INDEX","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"2"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"b89d6348-3915-5c24-9fbb-350bc98ac708","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap-right","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap-right","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-right"}],"isDefault":false,"monitors":[],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Set Valence Band Maximum","next":"bc3f514c-4bed-521b-85a3-4e0edfdc3585","operand":"VBM_RIGHT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"bc3f514c-4bed-521b-85a3-4e0edfdc3585","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","next":"28bb682d-d287-5beb-8a67-826449c474ee","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"28bb682d-d287-5beb-8a67-826449c474ee","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential-right","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average_potential","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential-right","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-right"}],"isDefault":false,"monitors":[],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},{"_id":"736295e8-2ee0-5974-83bc-362061ac0688","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Find ESP Value (Interface right)","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"generic:processing:find_extrema:scipy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"python-find-extrema-right","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema-right"}],"isDefault":false,"monitors":[],"name":"Set Average ESP Value","operand":"AVG_ESP_RIGHT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Calculate VBO","properties":["valence_band_offset"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Difference of valence band maxima","next":"2626f7bb-d392-5fd4-ab71-329b508de347","operand":"VBM_DIFF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"VBM_LEFT - VBM_RIGHT"},{"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Difference of macroscopically averaged ESP in bulk","next":"b7307787-53e2-599b-ad12-d627b04074b4","operand":"AVG_ESP_DIFF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]"},{"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Lineup of macroscopically averaged ESP in interface","next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","operand":"ESP_LINEUP","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])"},{"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Valence Band Offset","operand":"VALENCE_BAND_OFFSET","postProcessors":[],"preProcessors":[],"results":[{"name":"valence_band_offset"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))"}]}],"units":[{"_id":"9c65d03e-6a30-58f3-947a-f174342be0c3","flowchartId":"fd622b5c-5c02-594e-b582-b245c17ca9a4","isDefault":false,"monitors":[],"name":"BS + Avg ESP (Interface)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7","flowchartId":"ad3b1e4c-5965-5605-a067-dd0c59907c4b","isDefault":false,"monitors":[],"name":"Find ESP Values (Interface)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","flowchartId":"8d5b4734-edfd-55cc-ad80-aaa72487398d","isDefault":false,"monitors":[],"name":"BS + Avg ESP (interface left)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","flowchartId":"102ec582-5b75-52f5-8b39-19ca725ed47a","isDefault":false,"monitors":[],"name":"Find ESP Value (Interface left)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","flowchartId":"603c45db-93aa-54ce-a7fe-6e9b65b0037d","isDefault":false,"monitors":[],"name":"BS + Avg ESP (interface right)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"736295e8-2ee0-5974-83bc-362061ac0688","flowchartId":"e3444d35-cc41-59f5-8481-78d0c383b84e","isDefault":false,"monitors":[],"name":"Find ESP Value (Interface right)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","flowchartId":"0e0b141a-39ca-52bc-9094-e5f96dc72f39","isDefault":false,"monitors":[],"name":"Calculate VBO","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/variable_cell_relaxation.json":{"_id":"c45dcef1-d16b-59d1-9318-cedd0b1acf08","application":{"name":"espresso"},"isDefault":false,"name":"Variable-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Variable-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","systemName":"espresso-variable-cell-relaxation","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"tags":["variable-cell_relaxation"],"units":[{"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","flowchartId":"8f6e9590-6a87-584b-abd7-1fb98253054c","isDefault":false,"monitors":[],"name":"Variable-cell Relaxation","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/wavefunction_amplitude.json":{"_id":"196d364a-5a30-549b-a898-8b9704b50ff1","application":{"name":"espresso"},"isDefault":false,"name":"Wavefunction Amplitude","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude","file_content"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Wavefunction Amplitude","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-scf","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"extract-band-energies","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"band_structure"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"extract-band-energies","head":false,"input":[{"name":"band_structure","scope":"pw-scf"}],"isDefault":false,"monitors":[],"name":"Extract Band Energies","next":"indices-below-fermi","operand":"band_energies","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]"},{"flowchartId":"indices-below-fermi","head":false,"input":[{"name":"fermi_energy","scope":"pw-scf"}],"isDefault":false,"monitors":[],"name":"Find Indices Below Fermi","next":"8771dc7f-878e-5f13-a840-a3a416854f1e","operand":"indices_below_fermi","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]"},{"flowchartId":"8771dc7f-878e-5f13-a840-a3a416854f1e","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Store Band Below EF","next":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","operand":"KBAND_VALUE_BELOW_EF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1"},{"flowchartId":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Select Band","next":"pp-wfn","operand":"KBAND_VALUE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"KBAND_VALUE_BELOW_EF"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_wfn","postProcessors":[],"preProcessors":[],"results":[{"name":"wavefunction_amplitude"}],"schemaVersion":"2022.8.16"},"flowchartId":"pp-wfn","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_wfn.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_wfn","postProcessors":[],"preProcessors":[],"results":[{"name":"wavefunction_amplitude"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Plot Wavefunction","properties":["file_content"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"plot_wavefunction","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"57fca898-8e8b-5ef2-81a5-9d2b612bc18d","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"plot WFN","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"tags":["wfn","wfn_plot"],"units":[{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","flowchartId":"36467db9-279f-52a3-a6ef-ffdc26d875ed","isDefault":false,"monitors":[],"name":"Wavefunction Amplitude","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","flowchartId":"4ce49281-e731-550e-af66-6d2408db8237","isDefault":false,"monitors":[],"name":"Plot Wavefunction","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/zero_point_energy.json":{"_id":"3158c78d-58bb-5675-8c7f-6f2337061015","application":{"name":"espresso"},"isDefault":false,"name":"Zero Point Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Zero Point Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"107595d1-490f-53a2-8432-7f8a12f14d96","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_gamma","postProcessors":[],"preProcessors":[],"results":[{"name":"zero_point_energy"}],"schemaVersion":"2022.8.16"},"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_zpe","postProcessors":[],"preProcessors":[],"results":[{"name":"zero_point_energy"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","flowchartId":"d906bd20-eb92-5a01-a0e2-c81a2d9b2a41","isDefault":false,"monitors":[],"name":"Zero Point Energy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"nwchem/total_energy.json":{"_id":"937fbac8-2dec-5fb1-a46f-b8a0cc3d3d05","application":{"name":"nwchem"},"isDefault":false,"name":"Total Energy","properties":["total_energy","total_energy_contributions"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","application":{"build":"GNU","isDefault":true,"name":"nwchem","schemaVersion":"2022.8.16","shortName":"nwchem","summary":"NWChem","version":"7.0.2"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"pople","type":"localorbital"},"subtype":"gga","type":"dft"},"name":"Total Energy","properties":["total_energy","total_energy_contributions"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"nwchem","schemaVersion":"2022.8.16","shortName":"nwchem","summary":"NWChem","version":"7.0.2"},"context":[],"executable":{"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem","postProcessors":[{"name":"error_handler"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"schemaVersion":"2022.8.16"},"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","flowchartId":"6059d61a-6a92-5657-9130-02208639aff8","isDefault":false,"monitors":[],"name":"Total Energy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/ml/classification_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","application":{"name":"python"},"isDefault":false,"isUsingDataset":true,"name":"Python ML Train Classification","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"schemaVersion":"2022.8.16","units":[{"flowchartId":"head-set-predict-status","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Dataset","next":"head-branch-on-predict-status","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"isDefault":false,"maxOccurrences":100,"monitors":[],"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"flowchartId":"end-of-ml-train-head","head":false,"input":[],"isDefault":false,"monitors":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:random_forest_classification:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:roc_curve:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ROC Curve Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","isDefault":false,"monitors":[],"name":"Set Up the Job","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","isDefault":false,"monitors":[],"name":"Machine Learning","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/ml/clustering_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","application":{"name":"python"},"isDefault":false,"isUsingDataset":true,"name":"Python ML Train Clustering","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"schemaVersion":"2022.8.16","units":[{"flowchartId":"head-set-predict-status","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Dataset","next":"head-branch-on-predict-status","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"isDefault":false,"maxOccurrences":100,"monitors":[],"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"flowchartId":"end-of-ml-train-head","head":false,"input":[],"isDefault":false,"monitors":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:random_forest_classification:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:roc_curve:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ROC Curve Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","isDefault":false,"monitors":[],"name":"Set Up the Job","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","isDefault":false,"monitors":[],"name":"Machine Learning","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/ml/regression_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","application":{"name":"python"},"isDefault":false,"isUsingDataset":true,"name":"Python ML Train Regression","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"schemaVersion":"2022.8.16","units":[{"flowchartId":"head-set-predict-status","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Dataset","next":"head-branch-on-predict-status","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"isDefault":false,"maxOccurrences":100,"monitors":[],"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"flowchartId":"end-of-ml-train-head","head":false,"input":[],"isDefault":false,"monitors":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:multilayer_perceptron:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:parity_plot:matplotlib","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Parity Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","isDefault":false,"monitors":[],"name":"Set Up the Job","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","isDefault":false,"monitors":[],"name":"Machine Learning","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/python_script.json":{"_id":"de816646-766b-5f97-b468-0937d4381440","application":{"name":"python"},"isDefault":false,"name":"Python Script","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Python Script","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","flowchartId":"c50e28b2-a0c5-5324-8b6f-e99b5a546bd8","isDefault":false,"monitors":[],"name":"Python Script","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"shell/batch_espresso_pwscf.json":{"_id":"e0046fb4-37db-5732-bf81-c48e13081a4c","application":{"name":"shell"},"isDefault":false,"name":"Shell Batch Job (Espresso PWSCF)","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Batch Job (Espresso PWSCF)","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"job_espresso_pw_scf","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","flowchartId":"d884e8f7-7acf-5a03-bc9a-186903bdaa0e","isDefault":false,"monitors":[],"name":"Shell Batch Job (Espresso PWSCF)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"shell/hello_world.json":{"_id":"d2fd444c-06b4-5d66-baeb-449c680ae1bf","application":{"name":"shell"},"isDefault":false,"name":"Shell Script","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Hello World","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","flowchartId":"319307c2-bf22-5bf2-b4e9-a4cdf671b786","isDefault":false,"monitors":[],"name":"Shell Hello World","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/band_gap.json":{"_id":"1a358471-0a73-5fcb-ad3c-7a8079029c86","application":{"name":"vasp"},"isDefault":false,"name":"Band Gap","properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Gap","properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"f0d65517-9592-5bc8-948e-a0851a766cbb","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"schemaVersion":"2022.8.16"},"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","flowchartId":"db3b83ea-0ef5-594c-89a8-bde38dbc6105","isDefault":false,"monitors":[],"name":"Band Gap","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/band_structure.json":{"_id":"25b0ad08-87bb-5400-bea4-acd5fe2163c0","application":{"name":"vasp"},"isDefault":false,"name":"Band Structure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","flowchartId":"c573187f-a8bb-5084-9fcf-1560bf4a7786","isDefault":false,"monitors":[],"name":"Band Structure","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/band_structure_dos.json":{"_id":"c8338d40-3c6e-5581-b03c-d7fb5cbb8df5","application":{"name":"vasp"},"isDefault":false,"name":"Band Structure + Density of States","properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"d38fea11-9781-5151-8dae-d705381498be","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure + Density of States","properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"d38fea11-9781-5151-8dae-d705381498be","flowchartId":"8a098bb9-73b1-5e84-bfc7-b783e02d0f53","isDefault":false,"monitors":[],"name":"Band Structure + Density of States","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/dos.json":{"_id":"629a79fb-a03f-5e34-b2ce-9c735e8ef6c0","application":{"name":"vasp"},"isDefault":false,"name":"Density of States","properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Density of States","properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","flowchartId":"3e64fdb4-ab5b-52a0-a1d5-51343c49481c","isDefault":false,"monitors":[],"name":"Density of States","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/fixed_cell_relaxation.json":{"_id":"cb69418c-2f6c-551d-af81-0cf20ec1113d","application":{"name":"vasp"},"isDefault":false,"name":"Fixed-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Fixed-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","postProcessors":[{"name":"prepare_restart"}],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","postProcessors":[{"name":"prepare_restart"}],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","flowchartId":"0de8c4c8-b722-5cd2-ae68-b484262e0a01","isDefault":false,"monitors":[],"name":"Fixed-cell Relaxation","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/kpoint_convergence.json":{"_id":"fcf105f9-5ae7-5c32-a6b3-e3579cbdf39a","application":{"name":"vasp"},"isDefault":false,"name":"K-point Convergence","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"K-point Convergence","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"init-tolerance","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Init tolerance","next":"init-increment","operand":"TOL","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0.00001},{"flowchartId":"init-increment","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init increment","next":"init-result","operand":"INC","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"flowchartId":"init-result","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init result","next":"init-parameter","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0},{"flowchartId":"init-parameter","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init parameter","next":"vasp-kpoint-convergence","operand":"PARAMETER","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"vasp-kpoint-convergence","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","next":"store-result","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"store-result","head":false,"input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"isDefault":false,"monitors":[],"name":"store result","next":"check-convergence","operand":"RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"else":"update-result","flowchartId":"check-convergence","head":false,"input":[],"isDefault":false,"maxOccurrences":50,"monitors":[],"name":"check convergence","next":"update-result","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","status":"idle","statusTrack":[],"tags":[],"then":"convergence-is-reached","type":"condition"},{"flowchartId":"update-result","head":false,"input":[{"name":"RESULT","scope":"global"}],"isDefault":false,"monitors":[],"name":"update result","next":"increment-parameter","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"RESULT"},{"flowchartId":"increment-parameter","head":false,"input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"isDefault":false,"monitors":[],"name":"increment parameter","next":"vasp-kpoint-convergence","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER+INC"},{"flowchartId":"convergence-is-reached","head":false,"input":[{"name":"PARAMETER","scope":"global"}],"isDefault":false,"monitors":[],"name":"exit","operand":"PARAMETER","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER"}]}],"units":[{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","flowchartId":"a34eec2c-cdb2-537d-88c0-ed1d7b205879","isDefault":false,"monitors":[],"name":"K-point Convergence","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/neb.json":{"_id":"2973908e-21ae-5424-afc9-ccb3fde477d8","application":{"name":"vasp"},"isDefault":false,"name":"Nudged Elastic Band (NEB)","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","reaction_energy_barrier","reaction_energy_profile"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"compute":{"arguments":{"nband":1,"ndiag":1,"nimage":1,"npools":1,"ntg":1},"cluster":{"fqdn":""},"isRestartable":true,"nodes":1,"notify":"n","ppn":1,"queue":"D","timeLimit":"01:00:00","timeLimitType":"per single attempt"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Initial/Final Total Energies","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","next":"e65a17ce-10c8-5710-ad4d-fb3d42434091","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"isDraft":false,"isMultiMaterial":true,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Prepare Directories","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bash_vasp_prepare_neb_images","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR <=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema"}],"isDefault":false,"monitors":[],"name":"Set Average ESP Value","operand":"AVG_ESP_INTERFACE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},{"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"BS + Avg ESP (interface left)","properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"0bd31760-f6e4-5826-b282-882c06c97f94","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Material Index (Interface left)","next":"3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08","operand":"MATERIAL_INDEX","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"1"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap-left","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap-left","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-left"}],"isDefault":false,"monitors":[],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Set Valence Band Maximum","next":"dfc4f1c5-5856-588a-99df-6d5fb46bb429","operand":"VBM_LEFT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"dfc4f1c5-5856-588a-99df-6d5fb46bb429","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","next":"b1bb2b3e-3197-5bcd-85b0-959cc357c8d3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"b1bb2b3e-3197-5bcd-85b0-959cc357c8d3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential-left","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average_potential","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential-left","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-left"}],"isDefault":false,"monitors":[],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},{"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Find ESP Value (Interface left)","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"generic:processing:find_extrema:scipy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"python-find-extrema-left","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema-left"}],"isDefault":false,"monitors":[],"name":"Set Average ESP Value","operand":"AVG_ESP_LEFT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},{"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"BS + Avg ESP (interface right)","properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"a05809d1-cc0d-5a0b-bf5e-d43b90a6ac4b","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Material Index (Interface right)","next":"b89d6348-3915-5c24-9fbb-350bc98ac708","operand":"MATERIAL_INDEX","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"2"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"b89d6348-3915-5c24-9fbb-350bc98ac708","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap-right","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap-right","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-right"}],"isDefault":false,"monitors":[],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Set Valence Band Maximum","next":"bc3f514c-4bed-521b-85a3-4e0edfdc3585","operand":"VBM_RIGHT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"bc3f514c-4bed-521b-85a3-4e0edfdc3585","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","next":"28bb682d-d287-5beb-8a67-826449c474ee","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"28bb682d-d287-5beb-8a67-826449c474ee","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential-right","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average_potential","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential-right","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-right"}],"isDefault":false,"monitors":[],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},{"_id":"736295e8-2ee0-5974-83bc-362061ac0688","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Find ESP Value (Interface right)","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"generic:processing:find_extrema:scipy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"python-find-extrema-right","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema-right"}],"isDefault":false,"monitors":[],"name":"Set Average ESP Value","operand":"AVG_ESP_RIGHT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Calculate VBO","properties":["valence_band_offset"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Difference of valence band maxima","next":"2626f7bb-d392-5fd4-ab71-329b508de347","operand":"VBM_DIFF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"VBM_LEFT - VBM_RIGHT"},{"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Difference of macroscopically averaged ESP in bulk","next":"b7307787-53e2-599b-ad12-d627b04074b4","operand":"AVG_ESP_DIFF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]"},{"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Lineup of macroscopically averaged ESP in interface","next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","operand":"ESP_LINEUP","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])"},{"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Valence Band Offset","operand":"VALENCE_BAND_OFFSET","postProcessors":[],"preProcessors":[],"results":[{"name":"valence_band_offset"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))"}]}],"units":[{"_id":"9c65d03e-6a30-58f3-947a-f174342be0c3","flowchartId":"fd622b5c-5c02-594e-b582-b245c17ca9a4","isDefault":false,"monitors":[],"name":"BS + Avg ESP (Interface)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7","flowchartId":"ad3b1e4c-5965-5605-a067-dd0c59907c4b","isDefault":false,"monitors":[],"name":"Find ESP Values (Interface)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","flowchartId":"8d5b4734-edfd-55cc-ad80-aaa72487398d","isDefault":false,"monitors":[],"name":"BS + Avg ESP (interface left)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","flowchartId":"102ec582-5b75-52f5-8b39-19ca725ed47a","isDefault":false,"monitors":[],"name":"Find ESP Value (Interface left)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","flowchartId":"603c45db-93aa-54ce-a7fe-6e9b65b0037d","isDefault":false,"monitors":[],"name":"BS + Avg ESP (interface right)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"736295e8-2ee0-5974-83bc-362061ac0688","flowchartId":"e3444d35-cc41-59f5-8481-78d0c383b84e","isDefault":false,"monitors":[],"name":"Find ESP Value (Interface right)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","flowchartId":"0e0b141a-39ca-52bc-9094-e5f96dc72f39","isDefault":false,"monitors":[],"name":"Calculate VBO","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/variable_cell_relaxation.json":{"_id":"c45dcef1-d16b-59d1-9318-cedd0b1acf08","application":{"name":"espresso"},"isDefault":false,"name":"Variable-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Variable-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","systemName":"espresso-variable-cell-relaxation","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"tags":["variable-cell_relaxation"],"units":[{"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","flowchartId":"8f6e9590-6a87-584b-abd7-1fb98253054c","isDefault":false,"monitors":[],"name":"Variable-cell Relaxation","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/wavefunction_amplitude.json":{"_id":"196d364a-5a30-549b-a898-8b9704b50ff1","application":{"name":"espresso"},"isDefault":false,"name":"Wavefunction Amplitude","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude","file_content"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Wavefunction Amplitude","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-scf","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"extract-band-energies","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"band_structure"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"extract-band-energies","head":false,"input":[{"name":"band_structure","scope":"pw-scf"}],"isDefault":false,"monitors":[],"name":"Extract Band Energies","next":"indices-below-fermi","operand":"band_energies","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]"},{"flowchartId":"indices-below-fermi","head":false,"input":[{"name":"fermi_energy","scope":"pw-scf"}],"isDefault":false,"monitors":[],"name":"Find Indices Below Fermi","next":"8771dc7f-878e-5f13-a840-a3a416854f1e","operand":"indices_below_fermi","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]"},{"flowchartId":"8771dc7f-878e-5f13-a840-a3a416854f1e","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Store Band Below EF","next":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","operand":"KBAND_VALUE_BELOW_EF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1"},{"flowchartId":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Select Band","next":"pp-wfn","operand":"KBAND_VALUE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"KBAND_VALUE_BELOW_EF"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_wfn","postProcessors":[],"preProcessors":[],"results":[{"name":"wavefunction_amplitude"}],"schemaVersion":"2022.8.16"},"flowchartId":"pp-wfn","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_wfn.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_wfn","postProcessors":[],"preProcessors":[],"results":[{"name":"wavefunction_amplitude"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Plot Wavefunction","properties":["file_content"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"plot_wavefunction","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"57fca898-8e8b-5ef2-81a5-9d2b612bc18d","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"plot WFN","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"tags":["wfn","wfn_plot"],"units":[{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","flowchartId":"36467db9-279f-52a3-a6ef-ffdc26d875ed","isDefault":false,"monitors":[],"name":"Wavefunction Amplitude","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","flowchartId":"4ce49281-e731-550e-af66-6d2408db8237","isDefault":false,"monitors":[],"name":"Plot Wavefunction","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/zero_point_energy.json":{"_id":"3158c78d-58bb-5675-8c7f-6f2337061015","application":{"name":"espresso"},"isDefault":false,"name":"Zero Point Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Zero Point Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"107595d1-490f-53a2-8432-7f8a12f14d96","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_gamma","postProcessors":[],"preProcessors":[],"results":[{"name":"zero_point_energy"}],"schemaVersion":"2022.8.16"},"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_zpe","postProcessors":[],"preProcessors":[],"results":[{"name":"zero_point_energy"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","flowchartId":"d906bd20-eb92-5a01-a0e2-c81a2d9b2a41","isDefault":false,"monitors":[],"name":"Zero Point Energy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"nwchem/total_energy.json":{"_id":"937fbac8-2dec-5fb1-a46f-b8a0cc3d3d05","application":{"name":"nwchem"},"isDefault":false,"name":"Total Energy","properties":["total_energy","total_energy_contributions"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","application":{"build":"GNU","isDefault":true,"name":"nwchem","schemaVersion":"2022.8.16","shortName":"nwchem","summary":"NWChem","version":"7.0.2"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"pople","type":"localorbital"},"subtype":"gga","type":"dft"},"name":"Total Energy","properties":["total_energy","total_energy_contributions"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"nwchem","schemaVersion":"2022.8.16","shortName":"nwchem","summary":"NWChem","version":"7.0.2"},"context":[],"executable":{"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem","postProcessors":[{"name":"error_handler"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"schemaVersion":"2022.8.16"},"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","flowchartId":"6059d61a-6a92-5657-9130-02208639aff8","isDefault":false,"monitors":[],"name":"Total Energy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/ml/classification_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","application":{"name":"python"},"isDefault":false,"isUsingDataset":true,"name":"Python ML Train Classification","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"schemaVersion":"2022.8.16","units":[{"flowchartId":"head-set-predict-status","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Dataset","next":"head-branch-on-predict-status","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"isDefault":false,"maxOccurrences":100,"monitors":[],"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"flowchartId":"end-of-ml-train-head","head":false,"input":[],"isDefault":false,"monitors":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:random_forest_classification:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:roc_curve:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ROC Curve Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","isDefault":false,"monitors":[],"name":"Set Up the Job","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","isDefault":false,"monitors":[],"name":"Machine Learning","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/ml/clustering_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","application":{"name":"python"},"isDefault":false,"isUsingDataset":true,"name":"Python ML Train Clustering","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"schemaVersion":"2022.8.16","units":[{"flowchartId":"head-set-predict-status","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Dataset","next":"head-branch-on-predict-status","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"isDefault":false,"maxOccurrences":100,"monitors":[],"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"flowchartId":"end-of-ml-train-head","head":false,"input":[],"isDefault":false,"monitors":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:random_forest_classification:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:roc_curve:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ROC Curve Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","isDefault":false,"monitors":[],"name":"Set Up the Job","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","isDefault":false,"monitors":[],"name":"Machine Learning","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/ml/regression_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","application":{"name":"python"},"isDefault":false,"isUsingDataset":true,"name":"Python ML Train Regression","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"schemaVersion":"2022.8.16","units":[{"flowchartId":"head-set-predict-status","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Dataset","next":"head-branch-on-predict-status","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"isDefault":false,"maxOccurrences":100,"monitors":[],"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"flowchartId":"end-of-ml-train-head","head":false,"input":[],"isDefault":false,"monitors":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:multilayer_perceptron:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:parity_plot:matplotlib","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Parity Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","isDefault":false,"monitors":[],"name":"Set Up the Job","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","isDefault":false,"monitors":[],"name":"Machine Learning","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/python_script.json":{"_id":"de816646-766b-5f97-b468-0937d4381440","application":{"name":"python"},"isDefault":false,"name":"Python Script","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Python Script","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","flowchartId":"c50e28b2-a0c5-5324-8b6f-e99b5a546bd8","isDefault":false,"monitors":[],"name":"Python Script","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"shell/batch_espresso_pwscf.json":{"_id":"e0046fb4-37db-5732-bf81-c48e13081a4c","application":{"name":"shell"},"isDefault":false,"name":"Shell Batch Job (Espresso PWSCF)","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Batch Job (Espresso PWSCF)","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"job_espresso_pw_scf","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","flowchartId":"d884e8f7-7acf-5a03-bc9a-186903bdaa0e","isDefault":false,"monitors":[],"name":"Shell Batch Job (Espresso PWSCF)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"shell/hello_world.json":{"_id":"d2fd444c-06b4-5d66-baeb-449c680ae1bf","application":{"name":"shell"},"isDefault":false,"name":"Shell Script","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Hello World","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","flowchartId":"319307c2-bf22-5bf2-b4e9-a4cdf671b786","isDefault":false,"monitors":[],"name":"Shell Hello World","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/band_gap.json":{"_id":"1a358471-0a73-5fcb-ad3c-7a8079029c86","application":{"name":"vasp"},"isDefault":false,"name":"Band Gap","properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Gap","properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"f0d65517-9592-5bc8-948e-a0851a766cbb","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"schemaVersion":"2022.8.16"},"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","flowchartId":"db3b83ea-0ef5-594c-89a8-bde38dbc6105","isDefault":false,"monitors":[],"name":"Band Gap","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/band_structure.json":{"_id":"25b0ad08-87bb-5400-bea4-acd5fe2163c0","application":{"name":"vasp"},"isDefault":false,"name":"Band Structure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","flowchartId":"c573187f-a8bb-5084-9fcf-1560bf4a7786","isDefault":false,"monitors":[],"name":"Band Structure","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/band_structure_dos.json":{"_id":"c8338d40-3c6e-5581-b03c-d7fb5cbb8df5","application":{"name":"vasp"},"isDefault":false,"name":"Band Structure + Density of States","properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"d38fea11-9781-5151-8dae-d705381498be","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure + Density of States","properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"d38fea11-9781-5151-8dae-d705381498be","flowchartId":"8a098bb9-73b1-5e84-bfc7-b783e02d0f53","isDefault":false,"monitors":[],"name":"Band Structure + Density of States","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/dos.json":{"_id":"629a79fb-a03f-5e34-b2ce-9c735e8ef6c0","application":{"name":"vasp"},"isDefault":false,"name":"Density of States","properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Density of States","properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","flowchartId":"3e64fdb4-ab5b-52a0-a1d5-51343c49481c","isDefault":false,"monitors":[],"name":"Density of States","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/fixed_cell_relaxation.json":{"_id":"cb69418c-2f6c-551d-af81-0cf20ec1113d","application":{"name":"vasp"},"isDefault":false,"name":"Fixed-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Fixed-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","postProcessors":[{"name":"prepare_restart"}],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","postProcessors":[{"name":"prepare_restart"}],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","flowchartId":"0de8c4c8-b722-5cd2-ae68-b484262e0a01","isDefault":false,"monitors":[],"name":"Fixed-cell Relaxation","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/kpoint_convergence.json":{"_id":"fcf105f9-5ae7-5c32-a6b3-e3579cbdf39a","application":{"name":"vasp"},"isDefault":false,"name":"K-point Convergence","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"K-point Convergence","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"init-tolerance","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Init tolerance","next":"init-increment","operand":"TOL","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0.00001},{"flowchartId":"init-increment","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init increment","next":"init-result","operand":"INC","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"flowchartId":"init-result","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init result","next":"init-parameter","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0},{"flowchartId":"init-parameter","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init parameter","next":"vasp-kpoint-convergence","operand":"PARAMETER","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"vasp-kpoint-convergence","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","next":"store-result","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"store-result","head":false,"input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"isDefault":false,"monitors":[],"name":"store result","next":"check-convergence","operand":"RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"else":"update-result","flowchartId":"check-convergence","head":false,"input":[],"isDefault":false,"maxOccurrences":50,"monitors":[],"name":"check convergence","next":"update-result","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","status":"idle","statusTrack":[],"tags":[],"then":"convergence-is-reached","type":"condition"},{"flowchartId":"update-result","head":false,"input":[{"name":"RESULT","scope":"global"}],"isDefault":false,"monitors":[],"name":"update result","next":"increment-parameter","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"RESULT"},{"flowchartId":"increment-parameter","head":false,"input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"isDefault":false,"monitors":[],"name":"increment parameter","next":"vasp-kpoint-convergence","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER+INC"},{"flowchartId":"convergence-is-reached","head":false,"input":[{"name":"PARAMETER","scope":"global"}],"isDefault":false,"monitors":[],"name":"exit","operand":"PARAMETER","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER"}]}],"units":[{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","flowchartId":"a34eec2c-cdb2-537d-88c0-ed1d7b205879","isDefault":false,"monitors":[],"name":"K-point Convergence","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/neb.json":{"_id":"2973908e-21ae-5424-afc9-ccb3fde477d8","application":{"name":"vasp"},"isDefault":false,"name":"Nudged Elastic Band (NEB)","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","reaction_energy_barrier","reaction_energy_profile"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"compute":{"arguments":{"nband":1,"ndiag":1,"nimage":1,"npools":1,"ntg":1},"cluster":{"fqdn":""},"isRestartable":true,"nodes":1,"notify":"n","ppn":1,"queue":"D","timeLimit":"01:00:00","timeLimitType":"per single attempt"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Initial/Final Total Energies","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","next":"e65a17ce-10c8-5710-ad4d-fb3d42434091","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"isDraft":false,"isMultiMaterial":true,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Prepare Directories","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bash_vasp_prepare_neb_images","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR <; type RequiredFlavorFields = "input" | "monitors" | "applicationName" | "executableName" | "isDefault"; type OptionalFlavorFields = "results"; -type FlavorConfig = Pick & Pick; +export type FlavorConfig = Pick & Pick; type OptionalExecutableSchema = Partial; type RequiredExecutableFields = "hasAdvancedComputeOptions" | "isDefault" | "monitors" | "results"; type OptionalExecutableFields = "postProcessors"; diff --git a/src/js/application.ts b/src/js/application.ts index b1777968..6dfdaa12 100644 --- a/src/js/application.ts +++ b/src/js/application.ts @@ -7,6 +7,7 @@ import APPLICATION_VERSIONS_MAP from "./runtime_data/applications/applicationVer import EXECUTABLE_FLAVOR_MAP from "./runtime_data/applications/executableFlavorMapByApplication.json"; import TEMPLATES_LIST_RAW from "./runtime_data/applications/templatesList.json"; import { + type ExecutableTreeItem, ApplicationExecutableTree, ApplicationVersionsMapByApplicationType, } from "./types/application"; @@ -248,7 +249,7 @@ export class ApplicationStandata extends Standata { return application; } - getExecutableByName(appName: string, execName?: string) { + getExecutableByName(appName: string, execName?: string): ExecutableTreeItem { const appTree = this.getAppTreeForApplication(appName); const config = @@ -263,15 +264,17 @@ export class ApplicationStandata extends Standata { return config; } + /** + * + * @deprecated use getExecutableByName directly + */ + getExecutableByConfig(appName: string, config?: { name: string }) { + return this.getExecutableByName(appName, config?.name); + } + getExecutableAndFlavorByName(appName: string, execName?: string, flavorName?: string) { const executable = this.getExecutableByName(appName, execName); - const flavor = Object.entries(executable.flavors) - .map(([name, flavor]) => { - return { name, results: [], preProcessors: [], postProcessors: [], ...flavor }; - }) - .find(({ name, isDefault }) => { - return flavorName ? name === flavorName : isDefault; - }); + const flavor = this.getFlavorByName(executable, flavorName); if (!flavor) { throw new Error( @@ -282,6 +285,31 @@ export class ApplicationStandata extends Standata { return { executable, flavor }; } + getFlavorByName(executable: ExecutableTreeItem, name?: string) { + return this.getExecutableFlavors(executable).find((flavor) => + name ? flavor.name === name : flavor.isDefault, + ); + } + + /** + * @deprecated use getFlavorByName directly + */ + getFlavorByConfig(executable: ExecutableTreeItem, config?: { name: string }) { + return this.getFlavorByName(executable, config?.name); + } + + getExecutableFlavors(executable: ExecutableTreeItem): FlavorSchema[] { + return Object.entries(executable.flavors).map(([key, value]) => { + return { + preProcessors: [], + postProcessors: [], + results: [], + ...value, + name: key, + }; + }); + } + getInput(flavor: FlavorSchema): TemplateSchema[] { const appName = flavor.applicationName || ""; const execName = flavor.executableName || ""; diff --git a/src/js/types/application.ts b/src/js/types/application.ts index 4bbcc13f..928b53fa 100644 --- a/src/js/types/application.ts +++ b/src/js/types/application.ts @@ -24,7 +24,7 @@ type RequiredFlavorFields = | "isDefault"; type OptionalFlavorFields = "results"; -type FlavorConfig = Pick & +export type FlavorConfig = Pick & Pick; type OptionalExecutableSchema = Partial; diff --git a/src/py/mat3ra/standata/data/subworkflows.py b/src/py/mat3ra/standata/data/subworkflows.py index 56b29665..d85288c6 100644 --- a/src/py/mat3ra/standata/data/subworkflows.py +++ b/src/py/mat3ra/standata/data/subworkflows.py @@ -1,3 +1,3 @@ import json -subworkflows_data = json.loads(r'''{"standataConfig":{"categories":{"properties":["atomic_forces","average_potential_profile","band_gaps","band_structure","charge_density_profile","density_of_states","dielectric_tensor","fermi_energy","file_content","final_structure","phonon_dispersions","phonon_dos","potential_profile","pressure","reaction_energy_barrier","reaction_energy_profile","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force","valence_band_offset","wavefunction_amplitude","workflow:pyml_predict","zero_point_energy"],"tags":["creates-predictions-csv-during-predict-phase","default","pyml:workflow-type-setter","remove-all-results","set-io-unit-filenames","variable-cell_relaxation","wfn","wfn_plot"],"application":["espresso","nwchem","python","shell","vasp"]},"entities":[{"filename":"espresso/average_electrostatic_potential_find_minima.json","categories":["espresso","python"]},{"filename":"espresso/average_electrostatic_potential_via_band_structure.json","categories":["atomic_forces","average_potential_profile","band_gaps","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/average_electrostatic_potential.json","categories":["atomic_forces","average_potential_profile","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_gap_hse_dos.json","categories":["atomic_forces","band_gaps","density_of_states","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_gap.json","categories":["atomic_forces","band_gaps","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_structure_dos.json","categories":["atomic_forces","band_gaps","band_structure","density_of_states","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_structure_hse.json","categories":["atomic_forces","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_structure_magn.json","categories":["atomic_forces","band_structure","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_structure_soc.json","categories":["atomic_forces","band_structure","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_structure.json","categories":["atomic_forces","band_structure","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/dielectric_tensor.json","categories":["atomic_forces","band_gaps","dielectric_tensor","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/dos.json","categories":["atomic_forces","band_gaps","density_of_states","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/electronic_density_mesh.json","categories":["atomic_forces","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/esm_relax.json","categories":["atomic_forces","charge_density_profile","espresso","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/esm.json","categories":["atomic_forces","charge_density_profile","espresso","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/espresso_extract_kpoints.json","categories":["espresso","python"]},{"filename":"espresso/espresso_xml_get_qpt_irr.json","categories":["espresso"]},{"filename":"espresso/fixed_cell_relaxation.json","categories":["atomic_forces","espresso","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"]},{"filename":"espresso/gw_band_structure_band_gap_full_frequency.json","categories":["atomic_forces","band_gaps","band_structure","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/gw_band_structure_band_gap_plasmon_pole.json","categories":["atomic_forces","band_gaps","band_structure","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/kpoint_convergence.json","categories":["atomic_forces","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_force"]},{"filename":"espresso/neb.json","categories":["espresso","reaction_energy_barrier","reaction_energy_profile"]},{"filename":"espresso/ph_init_qpoints.json","categories":["espresso"]},{"filename":"espresso/ph_single_irr_qpt.json","categories":["espresso"]},{"filename":"espresso/phonon_dispersions.json","categories":["atomic_forces","espresso","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/phonon_dos_dispersion.json","categories":["atomic_forces","espresso","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/phonon_dos.json","categories":["atomic_forces","espresso","fermi_energy","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/phonon_reduce.json","categories":["espresso","phonon_dispersions","phonon_dos"]},{"filename":"espresso/plot_wavefunction.json","categories":["espresso","file_content","python"]},{"filename":"espresso/post_processor.json","categories":["espresso","shell"]},{"filename":"espresso/pre_processor.json","categories":["espresso","shell"]},{"filename":"espresso/pw_scf.json","categories":["atomic_forces","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/recalculate_bands.json","categories":["band_structure","espresso"]},{"filename":"espresso/surface_energy.json","categories":["atomic_forces","espresso","fermi_energy","pressure","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/total_energy.json","categories":["atomic_forces","default","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/valence_band_offset_calc_from_previous_esp_vbm.json","categories":["espresso","valence_band_offset"]},{"filename":"espresso/variable_cell_relaxation.json","categories":["atomic_forces","espresso","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force","variable-cell_relaxation"]},{"filename":"espresso/wavefunction_amplitude.json","categories":["atomic_forces","band_structure","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude","wfn","wfn_plot"]},{"filename":"espresso/zero_point_energy.json","categories":["atomic_forces","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"]},{"filename":"nwchem/total_energy.json","categories":["nwchem","total_energy","total_energy_contributions"]},{"filename":"python/ml/classification_tail.json","categories":["creates-predictions-csv-during-predict-phase","file_content","python","remove-all-results","workflow:pyml_predict"]},{"filename":"python/ml/clustering_tail.json","categories":["creates-predictions-csv-during-predict-phase","file_content","python","remove-all-results","workflow:pyml_predict"]},{"filename":"python/ml/regression_tail.json","categories":["creates-predictions-csv-during-predict-phase","file_content","python","remove-all-results","workflow:pyml_predict"]},{"filename":"python/ml/train_head.json","categories":["pyml:workflow-type-setter","python","set-io-unit-filenames"]},{"filename":"python/python_script.json","categories":["python"]},{"filename":"shell/batch_espresso_pwscf.json","categories":["shell"]},{"filename":"shell/hello_world.json","categories":["shell"]},{"filename":"vasp/band_gap.json","categories":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/band_structure_dos.json","categories":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/band_structure.json","categories":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/dos.json","categories":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/fixed_cell_relaxation.json","categories":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force","vasp"]},{"filename":"vasp/initial_final_total_energies.json","categories":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/kpoint_convergence.json","categories":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/neb_subworkflow.json","categories":["reaction_energy_barrier","reaction_energy_profile","vasp"]},{"filename":"vasp/prepare_images.json","categories":["shell","vasp"]},{"filename":"vasp/recalculate_bands.json","categories":["band_structure","vasp"]},{"filename":"vasp/surface_energy.json","categories":["atomic_forces","fermi_energy","pressure","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/total_energy.json","categories":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/variable_cell_relaxation.json","categories":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force","variable-cell_relaxation","vasp"]},{"filename":"vasp/zero_point_energy.json","categories":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_force","vasp","zero_point_energy"]}]},"filesMapByName":{"espresso/average_electrostatic_potential_find_minima.json":{"_id":"e5bee93f-2b6b-5d91-9a53-5ed309a918d3","name":"Find ESP Value","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Find Extrema","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"python-find-extrema","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"generic:processing:find_extrema:scipy","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/average_electrostatic_potential_via_band_structure.json":{"isMultiMaterial":true,"_id":"09f5f4ff-7dbd-59ae-ad27-5af1bdfc2bd0","name":"Band Structure + average ESP","application":{"name":"espresso"},"properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"name":"Set Material Index","type":"assignment","operand":"MATERIAL_INDEX","value":0,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"2d360607-c739-54ad-97a0-8a83f0971f2c","head":true,"next":"9fc7a088-5533-5f70-bb33-f676ec65f565","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"pw-bands-calculate-band-gap","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a667d9fd-35d5-5897-be0e-fa0247233649","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"pp_electrostatic_potential","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"average-electrostatic-potential","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"average_potential","results":[{"name":"average_potential_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/average_electrostatic_potential.json":{"_id":"7f2f8a38-c3bd-5aa9-b3b0-2c367287dd60","name":"Average Electrostatic Potential","application":{"name":"espresso"},"properties":["atomic_forces","average_potential_profile","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"pp_electrostatic_potential","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"average-electrostatic-potential","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"average_potential","results":[{"name":"average_potential_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_gap_hse_dos.json":{"_id":"f1341a29-777d-5ca3-8933-78a5e0d3f6f2","name":"HSE Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"hybrid","functional":"hse06","method":{"type":"pseudopotential","subtype":"us","data":{}}},"units":[{"type":"execution","name":"pw_scf_hse","head":true,"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f494cdb2-304f-5da2-b979-ce3fbba3a6c4","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf_hse","results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_hse.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = {% if kgrid.dimensions[0]%2 == 0 %}{{kgrid.dimensions[0]/2}}{% else %}{{(kgrid.dimensions[0]+1)/2}}{% endif %}, nqx2 = {% if kgrid.dimensions[1]%2 == 0 %}{{kgrid.dimensions[1]/2}}{% else %}{{(kgrid.dimensions[1]+1)/2}}{% endif %}, nqx3 = {% if kgrid.dimensions[2]%2 == 0 %}{{kgrid.dimensions[2]/2}}{% else %}{{(kgrid.dimensions[2]+1)/2}}{% endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{% if d%2 == 0 %}{{d}} {% else %}{{d+1}} {% endif %}{% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_hse.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"projwfc","results":[{"name":"density_of_states"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_gap.json":{"_id":"233bb8cf-3b4a-5378-84d9-a6a95a2ab43d","name":"Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_nscf","results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_structure_dos.json":{"_id":"fa594399-6b98-5d79-986c-0713601dc06c","name":"Band Structure + Density of States","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"d618df45-5af3-5da5-8882-d74a27e00b04","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_nscf","results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"projwfc","results":[{"name":"density_of_states"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_structure_hse.json":{"_id":"ef3089f3-7460-56f2-9aa2-172d5339d3be","name":"Band Structure - HSE","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"hybrid","functional":"hse06","method":{"type":"pseudopotential","subtype":"us","data":{}}},"units":[{"type":"execution","name":"pw_scf_bands_hse","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"08bd7e4a-2454-53b7-8cc9-9a95975f7e6f","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf_bands_hse","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_bands_hse.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n {% for d in qgrid.dimensions -%}\n nqx{{loop.index}} = {{d}}\n {% endfor %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal\n{{ '{{' }} {{ explicitKPath.length }} {% raw %} + KPOINTS|length {% endraw %} {{ '}}' }}\n{% raw %}\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n{% endraw %}\n{% for point in explicitKPath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}0.0000001\n{% endfor %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPathFormDataManager"}],"executableName":"pw.x","name":"pw_scf_bands_hse.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_structure_magn.json":{"_id":"4a7dced1-224e-57d7-a616-cbad99062c7b","name":"Spin magnetic bandstructure","application":{"name":"espresso"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf_magn","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"c229d2a0-3c19-5f13-b3e0-ceb86cb9fbc1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf_magn","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_magn.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_magn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands_magn","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands_magn","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_magn.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_magn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands_spin_up","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands_spin_up","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_up.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_up.dat'{% endraw %}\n spin_component = 1\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_up.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands_spin_dn","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands_spin_dn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_dn.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_dn.dat'{% endraw %}\n spin_component = 2\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_dn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_structure_soc.json":{"_id":"51e6fb82-538a-58ee-8d4e-991c8446f657","name":"Spin orbit coupling bandstructure","application":{"name":"espresso"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"nc-fr","data":{"searchText":"nc-fr"}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf_soc","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"74ec024a-f247-5f15-9c21-cc169bcb62c7","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf_soc","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_soc.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_soc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands_soc","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands_soc","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_soc.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_soc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_structure.json":{"_id":"26d32e68-c2b5-50e9-8933-15f684fcc039","name":"Band Structure","application":{"name":"espresso"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"d618df45-5af3-5da5-8882-d74a27e00b04","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/dielectric_tensor.json":{"_id":"38340b52-83ad-5862-bc18-c140bdc0cb72","name":"Compute Dielectric Function","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","dielectric_tensor","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"nc","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b230ec3-0791-52f7-a4db-625390b8718f","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set No-Symmetry Flag","type":"assignment","operand":"NO_SYMMETRY_NO_INVERSION","value":true,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"3b230ec3-0791-52f7-a4db-625390b8718f","head":false,"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_nscf","results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Compute dielectric function","head":false,"results":[{"name":"dielectric_tensor"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"epsilon.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"dielectric_tensor","results":[{"name":"dielectric_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"epsilon.x","input":[{"name":"epsilon.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n","contextProviders":[],"executableName":"epsilon.x","name":"epsilon.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/dos.json":{"_id":"2cf317f3-3306-5a96-bc9b-e9103ebcd5be","name":"Density of States","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_nscf","results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"projwfc","results":[{"name":"density_of_states"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/electronic_density_mesh.json":{"_id":"e2749c5a-fcd9-589c-819b-8b88c5c90924","name":"Electronic Density Mesh","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pp_density","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"pp_density","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_density.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_density.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/esm_relax.json":{"_id":"69728792-afeb-50aa-9b4e-6974a90f676a","name":"Effective Screening Medium (ESM) Relax","application":{"name":"espresso"},"properties":["atomic_forces","charge_density_profile","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_esm_relax","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"a2bec506-1fdd-5125-a787-85f31cde20c1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_esm_relax","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm_relax.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/esm.json":{"_id":"0de669f6-a455-5dae-b331-19dc85f7090f","name":"Effective Screening Medium (ESM)","application":{"name":"espresso"},"properties":["atomic_forces","charge_density_profile","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_esm","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"2f487bc6-c237-53e4-bad5-be60369662cb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_esm","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/espresso_extract_kpoints.json":{"_id":"a2785cc5-2427-5c7a-b30f-7077475b948c","name":"Extract KPOINTS","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Extract kpoints","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"a716b133-2d04-50b5-b497-100265e3fa24","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"espresso_extract_kpoints","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"espresso_extract_kpoints.py"},{"name":"requirements.txt","templateName":"requirements_empty.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_extract_kpoints.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/espresso_xml_get_qpt_irr.json":{"_id":"e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a","name":"espresso-xml-get-qpt-irr","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[],"schemaVersion":"2022.8.16","isDraft":false},"espresso/fixed_cell_relaxation.json":{"_id":"fb75e249-5489-5146-bd8a-786d33330d9c","name":"Fixed-cell Relaxation","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"c42871f6-ab79-5987-b228-c3bd80f16ffd","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_relax","results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_relax.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/gw_band_structure_band_gap_full_frequency.json":{"_id":"46bcdcc8-628e-518e-b8c3-9bf38d7a2aef","name":"Full Frequency GW Band Structure + Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{"searchText":".*dojo-oncv.*"}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"gw_bands_full_frequency","head":false,"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"gw.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"gw_bands_full_frequency","results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_full_frequency.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_full_frequency.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/gw_band_structure_band_gap_plasmon_pole.json":{"_id":"72b79a87-8eef-5fe2-9d6c-6c9c256dd56c","name":"Plasmon-Pole GW Band Structure + Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{"searchText":".*dojo-oncv.*"}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"gw_bands_plasmon_pole","head":false,"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"gw.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"gw_bands_plasmon_pole","results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_plasmon_pole.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_plasmon_pole.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/kpoint_convergence.json":{"_id":"ff6a8fbc-2202-5786-9a26-67c843417d0b","name":"K-point Convergence","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-tolerance","head":true,"next":"init-increment","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-increment","head":false,"next":"init-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-result","head":false,"next":"init-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-parameter","head":false,"next":"pwscf-kpoint-convergence","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"pwscf-kpoint-convergence","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf_kpt_conv","results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_kpt_conv.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0{% endraw %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_kpt_conv.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"store-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"pwscf-kpoint-convergence"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"store-result","head":false,"next":"check-convergence","schemaVersion":"2022.8.16","isDefault":false},{"name":"check convergence","type":"condition","input":[],"statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"check-convergence","then":"convergence-is-reached","else":"update-result","head":false,"next":"update-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"update-result","head":false,"next":"increment-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"increment-parameter","next":"pwscf-kpoint-convergence","head":false,"schemaVersion":"2022.8.16","isDefault":false},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"convergence-is-reached","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/neb.json":{"isMultiMaterial":true,"_id":"c9034468-df28-5357-8912-02226f919042","name":"Nudged Elastic Band (NEB)","application":{"name":"espresso"},"properties":["reaction_energy_barrier","reaction_energy_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"neb","head":true,"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9f273ca0-d240-5b1f-89a9-64dd579304ac","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"neb.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"neb","results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"neb.x","input":[{"name":"neb.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = {{ 2 + (input.INTERMEDIATE_IMAGES.length or neb.nImages) }},\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_first = false %}\n{%- for position in input.FIRST_IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_first = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.FIRST_IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_first %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n{%- for IMAGE in input.INTERMEDIATE_IMAGES %}\nINTERMEDIATE_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_intermediate = false %}\n{%- for position in IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_intermediate = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_intermediate %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n{%- endfor %}\nLAST_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_last = false %}\n{%- for position in input.LAST_IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_last = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.LAST_IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_last %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nEND_POSITIONS\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nEND_ENGINE_INPUT\nEND\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"NEBFormDataManager"},{"name":"QENEBInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"neb.x","name":"neb.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/ph_init_qpoints.json":{"_id":"2f017bcb-f4ba-55b8-b939-1f780679a88e","name":"ph-init-qpoints","application":{"name":"espresso"},"properties":[],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"ph_init_qpoints","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"b8ea6a33-38f3-5434-b17e-b5eae8fff9fc","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_init_qpoints","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_init_qpoints.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_init_qpoints.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/ph_single_irr_qpt.json":{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","name":"ph-single-irr-qpt","application":{"name":"espresso"},"properties":[],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"ph_single_irr_qpt","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"8db9af08-d935-57a0-a824-e7db6d936de8","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_single_irr_qpt","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_single_irr_qpt.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_single_irr_qpt.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/phonon_dispersions.json":{"_id":"bfb69b48-8fbf-5a0d-8949-448f20754766","name":"Phonon Dispersions","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"13bcafce-56ef-5b47-b079-317495eb6933","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_grid","results":[{"name":"phonon_dos"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"q2r","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"matdyn_path","results":[{"name":"phonon_dispersions"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/phonon_dos_dispersion.json":{"_id":"291d25cd-378a-5be7-9d85-c8013a4b165b","name":"Phonon Density of States + Dispersions","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"13bcafce-56ef-5b47-b079-317495eb6933","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_grid","results":[{"name":"phonon_dos"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"q2r","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"matdyn_grid","results":[{"name":"phonon_dos"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"matdyn_path","results":[{"name":"phonon_dispersions"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/phonon_dos.json":{"_id":"2232051b-9f2a-5a48-9b4d-6231eb6e8297","name":"Phonon Density of States","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"13bcafce-56ef-5b47-b079-317495eb6933","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_grid","results":[{"name":"phonon_dos"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"q2r","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"matdyn_grid","results":[{"name":"phonon_dos"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/phonon_reduce.json":{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","name":"reduce","application":{"name":"espresso"},"properties":["phonon_dispersions","phonon_dos"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"ph_grid_restart","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb206177-a4af-599a-81ba-6c88d24253b6","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_grid_restart","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid_restart.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid_restart.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"q2r","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"matdyn_grid","results":[{"name":"phonon_dos"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"matdyn_path","results":[{"name":"phonon_dispersions"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/plot_wavefunction.json":{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","name":"Plot Wavefunction","application":{"name":"espresso"},"properties":["file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"plot WFN","head":true,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"57fca898-8e8b-5ef2-81a5-9d2b612bc18d","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"plot_wavefunction","results":[{"name":"file_content"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/post_processor.json":{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","name":"post-processor","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"name":"espresso_collect_dynmat","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_collect_dynmat.sh"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_collect_dynmat.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/pre_processor.json":{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","name":"pre-processor","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"name":"espresso_link_outdir_save","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_link_outdir_save.sh"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_link_outdir_save.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/pw_scf.json":{"_id":"f52b8039-83d0-5485-a1f1-0bc37cb01ed3","name":"pw-scf","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/recalculate_bands.json":{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","name":"Recalculate Bands","application":{"name":"espresso"},"properties":["band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_bands","head":true,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/surface_energy.json":{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","name":"Surface Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/total_energy.json":{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","name":"Total Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false,"tags":["default"]},"espresso/valence_band_offset_calc_from_previous_esp_vbm.json":{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","name":"Calculate VBO","application":{"name":"espresso"},"properties":["valence_band_offset"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Difference of valence band maxima","type":"assignment","operand":"VBM_DIFF","value":"VBM_LEFT - VBM_RIGHT","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","head":true,"next":"2626f7bb-d392-5fd4-ab71-329b508de347","schemaVersion":"2022.8.16","isDefault":false},{"name":"Difference of macroscopically averaged ESP in bulk","type":"assignment","operand":"AVG_ESP_DIFF","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","head":false,"next":"b7307787-53e2-599b-ad12-d627b04074b4","schemaVersion":"2022.8.16","isDefault":false},{"name":"Lineup of macroscopically averaged ESP in interface","type":"assignment","operand":"ESP_LINEUP","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","head":false,"next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","schemaVersion":"2022.8.16","isDefault":false},{"name":"Valence Band Offset","type":"assignment","operand":"VALENCE_BAND_OFFSET","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))","input":[],"results":[{"name":"valence_band_offset"}],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/variable_cell_relaxation.json":{"systemName":"espresso-variable-cell-relaxation","_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","name":"Variable-cell Relaxation","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_vc-relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_vc-relax","results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false,"tags":["variable-cell_relaxation"]},"espresso/wavefunction_amplitude.json":{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","name":"Wavefunction Amplitude","application":{"name":"espresso"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"band_structure"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"pw-scf","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"extract-band-energies","schemaVersion":"2022.8.16","isDefault":false},{"name":"Extract Band Energies","type":"assignment","operand":"band_energies","value":"[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]","input":[{"name":"band_structure","scope":"pw-scf"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"extract-band-energies","head":false,"next":"indices-below-fermi","schemaVersion":"2022.8.16","isDefault":false},{"name":"Find Indices Below Fermi","type":"assignment","operand":"indices_below_fermi","value":"[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]","input":[{"name":"fermi_energy","scope":"pw-scf"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"indices-below-fermi","head":false,"next":"8771dc7f-878e-5f13-a840-a3a416854f1e","schemaVersion":"2022.8.16","isDefault":false},{"name":"Store Band Below EF","type":"assignment","operand":"KBAND_VALUE_BELOW_EF","value":"indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8771dc7f-878e-5f13-a840-a3a416854f1e","head":false,"next":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select Band","type":"assignment","operand":"KBAND_VALUE","value":"KBAND_VALUE_BELOW_EF","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","head":false,"next":"pp-wfn","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pp_wfn","head":false,"results":[{"name":"wavefunction_amplitude"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pp-wfn","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"pp_wfn","results":[{"name":"wavefunction_amplitude"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_wfn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false,"tags":["wfn","wfn_plot"]},"espresso/zero_point_energy.json":{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","name":"Zero Point Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"107595d1-490f-53a2-8432-7f8a12f14d96","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_zpe","head":false,"results":[{"name":"zero_point_energy"}],"monitors":[{"name":"standard_output"}],"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_gamma","results":[{"name":"zero_point_energy"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"nwchem/total_energy.json":{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","name":"Total Energy","application":{"name":"nwchem"},"properties":["total_energy","total_energy_contributions"],"model":{"type":"dft","subtype":"gga","method":{"type":"localorbital","subtype":"pople","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"nwchem_total_energy","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"nwchem","shortName":"nwchem","summary":"NWChem","build":"GNU","isDefault":true,"version":"7.0.2","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"}],"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem","schemaVersion":"2022.8.16"},"flavor":{"name":"nwchem_total_energy","results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"preProcessors":[],"postProcessors":[],"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"python/ml/classification_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:setup_variables_packages","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:read_csv:pandas","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:train_test_split:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:pre_processing:standardization:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:model:random_forest_classification:sklearn","results":[{"name":"workflow:pyml_predict"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ROC Curve Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:post_processing:roc_curve:sklearn","results":[{"name":"file_content"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"python/ml/clustering_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:setup_variables_packages","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:read_csv:pandas","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:train_test_split:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:pre_processing:standardization:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:model:k_means_clustering:sklearn","results":[{"name":"workflow:pyml_predict"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"model_k_means_clustering_sklearn.py","templateName":"model_k_means_clustering_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_k_means_clustering_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"9c95c27b-c8bd-5e8b-8829-d354611decef","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"2D PCA Clusters Plot","head":false,"results":[{"name":"file_content"},{"name":"file_content"},{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9c95c27b-c8bd-5e8b-8829-d354611decef","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:post_processing:pca_2d_clusters:matplotlib","results":[{"name":"file_content"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_pca_2d_clusters_matplotlib.py","templateName":"post_processing_pca_2d_clusters_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_pca_2d_clusters_matplotlib.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"python/ml/regression_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:setup_variables_packages","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:read_csv:pandas","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:train_test_split:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:pre_processing:standardization:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:model:multilayer_perceptron:sklearn","results":[{"name":"workflow:pyml_predict"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Parity Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:post_processing:parity_plot:matplotlib","results":[{"name":"file_content"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"python/ml/train_head.json":{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"flowchartId":"head-set-predict-status","head":true,"next":"head-fetch-training-data","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Dataset","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"type":"object_storage","basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"head-branch-on-predict-status","schemaVersion":"2022.8.16","isDefault":false},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","then":"head-fetch-trained-model","head":false,"next":"head-fetch-trained-model","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["set-io-unit-filenames"],"enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"type":"object_storage","basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"end-of-ml-train-head","schemaVersion":"2022.8.16","isDefault":false},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"end-of-ml-train-head","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"python/python_script.json":{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","name":"Python Script","application":{"name":"python"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"python","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"hello_world","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"shell/batch_espresso_pwscf.json":{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","name":"Shell Batch Job (Espresso PWSCF)","application":{"name":"shell"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"name":"job_espresso_pw_scf","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"shell/hello_world.json":{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","name":"Shell Hello World","application":{"name":"shell"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"name":"hello_world","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/band_gap.json":{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","name":"Band Gap","application":{"name":"vasp"},"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"f0d65517-9592-5bc8-948e-a0851a766cbb","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_nscf","head":false,"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_nscf","results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/band_structure_dos.json":{"_id":"d38fea11-9781-5151-8dae-d705381498be","name":"Band Structure + Density of States","application":{"name":"vasp"},"properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/band_structure.json":{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","name":"Band Structure","application":{"name":"vasp"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/dos.json":{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","name":"Density of States","application":{"name":"vasp"},"properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/fixed_cell_relaxation.json":{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","name":"Fixed-cell Relaxation","application":{"name":"vasp"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_relax","head":true,"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_relax","results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/initial_final_total_energies.json":{"isMultiMaterial":true,"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","name":"Initial/Final Total Energies","application":{"name":"vasp"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_neb_initial","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_neb_initial","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"e65a17ce-10c8-5710-ad4d-fb3d42434091","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_neb_final","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_neb_final","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"compute":{"ppn":1,"nodes":1,"queue":"D","timeLimit":"01:00:00","notify":"n","cluster":{"fqdn":""},"timeLimitType":"per single attempt","isRestartable":true,"arguments":{"nimage":1,"npools":1,"nband":1,"ntg":1,"ndiag":1}},"schemaVersion":"2022.8.16","isDraft":false},"vasp/kpoint_convergence.json":{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","name":"K-point Convergence","application":{"name":"vasp"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-tolerance","head":true,"next":"init-increment","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-increment","head":false,"next":"init-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-result","head":false,"next":"init-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-parameter","head":false,"next":"vasp-kpoint-convergence","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"vasp-kpoint-convergence","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_kpt_conv","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"store-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"store-result","head":false,"next":"check-convergence","schemaVersion":"2022.8.16","isDefault":false},{"name":"check convergence","type":"condition","input":[],"statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"check-convergence","then":"convergence-is-reached","else":"update-result","head":false,"next":"update-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"update-result","head":false,"next":"increment-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"increment-parameter","next":"vasp-kpoint-convergence","head":false,"schemaVersion":"2022.8.16","isDefault":false},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"convergence-is-reached","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/neb_subworkflow.json":{"isMultiMaterial":true,"_id":"e6215fb9-e60c-541b-b73e-b077d64b3a95","name":"Nudged Elastic Band (NEB)","application":{"name":"vasp"},"properties":["reaction_energy_barrier","reaction_energy_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_neb","head":true,"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9a1660ab-8067-5fad-9fb8-7c039f634636","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_neb","results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB"},{"name":"KPOINTS","templateName":"KPOINTS"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nIBRION = 1\nEDIFFG = -0.001\nENCUT = 500\nNELM = 100\nNSW = 100\nIMAGES = {{ input.INTERMEDIATE_IMAGES.length or neb.nImages }}\nSPRING = -5\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/prepare_images.json":{"isMultiMaterial":true,"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","name":"Prepare Directories","application":{"name":"vasp"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"prepare-neb-images","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"name":"bash_vasp_prepare_neb_images","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR <=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/average_electrostatic_potential_via_band_structure.json":{"isMultiMaterial":true,"_id":"09f5f4ff-7dbd-59ae-ad27-5af1bdfc2bd0","name":"Band Structure + average ESP","application":{"name":"espresso"},"properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"name":"Set Material Index","type":"assignment","operand":"MATERIAL_INDEX","value":0,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"2d360607-c739-54ad-97a0-8a83f0971f2c","head":true,"next":"9fc7a088-5533-5f70-bb33-f676ec65f565","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"pw-bands-calculate-band-gap","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a667d9fd-35d5-5897-be0e-fa0247233649","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"average-electrostatic-potential","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"average_potential_profile"}],"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"name":"average_potential","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/average_electrostatic_potential.json":{"_id":"7f2f8a38-c3bd-5aa9-b3b0-2c367287dd60","name":"Average Electrostatic Potential","application":{"name":"espresso"},"properties":["atomic_forces","average_potential_profile","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"average-electrostatic-potential","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"average_potential_profile"}],"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"name":"average_potential","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_gap_hse_dos.json":{"_id":"f1341a29-777d-5ca3-8933-78a5e0d3f6f2","name":"HSE Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"hybrid","functional":"hse06","method":{"type":"pseudopotential","subtype":"us","data":{}}},"units":[{"type":"execution","name":"pw_scf_hse","head":true,"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f494cdb2-304f-5da2-b979-ce3fbba3a6c4","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_hse.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_hse","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = {% if kgrid.dimensions[0]%2 == 0 %}{{kgrid.dimensions[0]/2}}{% else %}{{(kgrid.dimensions[0]+1)/2}}{% endif %}, nqx2 = {% if kgrid.dimensions[1]%2 == 0 %}{{kgrid.dimensions[1]/2}}{% else %}{{(kgrid.dimensions[1]+1)/2}}{% endif %}, nqx3 = {% if kgrid.dimensions[2]%2 == 0 %}{{kgrid.dimensions[2]/2}}{% else %}{{(kgrid.dimensions[2]+1)/2}}{% endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{% if d%2 == 0 %}{{d}} {% else %}{{d+1}} {% endif %}{% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_hse.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"density_of_states"}],"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":[{"name":"standard_output"}],"name":"projwfc","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_gap.json":{"_id":"233bb8cf-3b4a-5378-84d9-a6a95a2ab43d","name":"Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_nscf","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_structure_dos.json":{"_id":"fa594399-6b98-5d79-986c-0713601dc06c","name":"Band Structure + Density of States","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"d618df45-5af3-5da5-8882-d74a27e00b04","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_nscf","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"density_of_states"}],"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":[{"name":"standard_output"}],"name":"projwfc","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_structure_hse.json":{"_id":"ef3089f3-7460-56f2-9aa2-172d5339d3be","name":"Band Structure - HSE","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"hybrid","functional":"hse06","method":{"type":"pseudopotential","subtype":"us","data":{}}},"units":[{"type":"execution","name":"pw_scf_bands_hse","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"08bd7e4a-2454-53b7-8cc9-9a95975f7e6f","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_bands_hse.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_bands_hse","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n {% for d in qgrid.dimensions -%}\n nqx{{loop.index}} = {{d}}\n {% endfor %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal\n{{ '{{' }} {{ explicitKPath.length }} {% raw %} + KPOINTS|length {% endraw %} {{ '}}' }}\n{% raw %}\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n{% endraw %}\n{% for point in explicitKPath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}0.0000001\n{% endfor %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPathFormDataManager"}],"executableName":"pw.x","name":"pw_scf_bands_hse.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_structure_magn.json":{"_id":"4a7dced1-224e-57d7-a616-cbad99062c7b","name":"Spin magnetic bandstructure","application":{"name":"espresso"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf_magn","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"c229d2a0-3c19-5f13-b3e0-ceb86cb9fbc1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_magn.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_magn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_magn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands_magn","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_magn.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands_magn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_magn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands_spin_up","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_up.in"}],"monitors":[{"name":"standard_output"}],"name":"bands_spin_up","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_up.dat'{% endraw %}\n spin_component = 1\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_up.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands_spin_dn","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_dn.in"}],"monitors":[{"name":"standard_output"}],"name":"bands_spin_dn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_dn.dat'{% endraw %}\n spin_component = 2\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_dn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_structure_soc.json":{"_id":"51e6fb82-538a-58ee-8d4e-991c8446f657","name":"Spin orbit coupling bandstructure","application":{"name":"espresso"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"nc-fr","data":{"searchText":"nc-fr"}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf_soc","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"74ec024a-f247-5f15-9c21-cc169bcb62c7","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_soc.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_soc","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_soc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands_soc","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_soc.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands_soc","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_soc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_structure.json":{"_id":"26d32e68-c2b5-50e9-8933-15f684fcc039","name":"Band Structure","application":{"name":"espresso"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"d618df45-5af3-5da5-8882-d74a27e00b04","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/dielectric_tensor.json":{"_id":"38340b52-83ad-5862-bc18-c140bdc0cb72","name":"Compute Dielectric Function","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","dielectric_tensor","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"nc","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b230ec3-0791-52f7-a4db-625390b8718f","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set No-Symmetry Flag","type":"assignment","operand":"NO_SYMMETRY_NO_INVERSION","value":true,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"3b230ec3-0791-52f7-a4db-625390b8718f","head":false,"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_nscf","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Compute dielectric function","head":false,"results":[{"name":"dielectric_tensor"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"epsilon.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"dielectric_tensor"}],"applicationName":"espresso","executableName":"epsilon.x","input":[{"name":"epsilon.in"}],"monitors":[{"name":"standard_output"}],"name":"dielectric_tensor","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n","contextProviders":[],"executableName":"epsilon.x","name":"epsilon.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/dos.json":{"_id":"2cf317f3-3306-5a96-bc9b-e9103ebcd5be","name":"Density of States","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_nscf","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"density_of_states"}],"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":[{"name":"standard_output"}],"name":"projwfc","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/electronic_density_mesh.json":{"_id":"e2749c5a-fcd9-589c-819b-8b88c5c90924","name":"Electronic Density Mesh","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pp_density","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_density.in"}],"monitors":[{"name":"standard_output"}],"name":"pp_density","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_density.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/esm_relax.json":{"_id":"69728792-afeb-50aa-9b4e-6974a90f676a","name":"Effective Screening Medium (ESM) Relax","application":{"name":"espresso"},"properties":["atomic_forces","charge_density_profile","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_esm_relax","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"a2bec506-1fdd-5125-a787-85f31cde20c1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_esm_relax","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm_relax.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/esm.json":{"_id":"0de669f6-a455-5dae-b331-19dc85f7090f","name":"Effective Screening Medium (ESM)","application":{"name":"espresso"},"properties":["atomic_forces","charge_density_profile","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_esm","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"2f487bc6-c237-53e4-bad5-be60369662cb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_esm","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/espresso_extract_kpoints.json":{"_id":"a2785cc5-2427-5c7a-b30f-7077475b948c","name":"Extract KPOINTS","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Extract kpoints","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"a716b133-2d04-50b5-b497-100265e3fa24","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"espresso_extract_kpoints.py"},{"name":"requirements.txt","templateName":"requirements_empty.txt"}],"monitors":[{"name":"standard_output"}],"name":"espresso_extract_kpoints","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_extract_kpoints.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/espresso_xml_get_qpt_irr.json":{"_id":"e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a","name":"espresso-xml-get-qpt-irr","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[],"schemaVersion":"2022.8.16","isDraft":false},"espresso/fixed_cell_relaxation.json":{"_id":"fb75e249-5489-5146-bd8a-786d33330d9c","name":"Fixed-cell Relaxation","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"c42871f6-ab79-5987-b228-c3bd80f16ffd","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_relax","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_relax.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/gw_band_structure_band_gap_full_frequency.json":{"_id":"46bcdcc8-628e-518e-b8c3-9bf38d7a2aef","name":"Full Frequency GW Band Structure + Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{"searchText":".*dojo-oncv.*"}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"gw_bands_full_frequency","head":false,"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"gw.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_full_frequency.in"}],"monitors":[{"name":"standard_output"}],"name":"gw_bands_full_frequency","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_full_frequency.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/gw_band_structure_band_gap_plasmon_pole.json":{"_id":"72b79a87-8eef-5fe2-9d6c-6c9c256dd56c","name":"Plasmon-Pole GW Band Structure + Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{"searchText":".*dojo-oncv.*"}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"gw_bands_plasmon_pole","head":false,"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"gw.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_plasmon_pole.in"}],"monitors":[{"name":"standard_output"}],"name":"gw_bands_plasmon_pole","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_plasmon_pole.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/kpoint_convergence.json":{"_id":"ff6a8fbc-2202-5786-9a26-67c843417d0b","name":"K-point Convergence","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-tolerance","head":true,"next":"init-increment","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-increment","head":false,"next":"init-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-result","head":false,"next":"init-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-parameter","head":false,"next":"pwscf-kpoint-convergence","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"pwscf-kpoint-convergence","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_kpt_conv.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_kpt_conv","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0{% endraw %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_kpt_conv.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"store-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"pwscf-kpoint-convergence"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"store-result","head":false,"next":"check-convergence","schemaVersion":"2022.8.16","isDefault":false},{"name":"check convergence","type":"condition","input":[],"statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"check-convergence","then":"convergence-is-reached","else":"update-result","head":false,"next":"update-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"update-result","head":false,"next":"increment-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"increment-parameter","next":"pwscf-kpoint-convergence","head":false,"schemaVersion":"2022.8.16","isDefault":false},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"convergence-is-reached","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/neb.json":{"isMultiMaterial":true,"_id":"c9034468-df28-5357-8912-02226f919042","name":"Nudged Elastic Band (NEB)","application":{"name":"espresso"},"properties":["reaction_energy_barrier","reaction_energy_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"neb","head":true,"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9f273ca0-d240-5b1f-89a9-64dd579304ac","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"neb.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"applicationName":"espresso","executableName":"neb.x","input":[{"name":"neb.in"}],"monitors":[{"name":"standard_output"}],"name":"neb","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = {{ 2 + (input.INTERMEDIATE_IMAGES.length or neb.nImages) }},\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_first = false %}\n{%- for position in input.FIRST_IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_first = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.FIRST_IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_first %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n{%- for IMAGE in input.INTERMEDIATE_IMAGES %}\nINTERMEDIATE_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_intermediate = false %}\n{%- for position in IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_intermediate = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_intermediate %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n{%- endfor %}\nLAST_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_last = false %}\n{%- for position in input.LAST_IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_last = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.LAST_IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_last %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nEND_POSITIONS\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nEND_ENGINE_INPUT\nEND\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"NEBFormDataManager"},{"name":"QENEBInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"neb.x","name":"neb.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/ph_init_qpoints.json":{"_id":"2f017bcb-f4ba-55b8-b939-1f780679a88e","name":"ph-init-qpoints","application":{"name":"espresso"},"properties":[],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"ph_init_qpoints","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"b8ea6a33-38f3-5434-b17e-b5eae8fff9fc","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_init_qpoints.in"}],"monitors":[{"name":"standard_output"}],"name":"ph_init_qpoints","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_init_qpoints.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/ph_single_irr_qpt.json":{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","name":"ph-single-irr-qpt","application":{"name":"espresso"},"properties":[],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"ph_single_irr_qpt","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"8db9af08-d935-57a0-a824-e7db6d936de8","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_single_irr_qpt.in"}],"monitors":[{"name":"standard_output"}],"name":"ph_single_irr_qpt","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_single_irr_qpt.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/phonon_dispersions.json":{"_id":"bfb69b48-8fbf-5a0d-8949-448f20754766","name":"Phonon Dispersions","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"13bcafce-56ef-5b47-b079-317495eb6933","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dos"}],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":[{"name":"standard_output"}],"name":"ph_grid","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dispersions"}],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_path","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/phonon_dos_dispersion.json":{"_id":"291d25cd-378a-5be7-9d85-c8013a4b165b","name":"Phonon Density of States + Dispersions","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"13bcafce-56ef-5b47-b079-317495eb6933","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dos"}],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":[{"name":"standard_output"}],"name":"ph_grid","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dos"}],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dispersions"}],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_path","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/phonon_dos.json":{"_id":"2232051b-9f2a-5a48-9b4d-6231eb6e8297","name":"Phonon Density of States","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"13bcafce-56ef-5b47-b079-317495eb6933","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dos"}],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":[{"name":"standard_output"}],"name":"ph_grid","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dos"}],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/phonon_reduce.json":{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","name":"reduce","application":{"name":"espresso"},"properties":["phonon_dispersions","phonon_dos"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"ph_grid_restart","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb206177-a4af-599a-81ba-6c88d24253b6","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid_restart.in"}],"monitors":[{"name":"standard_output"}],"name":"ph_grid_restart","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid_restart.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dos"}],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dispersions"}],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_path","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/plot_wavefunction.json":{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","name":"Plot Wavefunction","application":{"name":"espresso"},"properties":["file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"plot WFN","head":true,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"57fca898-8e8b-5ef2-81a5-9d2b612bc18d","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"file_content"}],"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"monitors":[{"name":"standard_output"}],"name":"plot_wavefunction","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/post_processor.json":{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","name":"post-processor","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_collect_dynmat.sh"}],"monitors":[{"name":"standard_output"}],"name":"espresso_collect_dynmat","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_collect_dynmat.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/pre_processor.json":{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","name":"pre-processor","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_link_outdir_save.sh"}],"monitors":[{"name":"standard_output"}],"name":"espresso_link_outdir_save","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_link_outdir_save.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/pw_scf.json":{"_id":"f52b8039-83d0-5485-a1f1-0bc37cb01ed3","name":"pw-scf","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/recalculate_bands.json":{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","name":"Recalculate Bands","application":{"name":"espresso"},"properties":["band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_bands","head":true,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/surface_energy.json":{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","name":"Surface Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/total_energy.json":{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","name":"Total Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false,"tags":["default"]},"espresso/valence_band_offset_calc_from_previous_esp_vbm.json":{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","name":"Calculate VBO","application":{"name":"espresso"},"properties":["valence_band_offset"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Difference of valence band maxima","type":"assignment","operand":"VBM_DIFF","value":"VBM_LEFT - VBM_RIGHT","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","head":true,"next":"2626f7bb-d392-5fd4-ab71-329b508de347","schemaVersion":"2022.8.16","isDefault":false},{"name":"Difference of macroscopically averaged ESP in bulk","type":"assignment","operand":"AVG_ESP_DIFF","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","head":false,"next":"b7307787-53e2-599b-ad12-d627b04074b4","schemaVersion":"2022.8.16","isDefault":false},{"name":"Lineup of macroscopically averaged ESP in interface","type":"assignment","operand":"ESP_LINEUP","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","head":false,"next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","schemaVersion":"2022.8.16","isDefault":false},{"name":"Valence Band Offset","type":"assignment","operand":"VALENCE_BAND_OFFSET","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))","input":[],"results":[{"name":"valence_band_offset"}],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/variable_cell_relaxation.json":{"systemName":"espresso-variable-cell-relaxation","_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","name":"Variable-cell Relaxation","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_vc-relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false,"tags":["variable-cell_relaxation"]},"espresso/wavefunction_amplitude.json":{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","name":"Wavefunction Amplitude","application":{"name":"espresso"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"band_structure"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"pw-scf","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"extract-band-energies","schemaVersion":"2022.8.16","isDefault":false},{"name":"Extract Band Energies","type":"assignment","operand":"band_energies","value":"[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]","input":[{"name":"band_structure","scope":"pw-scf"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"extract-band-energies","head":false,"next":"indices-below-fermi","schemaVersion":"2022.8.16","isDefault":false},{"name":"Find Indices Below Fermi","type":"assignment","operand":"indices_below_fermi","value":"[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]","input":[{"name":"fermi_energy","scope":"pw-scf"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"indices-below-fermi","head":false,"next":"8771dc7f-878e-5f13-a840-a3a416854f1e","schemaVersion":"2022.8.16","isDefault":false},{"name":"Store Band Below EF","type":"assignment","operand":"KBAND_VALUE_BELOW_EF","value":"indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8771dc7f-878e-5f13-a840-a3a416854f1e","head":false,"next":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select Band","type":"assignment","operand":"KBAND_VALUE","value":"KBAND_VALUE_BELOW_EF","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","head":false,"next":"pp-wfn","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pp_wfn","head":false,"results":[{"name":"wavefunction_amplitude"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pp-wfn","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"wavefunction_amplitude"}],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"monitors":[{"name":"standard_output"}],"name":"pp_wfn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_wfn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false,"tags":["wfn","wfn_plot"]},"espresso/zero_point_energy.json":{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","name":"Zero Point Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"107595d1-490f-53a2-8432-7f8a12f14d96","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_zpe","head":false,"results":[{"name":"zero_point_energy"}],"monitors":[{"name":"standard_output"}],"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"zero_point_energy"}],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"monitors":[{"name":"standard_output"}],"name":"ph_gamma","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"nwchem/total_energy.json":{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","name":"Total Energy","application":{"name":"nwchem"},"properties":["total_energy","total_energy_contributions"],"model":{"type":"dft","subtype":"gga","method":{"type":"localorbital","subtype":"pople","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"nwchem_total_energy","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"nwchem","shortName":"nwchem","summary":"NWChem","build":"GNU","isDefault":true,"version":"7.0.2","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"}],"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"python/ml/classification_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:model:random_forest_classification:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ROC Curve Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"file_content"}],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:roc_curve:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"python/ml/clustering_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"applicationName":"python","executableName":"python","input":[{"name":"model_k_means_clustering_sklearn.py","templateName":"model_k_means_clustering_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:model:k_means_clustering:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_k_means_clustering_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"9c95c27b-c8bd-5e8b-8829-d354611decef","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"2D PCA Clusters Plot","head":false,"results":[{"name":"file_content"},{"name":"file_content"},{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9c95c27b-c8bd-5e8b-8829-d354611decef","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"file_content"}],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_pca_2d_clusters_matplotlib.py","templateName":"post_processing_pca_2d_clusters_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:pca_2d_clusters:matplotlib","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_pca_2d_clusters_matplotlib.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"python/ml/regression_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:model:multilayer_perceptron:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Parity Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"file_content"}],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:parity_plot:matplotlib","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"python/ml/train_head.json":{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"flowchartId":"head-set-predict-status","head":true,"next":"head-fetch-training-data","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Dataset","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"type":"object_storage","basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"head-branch-on-predict-status","schemaVersion":"2022.8.16","isDefault":false},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","then":"head-fetch-trained-model","head":false,"next":"head-fetch-trained-model","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["set-io-unit-filenames"],"enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"type":"object_storage","basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"end-of-ml-train-head","schemaVersion":"2022.8.16","isDefault":false},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"end-of-ml-train-head","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"python/python_script.json":{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","name":"Python Script","application":{"name":"python"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"python","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"shell/batch_espresso_pwscf.json":{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","name":"Shell Batch Job (Espresso PWSCF)","application":{"name":"shell"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"monitors":[{"name":"standard_output"}],"name":"job_espresso_pw_scf","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"shell/hello_world.json":{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","name":"Shell Hello World","application":{"name":"shell"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/band_gap.json":{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","name":"Band Gap","application":{"name":"vasp"},"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"f0d65517-9592-5bc8-948e-a0851a766cbb","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_nscf","head":false,"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/band_structure_dos.json":{"_id":"d38fea11-9781-5151-8dae-d705381498be","name":"Band Structure + Density of States","application":{"name":"vasp"},"properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/band_structure.json":{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","name":"Band Structure","application":{"name":"vasp"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/dos.json":{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","name":"Density of States","application":{"name":"vasp"},"properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/fixed_cell_relaxation.json":{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","name":"Fixed-cell Relaxation","application":{"name":"vasp"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_relax","head":true,"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/initial_final_total_energies.json":{"isMultiMaterial":true,"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","name":"Initial/Final Total Energies","application":{"name":"vasp"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_neb_initial","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"e65a17ce-10c8-5710-ad4d-fb3d42434091","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_neb_final","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"compute":{"ppn":1,"nodes":1,"queue":"D","timeLimit":"01:00:00","notify":"n","cluster":{"fqdn":""},"timeLimitType":"per single attempt","isRestartable":true,"arguments":{"nimage":1,"npools":1,"nband":1,"ntg":1,"ndiag":1}},"schemaVersion":"2022.8.16","isDraft":false},"vasp/kpoint_convergence.json":{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","name":"K-point Convergence","application":{"name":"vasp"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-tolerance","head":true,"next":"init-increment","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-increment","head":false,"next":"init-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-result","head":false,"next":"init-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-parameter","head":false,"next":"vasp-kpoint-convergence","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"vasp-kpoint-convergence","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"store-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"store-result","head":false,"next":"check-convergence","schemaVersion":"2022.8.16","isDefault":false},{"name":"check convergence","type":"condition","input":[],"statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"check-convergence","then":"convergence-is-reached","else":"update-result","head":false,"next":"update-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"update-result","head":false,"next":"increment-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"increment-parameter","next":"vasp-kpoint-convergence","head":false,"schemaVersion":"2022.8.16","isDefault":false},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"convergence-is-reached","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/neb_subworkflow.json":{"isMultiMaterial":true,"_id":"e6215fb9-e60c-541b-b73e-b077d64b3a95","name":"Nudged Elastic Band (NEB)","application":{"name":"vasp"},"properties":["reaction_energy_barrier","reaction_energy_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_neb","head":true,"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9a1660ab-8067-5fad-9fb8-7c039f634636","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB"},{"name":"KPOINTS","templateName":"KPOINTS"}],"monitors":[{"name":"standard_output"}],"name":"vasp_neb","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nIBRION = 1\nEDIFFG = -0.001\nENCUT = 500\nNELM = 100\nNSW = 100\nIMAGES = {{ input.INTERMEDIATE_IMAGES.length or neb.nImages }}\nSPRING = -5\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/prepare_images.json":{"isMultiMaterial":true,"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","name":"Prepare Directories","application":{"name":"vasp"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"prepare-neb-images","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"monitors":[{"name":"standard_output"}],"name":"bash_vasp_prepare_neb_images","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR <=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP_INTERFACE","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"isMultiMaterial":true,"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","name":"BS + Avg ESP (interface left)","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"name":"Set Material Index (Interface left)","type":"assignment","operand":"MATERIAL_INDEX","value":"1","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"0bd31760-f6e4-5826-b282-882c06c97f94","head":true,"next":"3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"pw-bands-calculate-band-gap-left","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap-left","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a667d9fd-35d5-5897-be0e-fa0247233649","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-left"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM_LEFT","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"next":"dfc4f1c5-5856-588a-99df-6d5fb46bb429","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"dfc4f1c5-5856-588a-99df-6d5fb46bb429","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"b1bb2b3e-3197-5bcd-85b0-959cc357c8d3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"b1bb2b3e-3197-5bcd-85b0-959cc357c8d3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"pp_electrostatic_potential","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"average-electrostatic-potential-left","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential-left","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"average_potential","results":[{"name":"average_potential_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-left"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","name":"Find ESP Value (Interface left)","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Find Extrema","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"python-find-extrema-left","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"generic:processing:find_extrema:scipy","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP_LEFT","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema-left"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"isMultiMaterial":true,"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","name":"BS + Avg ESP (interface right)","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"name":"Set Material Index (Interface right)","type":"assignment","operand":"MATERIAL_INDEX","value":"2","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"a05809d1-cc0d-5a0b-bf5e-d43b90a6ac4b","head":true,"next":"b89d6348-3915-5c24-9fbb-350bc98ac708","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"b89d6348-3915-5c24-9fbb-350bc98ac708","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"pw-bands-calculate-band-gap-right","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap-right","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a667d9fd-35d5-5897-be0e-fa0247233649","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-right"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM_RIGHT","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"next":"bc3f514c-4bed-521b-85a3-4e0edfdc3585","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"bc3f514c-4bed-521b-85a3-4e0edfdc3585","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"28bb682d-d287-5beb-8a67-826449c474ee","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"28bb682d-d287-5beb-8a67-826449c474ee","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"pp_electrostatic_potential","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"average-electrostatic-potential-right","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential-right","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"average_potential","results":[{"name":"average_potential_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-right"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"736295e8-2ee0-5974-83bc-362061ac0688","name":"Find ESP Value (Interface right)","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Find Extrema","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"python-find-extrema-right","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"generic:processing:find_extrema:scipy","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP_RIGHT","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema-right"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","name":"Calculate VBO","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["valence_band_offset"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Difference of valence band maxima","type":"assignment","operand":"VBM_DIFF","value":"VBM_LEFT - VBM_RIGHT","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","head":true,"next":"2626f7bb-d392-5fd4-ab71-329b508de347","schemaVersion":"2022.8.16","isDefault":false},{"name":"Difference of macroscopically averaged ESP in bulk","type":"assignment","operand":"AVG_ESP_DIFF","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","head":false,"next":"b7307787-53e2-599b-ad12-d627b04074b4","schemaVersion":"2022.8.16","isDefault":false},{"name":"Lineup of macroscopically averaged ESP in interface","type":"assignment","operand":"ESP_LINEUP","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","head":false,"next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","schemaVersion":"2022.8.16","isDefault":false},{"name":"Valence Band Offset","type":"assignment","operand":"VALENCE_BAND_OFFSET","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))","input":[],"results":[{"name":"valence_band_offset"}],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"BS + Avg ESP (Interface)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"9c65d03e-6a30-58f3-947a-f174342be0c3","flowchartId":"fd622b5c-5c02-594e-b582-b245c17ca9a4","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Find ESP Values (Interface)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7","flowchartId":"ad3b1e4c-5965-5605-a067-dd0c59907c4b","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"BS + Avg ESP (interface left)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","flowchartId":"8d5b4734-edfd-55cc-ad80-aaa72487398d","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Find ESP Value (Interface left)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","flowchartId":"102ec582-5b75-52f5-8b39-19ca725ed47a","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"BS + Avg ESP (interface right)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","flowchartId":"603c45db-93aa-54ce-a7fe-6e9b65b0037d","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Find ESP Value (Interface right)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"736295e8-2ee0-5974-83bc-362061ac0688","flowchartId":"e3444d35-cc41-59f5-8481-78d0c383b84e","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Calculate VBO","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","flowchartId":"0e0b141a-39ca-52bc-9094-e5f96dc72f39","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","valence_band_offset"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/variable_cell_relaxation.json":{"_id":"c45dcef1-d16b-59d1-9318-cedd0b1acf08","name":"Variable-cell Relaxation","subworkflows":[{"systemName":"espresso-variable-cell-relaxation","_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","name":"Variable-cell Relaxation","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_vc-relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_vc-relax","results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Variable-cell Relaxation","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","flowchartId":"8f6e9590-6a87-584b-abd7-1fb98253054c","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"tags":["variable-cell_relaxation"],"application":{"name":"espresso"}},"espresso/wavefunction_amplitude.json":{"_id":"196d364a-5a30-549b-a898-8b9704b50ff1","name":"Wavefunction Amplitude","subworkflows":[{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","name":"Wavefunction Amplitude","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"band_structure"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"pw-scf","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"extract-band-energies","schemaVersion":"2022.8.16","isDefault":false},{"name":"Extract Band Energies","type":"assignment","operand":"band_energies","value":"[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]","input":[{"name":"band_structure","scope":"pw-scf"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"extract-band-energies","head":false,"next":"indices-below-fermi","schemaVersion":"2022.8.16","isDefault":false},{"name":"Find Indices Below Fermi","type":"assignment","operand":"indices_below_fermi","value":"[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]","input":[{"name":"fermi_energy","scope":"pw-scf"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"indices-below-fermi","head":false,"next":"8771dc7f-878e-5f13-a840-a3a416854f1e","schemaVersion":"2022.8.16","isDefault":false},{"name":"Store Band Below EF","type":"assignment","operand":"KBAND_VALUE_BELOW_EF","value":"indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8771dc7f-878e-5f13-a840-a3a416854f1e","head":false,"next":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select Band","type":"assignment","operand":"KBAND_VALUE","value":"KBAND_VALUE_BELOW_EF","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","head":false,"next":"pp-wfn","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pp_wfn","head":false,"results":[{"name":"wavefunction_amplitude"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pp-wfn","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"pp_wfn","results":[{"name":"wavefunction_amplitude"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_wfn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","name":"Plot Wavefunction","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"plot WFN","head":true,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"57fca898-8e8b-5ef2-81a5-9d2b612bc18d","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"plot_wavefunction","results":[{"name":"file_content"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Wavefunction Amplitude","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","flowchartId":"36467db9-279f-52a3-a6ef-ffdc26d875ed","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Plot Wavefunction","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"e4ec581f-1cb3-5036-b698-999a96711559","flowchartId":"4ce49281-e731-550e-af66-6d2408db8237","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude","file_content"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"tags":["wfn","wfn_plot"],"application":{"name":"espresso"}},"espresso/zero_point_energy.json":{"_id":"3158c78d-58bb-5675-8c7f-6f2337061015","name":"Zero Point Energy","subworkflows":[{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","name":"Zero Point Energy","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"107595d1-490f-53a2-8432-7f8a12f14d96","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_zpe","head":false,"results":[{"name":"zero_point_energy"}],"monitors":[{"name":"standard_output"}],"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_gamma","results":[{"name":"zero_point_energy"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Zero Point Energy","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"151538cc-9e71-5269-8b9e-cb5977151227","flowchartId":"d906bd20-eb92-5a01-a0e2-c81a2d9b2a41","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"nwchem/total_energy.json":{"_id":"937fbac8-2dec-5fb1-a46f-b8a0cc3d3d05","name":"Total Energy","subworkflows":[{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","name":"Total Energy","application":{"name":"nwchem","shortName":"nwchem","summary":"NWChem","build":"GNU","isDefault":true,"version":"7.0.2","schemaVersion":"2022.8.16"},"properties":["total_energy","total_energy_contributions"],"model":{"type":"dft","subtype":"gga","method":{"type":"localorbital","subtype":"pople","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"nwchem_total_energy","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"nwchem","shortName":"nwchem","summary":"NWChem","build":"GNU","isDefault":true,"version":"7.0.2","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"}],"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem","schemaVersion":"2022.8.16"},"flavor":{"name":"nwchem_total_energy","results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"preProcessors":[],"postProcessors":[],"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Total Energy","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","flowchartId":"6059d61a-6a92-5657-9130-02208639aff8","schemaVersion":"2022.8.16","isDefault":false}],"properties":["total_energy","total_energy_contributions"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"nwchem"}},"python/ml/classification_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","name":"Python ML Train Classification","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"flowchartId":"head-set-predict-status","head":true,"next":"head-fetch-training-data","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Dataset","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"type":"object_storage","basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"head-branch-on-predict-status","schemaVersion":"2022.8.16","isDefault":false},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","then":"head-fetch-trained-model","head":false,"next":"head-fetch-trained-model","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["set-io-unit-filenames"],"enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"type":"object_storage","basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"end-of-ml-train-head","schemaVersion":"2022.8.16","isDefault":false},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"end-of-ml-train-head","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:setup_variables_packages","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:read_csv:pandas","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:train_test_split:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:pre_processing:standardization:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:model:random_forest_classification:sklearn","results":[{"name":"workflow:pyml_predict"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ROC Curve Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:post_processing:roc_curve:sklearn","results":[{"name":"file_content"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Set Up the Job","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Machine Learning","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","schemaVersion":"2022.8.16","isDefault":false}],"properties":["file_content","workflow:pyml_predict"],"workflows":[],"isUsingDataset":true,"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"python/ml/clustering_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","name":"Python ML Train Clustering","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"flowchartId":"head-set-predict-status","head":true,"next":"head-fetch-training-data","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Dataset","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"type":"object_storage","basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"head-branch-on-predict-status","schemaVersion":"2022.8.16","isDefault":false},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","then":"head-fetch-trained-model","head":false,"next":"head-fetch-trained-model","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["set-io-unit-filenames"],"enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"type":"object_storage","basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"end-of-ml-train-head","schemaVersion":"2022.8.16","isDefault":false},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"end-of-ml-train-head","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:setup_variables_packages","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:read_csv:pandas","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:train_test_split:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:pre_processing:standardization:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:model:random_forest_classification:sklearn","results":[{"name":"workflow:pyml_predict"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ROC Curve Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:post_processing:roc_curve:sklearn","results":[{"name":"file_content"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Set Up the Job","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Machine Learning","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","schemaVersion":"2022.8.16","isDefault":false}],"properties":["file_content","workflow:pyml_predict"],"workflows":[],"isUsingDataset":true,"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"python/ml/regression_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","name":"Python ML Train Regression","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"flowchartId":"head-set-predict-status","head":true,"next":"head-fetch-training-data","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Dataset","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"type":"object_storage","basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"head-branch-on-predict-status","schemaVersion":"2022.8.16","isDefault":false},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","then":"head-fetch-trained-model","head":false,"next":"head-fetch-trained-model","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["set-io-unit-filenames"],"enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"type":"object_storage","basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"end-of-ml-train-head","schemaVersion":"2022.8.16","isDefault":false},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"end-of-ml-train-head","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:setup_variables_packages","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:read_csv:pandas","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:train_test_split:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:pre_processing:standardization:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:model:multilayer_perceptron:sklearn","results":[{"name":"workflow:pyml_predict"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Parity Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:post_processing:parity_plot:matplotlib","results":[{"name":"file_content"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Set Up the Job","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Machine Learning","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","schemaVersion":"2022.8.16","isDefault":false}],"properties":["file_content","workflow:pyml_predict"],"workflows":[],"isUsingDataset":true,"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"python/python_script.json":{"_id":"de816646-766b-5f97-b468-0937d4381440","name":"Python Script","subworkflows":[{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","name":"Python Script","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"python","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"hello_world","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Python Script","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","flowchartId":"c50e28b2-a0c5-5324-8b6f-e99b5a546bd8","schemaVersion":"2022.8.16","isDefault":false}],"properties":[],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"shell/batch_espresso_pwscf.json":{"_id":"e0046fb4-37db-5732-bf81-c48e13081a4c","name":"Shell Batch Job (Espresso PWSCF)","subworkflows":[{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","name":"Shell Batch Job (Espresso PWSCF)","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"name":"job_espresso_pw_scf","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Shell Batch Job (Espresso PWSCF)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","flowchartId":"d884e8f7-7acf-5a03-bc9a-186903bdaa0e","schemaVersion":"2022.8.16","isDefault":false}],"properties":[],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"shell"}},"shell/hello_world.json":{"_id":"d2fd444c-06b4-5d66-baeb-449c680ae1bf","name":"Shell Script","subworkflows":[{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","name":"Shell Hello World","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"name":"hello_world","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Shell Hello World","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","flowchartId":"319307c2-bf22-5bf2-b4e9-a4cdf671b786","schemaVersion":"2022.8.16","isDefault":false}],"properties":[],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"shell"}},"vasp/band_gap.json":{"_id":"1a358471-0a73-5fcb-ad3c-7a8079029c86","name":"Band Gap","subworkflows":[{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","name":"Band Gap","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"f0d65517-9592-5bc8-948e-a0851a766cbb","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_nscf","head":false,"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_nscf","results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Band Gap","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","flowchartId":"db3b83ea-0ef5-594c-89a8-bde38dbc6105","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/band_structure_dos.json":{"_id":"c8338d40-3c6e-5581-b03c-d7fb5cbb8df5","name":"Band Structure + Density of States","subworkflows":[{"_id":"d38fea11-9781-5151-8dae-d705381498be","name":"Band Structure + Density of States","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Band Structure + Density of States","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"d38fea11-9781-5151-8dae-d705381498be","flowchartId":"8a098bb9-73b1-5e84-bfc7-b783e02d0f53","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/band_structure.json":{"_id":"25b0ad08-87bb-5400-bea4-acd5fe2163c0","name":"Band Structure","subworkflows":[{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","name":"Band Structure","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Band Structure","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","flowchartId":"c573187f-a8bb-5084-9fcf-1560bf4a7786","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/dos.json":{"_id":"629a79fb-a03f-5e34-b2ce-9c735e8ef6c0","name":"Density of States","subworkflows":[{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","name":"Density of States","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Density of States","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","flowchartId":"3e64fdb4-ab5b-52a0-a1d5-51343c49481c","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/fixed_cell_relaxation.json":{"_id":"cb69418c-2f6c-551d-af81-0cf20ec1113d","name":"Fixed-cell Relaxation","subworkflows":[{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","name":"Fixed-cell Relaxation","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_relax","head":true,"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_relax","results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Fixed-cell Relaxation","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","flowchartId":"0de8c4c8-b722-5cd2-ae68-b484262e0a01","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/kpoint_convergence.json":{"_id":"fcf105f9-5ae7-5c32-a6b3-e3579cbdf39a","name":"K-point Convergence","subworkflows":[{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","name":"K-point Convergence","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-tolerance","head":true,"next":"init-increment","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-increment","head":false,"next":"init-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-result","head":false,"next":"init-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-parameter","head":false,"next":"vasp-kpoint-convergence","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"vasp-kpoint-convergence","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_kpt_conv","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"store-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"store-result","head":false,"next":"check-convergence","schemaVersion":"2022.8.16","isDefault":false},{"name":"check convergence","type":"condition","input":[],"statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"check-convergence","then":"convergence-is-reached","else":"update-result","head":false,"next":"update-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"update-result","head":false,"next":"increment-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"increment-parameter","next":"vasp-kpoint-convergence","head":false,"schemaVersion":"2022.8.16","isDefault":false},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"convergence-is-reached","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"K-point Convergence","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","flowchartId":"a34eec2c-cdb2-537d-88c0-ed1d7b205879","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/neb.json":{"_id":"2973908e-21ae-5424-afc9-ccb3fde477d8","name":"Nudged Elastic Band (NEB)","subworkflows":[{"isMultiMaterial":true,"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","name":"Initial/Final Total Energies","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_neb_initial","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_neb_initial","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"e65a17ce-10c8-5710-ad4d-fb3d42434091","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_neb_final","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_neb_final","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"compute":{"ppn":1,"nodes":1,"queue":"D","timeLimit":"01:00:00","notify":"n","cluster":{"fqdn":""},"timeLimitType":"per single attempt","isRestartable":true,"arguments":{"nimage":1,"npools":1,"nband":1,"ntg":1,"ndiag":1}},"schemaVersion":"2022.8.16","isDraft":false},{"isMultiMaterial":true,"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","name":"Prepare Directories","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"prepare-neb-images","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"name":"bash_vasp_prepare_neb_images","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR <=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP_INTERFACE","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"isMultiMaterial":true,"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","name":"BS + Avg ESP (interface left)","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"name":"Set Material Index (Interface left)","type":"assignment","operand":"MATERIAL_INDEX","value":"1","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"0bd31760-f6e4-5826-b282-882c06c97f94","head":true,"next":"3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"pw-bands-calculate-band-gap-left","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap-left","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a667d9fd-35d5-5897-be0e-fa0247233649","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-left"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM_LEFT","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"next":"dfc4f1c5-5856-588a-99df-6d5fb46bb429","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"dfc4f1c5-5856-588a-99df-6d5fb46bb429","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"b1bb2b3e-3197-5bcd-85b0-959cc357c8d3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"b1bb2b3e-3197-5bcd-85b0-959cc357c8d3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"average-electrostatic-potential-left","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential-left","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"average_potential_profile"}],"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"name":"average_potential","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-left"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","name":"Find ESP Value (Interface left)","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Find Extrema","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"python-find-extrema-left","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"generic:processing:find_extrema:scipy","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP_LEFT","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema-left"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"isMultiMaterial":true,"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","name":"BS + Avg ESP (interface right)","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"name":"Set Material Index (Interface right)","type":"assignment","operand":"MATERIAL_INDEX","value":"2","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"a05809d1-cc0d-5a0b-bf5e-d43b90a6ac4b","head":true,"next":"b89d6348-3915-5c24-9fbb-350bc98ac708","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"b89d6348-3915-5c24-9fbb-350bc98ac708","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"pw-bands-calculate-band-gap-right","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap-right","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a667d9fd-35d5-5897-be0e-fa0247233649","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-right"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM_RIGHT","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"next":"bc3f514c-4bed-521b-85a3-4e0edfdc3585","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"bc3f514c-4bed-521b-85a3-4e0edfdc3585","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"28bb682d-d287-5beb-8a67-826449c474ee","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"28bb682d-d287-5beb-8a67-826449c474ee","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"average-electrostatic-potential-right","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential-right","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"average_potential_profile"}],"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"name":"average_potential","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-right"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"736295e8-2ee0-5974-83bc-362061ac0688","name":"Find ESP Value (Interface right)","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Find Extrema","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"python-find-extrema-right","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"generic:processing:find_extrema:scipy","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP_RIGHT","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema-right"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","name":"Calculate VBO","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["valence_band_offset"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Difference of valence band maxima","type":"assignment","operand":"VBM_DIFF","value":"VBM_LEFT - VBM_RIGHT","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","head":true,"next":"2626f7bb-d392-5fd4-ab71-329b508de347","schemaVersion":"2022.8.16","isDefault":false},{"name":"Difference of macroscopically averaged ESP in bulk","type":"assignment","operand":"AVG_ESP_DIFF","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","head":false,"next":"b7307787-53e2-599b-ad12-d627b04074b4","schemaVersion":"2022.8.16","isDefault":false},{"name":"Lineup of macroscopically averaged ESP in interface","type":"assignment","operand":"ESP_LINEUP","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","head":false,"next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","schemaVersion":"2022.8.16","isDefault":false},{"name":"Valence Band Offset","type":"assignment","operand":"VALENCE_BAND_OFFSET","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))","input":[],"results":[{"name":"valence_band_offset"}],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"BS + Avg ESP (Interface)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"9c65d03e-6a30-58f3-947a-f174342be0c3","flowchartId":"fd622b5c-5c02-594e-b582-b245c17ca9a4","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Find ESP Values (Interface)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7","flowchartId":"ad3b1e4c-5965-5605-a067-dd0c59907c4b","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"BS + Avg ESP (interface left)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","flowchartId":"8d5b4734-edfd-55cc-ad80-aaa72487398d","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Find ESP Value (Interface left)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","flowchartId":"102ec582-5b75-52f5-8b39-19ca725ed47a","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"BS + Avg ESP (interface right)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","flowchartId":"603c45db-93aa-54ce-a7fe-6e9b65b0037d","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Find ESP Value (Interface right)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"736295e8-2ee0-5974-83bc-362061ac0688","flowchartId":"e3444d35-cc41-59f5-8481-78d0c383b84e","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Calculate VBO","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","flowchartId":"0e0b141a-39ca-52bc-9094-e5f96dc72f39","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","valence_band_offset"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/variable_cell_relaxation.json":{"_id":"c45dcef1-d16b-59d1-9318-cedd0b1acf08","name":"Variable-cell Relaxation","subworkflows":[{"systemName":"espresso-variable-cell-relaxation","_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","name":"Variable-cell Relaxation","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_vc-relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Variable-cell Relaxation","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","flowchartId":"8f6e9590-6a87-584b-abd7-1fb98253054c","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"tags":["variable-cell_relaxation"],"application":{"name":"espresso"}},"espresso/wavefunction_amplitude.json":{"_id":"196d364a-5a30-549b-a898-8b9704b50ff1","name":"Wavefunction Amplitude","subworkflows":[{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","name":"Wavefunction Amplitude","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"band_structure"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"pw-scf","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"extract-band-energies","schemaVersion":"2022.8.16","isDefault":false},{"name":"Extract Band Energies","type":"assignment","operand":"band_energies","value":"[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]","input":[{"name":"band_structure","scope":"pw-scf"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"extract-band-energies","head":false,"next":"indices-below-fermi","schemaVersion":"2022.8.16","isDefault":false},{"name":"Find Indices Below Fermi","type":"assignment","operand":"indices_below_fermi","value":"[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]","input":[{"name":"fermi_energy","scope":"pw-scf"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"indices-below-fermi","head":false,"next":"8771dc7f-878e-5f13-a840-a3a416854f1e","schemaVersion":"2022.8.16","isDefault":false},{"name":"Store Band Below EF","type":"assignment","operand":"KBAND_VALUE_BELOW_EF","value":"indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8771dc7f-878e-5f13-a840-a3a416854f1e","head":false,"next":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select Band","type":"assignment","operand":"KBAND_VALUE","value":"KBAND_VALUE_BELOW_EF","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","head":false,"next":"pp-wfn","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pp_wfn","head":false,"results":[{"name":"wavefunction_amplitude"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pp-wfn","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"wavefunction_amplitude"}],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"monitors":[{"name":"standard_output"}],"name":"pp_wfn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_wfn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","name":"Plot Wavefunction","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"plot WFN","head":true,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"57fca898-8e8b-5ef2-81a5-9d2b612bc18d","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"file_content"}],"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"monitors":[{"name":"standard_output"}],"name":"plot_wavefunction","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Wavefunction Amplitude","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","flowchartId":"36467db9-279f-52a3-a6ef-ffdc26d875ed","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Plot Wavefunction","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"e4ec581f-1cb3-5036-b698-999a96711559","flowchartId":"4ce49281-e731-550e-af66-6d2408db8237","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude","file_content"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"tags":["wfn","wfn_plot"],"application":{"name":"espresso"}},"espresso/zero_point_energy.json":{"_id":"3158c78d-58bb-5675-8c7f-6f2337061015","name":"Zero Point Energy","subworkflows":[{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","name":"Zero Point Energy","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"107595d1-490f-53a2-8432-7f8a12f14d96","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_zpe","head":false,"results":[{"name":"zero_point_energy"}],"monitors":[{"name":"standard_output"}],"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"zero_point_energy"}],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"monitors":[{"name":"standard_output"}],"name":"ph_gamma","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Zero Point Energy","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"151538cc-9e71-5269-8b9e-cb5977151227","flowchartId":"d906bd20-eb92-5a01-a0e2-c81a2d9b2a41","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"nwchem/total_energy.json":{"_id":"937fbac8-2dec-5fb1-a46f-b8a0cc3d3d05","name":"Total Energy","subworkflows":[{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","name":"Total Energy","application":{"name":"nwchem","shortName":"nwchem","summary":"NWChem","build":"GNU","isDefault":true,"version":"7.0.2","schemaVersion":"2022.8.16"},"properties":["total_energy","total_energy_contributions"],"model":{"type":"dft","subtype":"gga","method":{"type":"localorbital","subtype":"pople","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"nwchem_total_energy","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"nwchem","shortName":"nwchem","summary":"NWChem","build":"GNU","isDefault":true,"version":"7.0.2","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"}],"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Total Energy","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","flowchartId":"6059d61a-6a92-5657-9130-02208639aff8","schemaVersion":"2022.8.16","isDefault":false}],"properties":["total_energy","total_energy_contributions"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"nwchem"}},"python/ml/classification_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","name":"Python ML Train Classification","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"flowchartId":"head-set-predict-status","head":true,"next":"head-fetch-training-data","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Dataset","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"type":"object_storage","basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"head-branch-on-predict-status","schemaVersion":"2022.8.16","isDefault":false},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","then":"head-fetch-trained-model","head":false,"next":"head-fetch-trained-model","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["set-io-unit-filenames"],"enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"type":"object_storage","basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"end-of-ml-train-head","schemaVersion":"2022.8.16","isDefault":false},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"end-of-ml-train-head","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:model:random_forest_classification:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ROC Curve Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"file_content"}],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:roc_curve:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Set Up the Job","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Machine Learning","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","schemaVersion":"2022.8.16","isDefault":false}],"properties":["file_content","workflow:pyml_predict"],"workflows":[],"isUsingDataset":true,"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"python/ml/clustering_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","name":"Python ML Train Clustering","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"flowchartId":"head-set-predict-status","head":true,"next":"head-fetch-training-data","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Dataset","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"type":"object_storage","basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"head-branch-on-predict-status","schemaVersion":"2022.8.16","isDefault":false},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","then":"head-fetch-trained-model","head":false,"next":"head-fetch-trained-model","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["set-io-unit-filenames"],"enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"type":"object_storage","basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"end-of-ml-train-head","schemaVersion":"2022.8.16","isDefault":false},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"end-of-ml-train-head","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:model:random_forest_classification:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ROC Curve Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"file_content"}],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:roc_curve:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Set Up the Job","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Machine Learning","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","schemaVersion":"2022.8.16","isDefault":false}],"properties":["file_content","workflow:pyml_predict"],"workflows":[],"isUsingDataset":true,"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"python/ml/regression_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","name":"Python ML Train Regression","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"flowchartId":"head-set-predict-status","head":true,"next":"head-fetch-training-data","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Dataset","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"type":"object_storage","basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"head-branch-on-predict-status","schemaVersion":"2022.8.16","isDefault":false},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","then":"head-fetch-trained-model","head":false,"next":"head-fetch-trained-model","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["set-io-unit-filenames"],"enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"type":"object_storage","basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"end-of-ml-train-head","schemaVersion":"2022.8.16","isDefault":false},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"end-of-ml-train-head","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:model:multilayer_perceptron:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Parity Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"file_content"}],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:parity_plot:matplotlib","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Set Up the Job","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Machine Learning","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","schemaVersion":"2022.8.16","isDefault":false}],"properties":["file_content","workflow:pyml_predict"],"workflows":[],"isUsingDataset":true,"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"python/python_script.json":{"_id":"de816646-766b-5f97-b468-0937d4381440","name":"Python Script","subworkflows":[{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","name":"Python Script","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"python","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Python Script","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","flowchartId":"c50e28b2-a0c5-5324-8b6f-e99b5a546bd8","schemaVersion":"2022.8.16","isDefault":false}],"properties":[],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"shell/batch_espresso_pwscf.json":{"_id":"e0046fb4-37db-5732-bf81-c48e13081a4c","name":"Shell Batch Job (Espresso PWSCF)","subworkflows":[{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","name":"Shell Batch Job (Espresso PWSCF)","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"monitors":[{"name":"standard_output"}],"name":"job_espresso_pw_scf","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Shell Batch Job (Espresso PWSCF)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","flowchartId":"d884e8f7-7acf-5a03-bc9a-186903bdaa0e","schemaVersion":"2022.8.16","isDefault":false}],"properties":[],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"shell"}},"shell/hello_world.json":{"_id":"d2fd444c-06b4-5d66-baeb-449c680ae1bf","name":"Shell Script","subworkflows":[{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","name":"Shell Hello World","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Shell Hello World","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","flowchartId":"319307c2-bf22-5bf2-b4e9-a4cdf671b786","schemaVersion":"2022.8.16","isDefault":false}],"properties":[],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"shell"}},"vasp/band_gap.json":{"_id":"1a358471-0a73-5fcb-ad3c-7a8079029c86","name":"Band Gap","subworkflows":[{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","name":"Band Gap","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"f0d65517-9592-5bc8-948e-a0851a766cbb","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_nscf","head":false,"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Band Gap","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","flowchartId":"db3b83ea-0ef5-594c-89a8-bde38dbc6105","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/band_structure_dos.json":{"_id":"c8338d40-3c6e-5581-b03c-d7fb5cbb8df5","name":"Band Structure + Density of States","subworkflows":[{"_id":"d38fea11-9781-5151-8dae-d705381498be","name":"Band Structure + Density of States","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Band Structure + Density of States","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"d38fea11-9781-5151-8dae-d705381498be","flowchartId":"8a098bb9-73b1-5e84-bfc7-b783e02d0f53","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/band_structure.json":{"_id":"25b0ad08-87bb-5400-bea4-acd5fe2163c0","name":"Band Structure","subworkflows":[{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","name":"Band Structure","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Band Structure","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","flowchartId":"c573187f-a8bb-5084-9fcf-1560bf4a7786","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/dos.json":{"_id":"629a79fb-a03f-5e34-b2ce-9c735e8ef6c0","name":"Density of States","subworkflows":[{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","name":"Density of States","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Density of States","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","flowchartId":"3e64fdb4-ab5b-52a0-a1d5-51343c49481c","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/fixed_cell_relaxation.json":{"_id":"cb69418c-2f6c-551d-af81-0cf20ec1113d","name":"Fixed-cell Relaxation","subworkflows":[{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","name":"Fixed-cell Relaxation","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_relax","head":true,"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Fixed-cell Relaxation","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","flowchartId":"0de8c4c8-b722-5cd2-ae68-b484262e0a01","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/kpoint_convergence.json":{"_id":"fcf105f9-5ae7-5c32-a6b3-e3579cbdf39a","name":"K-point Convergence","subworkflows":[{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","name":"K-point Convergence","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-tolerance","head":true,"next":"init-increment","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-increment","head":false,"next":"init-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-result","head":false,"next":"init-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-parameter","head":false,"next":"vasp-kpoint-convergence","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"vasp-kpoint-convergence","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"store-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"store-result","head":false,"next":"check-convergence","schemaVersion":"2022.8.16","isDefault":false},{"name":"check convergence","type":"condition","input":[],"statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"check-convergence","then":"convergence-is-reached","else":"update-result","head":false,"next":"update-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"update-result","head":false,"next":"increment-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"increment-parameter","next":"vasp-kpoint-convergence","head":false,"schemaVersion":"2022.8.16","isDefault":false},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"convergence-is-reached","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"K-point Convergence","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","flowchartId":"a34eec2c-cdb2-537d-88c0-ed1d7b205879","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/neb.json":{"_id":"2973908e-21ae-5424-afc9-ccb3fde477d8","name":"Nudged Elastic Band (NEB)","subworkflows":[{"isMultiMaterial":true,"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","name":"Initial/Final Total Energies","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_neb_initial","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"e65a17ce-10c8-5710-ad4d-fb3d42434091","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_neb_final","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"compute":{"ppn":1,"nodes":1,"queue":"D","timeLimit":"01:00:00","notify":"n","cluster":{"fqdn":""},"timeLimitType":"per single attempt","isRestartable":true,"arguments":{"nimage":1,"npools":1,"nband":1,"ntg":1,"ndiag":1}},"schemaVersion":"2022.8.16","isDraft":false},{"isMultiMaterial":true,"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","name":"Prepare Directories","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"prepare-neb-images","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"monitors":[{"name":"standard_output"}],"name":"bash_vasp_prepare_neb_images","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < { }); describe("Application-specific methods", () => { - it("getAppDataForApplication - should return application data for valid app", () => { - const appData = standata.getAppDataForApplication("espresso"); - expect(appData).to.be.an("object"); - expect(appData).to.have.property("name", "espresso"); - expect(appData).to.have.property("shortName", "qe"); + it("getApplicationsTree - merges application version map into nested version/build entries", () => { + const tree = standata.getApplicationsTree(); + expect(tree).to.be.an("object"); + expect(tree).to.have.property("espresso"); + const { espresso } = tree; + expect(espresso).to.have.property("defaultVersion", "6.3"); + expect(espresso.versions).to.have.property("6.3"); + expect(espresso.versions["6.3"]).to.have.property("GNU"); + const gnu63 = espresso.versions["6.3"].GNU; + expect(gnu63).to.have.property("name", "espresso"); + expect(gnu63).to.have.property("shortName", "qe"); + }); + + it("getApplications - flattens every version/build from the applications tree", () => { + const apps = standata.getApplications(); + expect(apps).to.be.an("array"); + expect(apps.length).to.be.greaterThan(0); + const espressoGnu = apps.find( + (a) => a.name === "espresso" && a.version === "6.3" && a.build === "GNU", + ); + expect(espressoGnu).to.not.equal(undefined); + expect(espressoGnu).to.have.property("shortName", "qe"); }); - it("getAppDataForApplication - should throw error for invalid app", () => { + it("getApplicationTreeItem - returns defaultVersion and versions for a known app", () => { + const item = standata.getApplicationTreeItem("espresso"); + expect(item.defaultVersion).to.equal("6.3"); + expect(item.versions).to.have.key("6.3"); + }); + + it("getApplicationTreeItem - should throw for unknown application", () => { expect(() => { - standata.getAppDataForApplication("nonexistent"); + standata.getApplicationTreeItem("nonexistent"); }).to.throw("Application nonexistent not found"); }); - it("getAppTreeForApplication - should return tree data for valid app", () => { - const treeData = standata.getAppTreeForApplication("espresso"); - expect(treeData).to.be.an("object"); - expect(treeData).to.have.property("pw.x"); + it("getApplication - resolves default version and build from application config", () => { + const app = standata.getApplication({ name: "espresso" }); + expect(app).to.have.property("name", "espresso"); + expect(app).to.have.property("shortName", "qe"); + expect(app).to.have.property("version", "6.3"); + expect(app).to.have.property("build", "GNU"); + }); + + it("getExecutableByName - should resolve executable config for valid app", () => { + const exec = standata.getExecutableByName("espresso", "pw.x"); + expect(exec).to.be.an("object"); + expect(exec).to.have.property("name", "pw.x"); }); - it("getAppTreeForApplication - should throw error for invalid app", () => { + it("getExecutableByName - should throw for app without executable tree", () => { expect(() => { - standata.getAppTreeForApplication("nonexistent"); + standata.getExecutableByName("nonexistent"); }).to.throw("nonexistent is not a known application with executable tree"); }); @@ -78,12 +109,10 @@ describe("Application Standata", () => { expect(allData[0]).to.have.property("name"); }); - it("getAllApplicationNames - should return unique application names", () => { - const names = standata.getAllApplicationNames(); + it("getApplicationsTree - application keys are unique and list known apps", () => { + const names = Object.keys(standata.getApplicationsTree()); expect(names).to.be.an("array"); expect(names).to.include("espresso"); - // expect(names).to.include("python"); - // Should be unique expect(new Set(names).size).to.equal(names.length); }); From 7d26ab821e175278920e6c3e4e2d3e7ea19a25fa Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Fri, 20 Mar 2026 16:40:07 +0200 Subject: [PATCH 06/14] chore: move ade factory methods to standata --- assets/workflows/subworkflows/categories.yml | 1 + .../espresso/espresso_xml_get_qpt_irr.json | 99 +++++- .../subworkflows/espresso/surface_energy.json | 307 +++++++++++++++++- .../subworkflows/vasp/surface_energy.json | 307 +++++++++++++++++- .../workflows/espresso/phonon_map.json | 101 +++++- .../workflows/espresso/surface_energy.json | 307 +++++++++++++++++- .../workflows/vasp/surface_energy.json | 307 +++++++++++++++++- dist/js/application.d.ts | 25 +- dist/js/application.js | 86 ++--- dist/js/runtime_data/subworkflows.json | 2 +- dist/js/runtime_data/workflows.json | 2 +- scripts/processors/utils/createSubworkflow.ts | 2 +- src/js/application.ts | 125 ++++--- src/py/mat3ra/standata/data/subworkflows.py | 2 +- src/py/mat3ra/standata/data/workflows.py | 2 +- 15 files changed, 1549 insertions(+), 126 deletions(-) diff --git a/assets/workflows/subworkflows/categories.yml b/assets/workflows/subworkflows/categories.yml index 2fb3124a..f99d30ff 100644 --- a/assets/workflows/subworkflows/categories.yml +++ b/assets/workflows/subworkflows/categories.yml @@ -212,6 +212,7 @@ entities: - filename: espresso/espresso_xml_get_qpt_irr.json categories: - espresso + - python - filename: espresso/fixed_cell_relaxation.json categories: - atomic_forces diff --git a/data/workflows/subworkflows/espresso/espresso_xml_get_qpt_irr.json b/data/workflows/subworkflows/espresso/espresso_xml_get_qpt_irr.json index 46d489c4..0d572d39 100644 --- a/data/workflows/subworkflows/espresso/espresso_xml_get_qpt_irr.json +++ b/data/workflows/subworkflows/espresso/espresso_xml_get_qpt_irr.json @@ -14,7 +14,104 @@ "data": {} } }, - "units": [], + "units": [ + { + "type": "execution", + "name": "python", + "head": true, + "results": [], + "monitors": [ + { + "name": "standard_output" + } + ], + "flowchartId": "9b8a495e-1ac1-56a7-b2e0-af1b405a1219", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "application": { + "name": "python", + "shortName": "py", + "summary": "Python Script", + "build": "GNU", + "isDefault": true, + "version": "3.10.13", + "schemaVersion": "2022.8.16" + }, + "executable": { + "preProcessors": [], + "postProcessors": [], + "isDefault": true, + "monitors": [ + { + "name": "standard_output" + } + ], + "name": "python", + "schemaVersion": "2022.8.16" + }, + "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], + "applicationName": "python", + "executableName": "python", + "input": [ + { + "name": "espresso_xml_get_qpt_irr.py" + } + ], + "monitors": [ + { + "name": "standard_output" + } + ], + "name": "espresso_xml_get_qpt_irr", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + "input": [ + { + "template": { + "applicationName": "python", + "content": "# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n{# JOB_WORK_DIR will be initialized at runtime => avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n", + "contextProviders": [], + "executableName": "python", + "name": "espresso_xml_get_qpt_irr.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false + } + ], + "context": [], + "next": "assignment", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "name": "assignment", + "type": "assignment", + "input": [ + { + "scope": "9b8a495e-1ac1-56a7-b2e0-af1b405a1219", + "name": "STDOUT" + } + ], + "operand": "Q_POINTS", + "value": "json.loads(STDOUT)", + "preProcessors": [], + "postProcessors": [], + "monitors": [], + "results": [], + "flowchartId": "assignment", + "head": false, + "schemaVersion": "2022.8.16", + "isDefault": false + } + ], "schemaVersion": "2022.8.16", "isDraft": false } diff --git a/data/workflows/subworkflows/espresso/surface_energy.json b/data/workflows/subworkflows/espresso/surface_energy.json index 0bab1866..62bce10e 100644 --- a/data/workflows/subworkflows/espresso/surface_energy.json +++ b/data/workflows/subworkflows/espresso/surface_energy.json @@ -25,10 +25,268 @@ "functional": "pbe" }, "units": [ + { + "type": "io", + "name": "io-slab", + "head": true, + "results": [], + "monitors": [], + "flowchartId": "e463ef46-a36e-5168-87dd-e21eb980dfb8", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "subtype": "input", + "source": "api", + "input": [ + { + "type": "api", + "endpoint": "materials", + "endpoint_options": { + "params": { + "query": "{'_id': MATERIAL_ID}", + "projection": "{}" + } + }, + "name": "DATA" + } + ], + "next": "ee7abb4e-7848-5aeb-960d-0d441909e2d1", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assignment", + "name": "slab", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "ee7abb4e-7848-5aeb-960d-0d441909e2d1", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [ + { + "name": "DATA", + "scope": "e463ef46-a36e-5168-87dd-e21eb980dfb8" + } + ], + "operand": "SLAB", + "value": "DATA[0]", + "next": "44263820-0c80-5bd1-b854-9da8d198eac1", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "io", + "name": "io-bulk", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "44263820-0c80-5bd1-b854-9da8d198eac1", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "subtype": "input", + "source": "api", + "input": [ + { + "type": "api", + "endpoint": "materials", + "endpoint_options": { + "params": { + "query": "{'_id': SLAB.metadata.bulkId}", + "projection": "{}" + } + }, + "name": "DATA" + } + ], + "next": "b70656f1-a394-57f4-b4de-00096969df4b", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assignment", + "name": "bulk", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "b70656f1-a394-57f4-b4de-00096969df4b", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [ + { + "name": "DATA", + "scope": "44263820-0c80-5bd1-b854-9da8d198eac1" + } + ], + "operand": "BULK", + "value": "DATA[0] if DATA else None", + "next": "6ca4006a-e3ae-56ea-91a1-06b9790b5f7e", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assertion", + "name": "assert-bulk", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "6ca4006a-e3ae-56ea-91a1-06b9790b5f7e", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "statement": "BULK != None", + "errorMessage": "Bulk material does not exist!", + "next": "490635e0-c593-5809-9eb2-c794b96cfed1", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "io", + "name": "io-e-bulk", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "490635e0-c593-5809-9eb2-c794b96cfed1", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "subtype": "input", + "source": "api", + "input": [ + { + "type": "api", + "endpoint": "refined-properties", + "endpoint_options": { + "params": { + "query": "{ 'exabyteId': BULK.exabyteId, 'data.name': 'total_energy', 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} }", + "projection": "{'sort': {'precision.value': -1}, 'limit': 1}" + } + }, + "name": "DATA" + } + ], + "next": "bbe13b97-4243-5a85-8f61-a279d0b797aa", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assignment", + "name": "e-bulk", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "bbe13b97-4243-5a85-8f61-a279d0b797aa", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [ + { + "name": "DATA", + "scope": "490635e0-c593-5809-9eb2-c794b96cfed1" + } + ], + "operand": "E_BULK", + "value": "DATA[0].data.value if DATA else None", + "next": "a06c9f43-7670-5fd0-ac42-7028a472235a", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assertion", + "name": "assert-e-bulk", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "a06c9f43-7670-5fd0-ac42-7028a472235a", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "statement": "E_BULK != None", + "errorMessage": "E_BULK does not exist!", + "next": "cdf210be-26ed-585a-b4ac-d55795ba2975", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assignment", + "name": "surface", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "cdf210be-26ed-585a-b4ac-d55795ba2975", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [], + "operand": "A", + "value": "np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))", + "next": "ffa8e43d-096a-555b-b8d0-6d283365ef47", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assignment", + "name": "n-bulk", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "ffa8e43d-096a-555b-b8d0-6d283365ef47", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [], + "operand": "N_BULK", + "value": "len(BULK.basis.elements)", + "next": "a0336ec5-a6da-5e4c-bb48-82b70cf5245f", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assignment", + "name": "n-slab", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "a0336ec5-a6da-5e4c-bb48-82b70cf5245f", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [], + "operand": "N_SLAB", + "value": "len(SLAB.basis.elements)", + "next": "9fc7a088-5533-5f70-bb33-f676ec65f565", + "schemaVersion": "2022.8.16", + "isDefault": false + }, { "type": "execution", "name": "pw_scf", - "head": true, + "head": false, "results": [ { "name": "atomic_forces" @@ -169,6 +427,53 @@ } ], "context": [], + "next": "fcd88119-817c-5ac1-a430-ba892ac743eb", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assignment", + "name": "e-slab", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "fcd88119-817c-5ac1-a430-ba892ac743eb", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [ + { + "name": "total_energy", + "scope": "9fc7a088-5533-5f70-bb33-f676ec65f565" + } + ], + "operand": "E_SLAB", + "value": "total_energy", + "next": "542ea9ad-8a07-5a76-b233-f72fb27c4fc6", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assignment", + "name": "surface-energy", + "head": false, + "results": [ + { + "name": "surface_energy" + } + ], + "monitors": [], + "flowchartId": "542ea9ad-8a07-5a76-b233-f72fb27c4fc6", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [], + "operand": "SURFACE_ENERGY", + "value": "1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))", "schemaVersion": "2022.8.16", "isDefault": false } diff --git a/data/workflows/subworkflows/vasp/surface_energy.json b/data/workflows/subworkflows/vasp/surface_energy.json index 809abcaf..ee94086b 100644 --- a/data/workflows/subworkflows/vasp/surface_energy.json +++ b/data/workflows/subworkflows/vasp/surface_energy.json @@ -25,10 +25,268 @@ "functional": "pbe" }, "units": [ + { + "type": "io", + "name": "io-slab", + "head": true, + "results": [], + "monitors": [], + "flowchartId": "e463ef46-a36e-5168-87dd-e21eb980dfb8", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "subtype": "input", + "source": "api", + "input": [ + { + "type": "api", + "endpoint": "materials", + "endpoint_options": { + "params": { + "query": "{'_id': MATERIAL_ID}", + "projection": "{}" + } + }, + "name": "DATA" + } + ], + "next": "ee7abb4e-7848-5aeb-960d-0d441909e2d1", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assignment", + "name": "slab", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "ee7abb4e-7848-5aeb-960d-0d441909e2d1", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [ + { + "name": "DATA", + "scope": "e463ef46-a36e-5168-87dd-e21eb980dfb8" + } + ], + "operand": "SLAB", + "value": "DATA[0]", + "next": "44263820-0c80-5bd1-b854-9da8d198eac1", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "io", + "name": "io-bulk", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "44263820-0c80-5bd1-b854-9da8d198eac1", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "subtype": "input", + "source": "api", + "input": [ + { + "type": "api", + "endpoint": "materials", + "endpoint_options": { + "params": { + "query": "{'_id': SLAB.metadata.bulkId}", + "projection": "{}" + } + }, + "name": "DATA" + } + ], + "next": "b70656f1-a394-57f4-b4de-00096969df4b", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assignment", + "name": "bulk", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "b70656f1-a394-57f4-b4de-00096969df4b", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [ + { + "name": "DATA", + "scope": "44263820-0c80-5bd1-b854-9da8d198eac1" + } + ], + "operand": "BULK", + "value": "DATA[0] if DATA else None", + "next": "6ca4006a-e3ae-56ea-91a1-06b9790b5f7e", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assertion", + "name": "assert-bulk", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "6ca4006a-e3ae-56ea-91a1-06b9790b5f7e", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "statement": "BULK != None", + "errorMessage": "Bulk material does not exist!", + "next": "490635e0-c593-5809-9eb2-c794b96cfed1", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "io", + "name": "io-e-bulk", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "490635e0-c593-5809-9eb2-c794b96cfed1", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "subtype": "input", + "source": "api", + "input": [ + { + "type": "api", + "endpoint": "refined-properties", + "endpoint_options": { + "params": { + "query": "{ 'exabyteId': BULK.exabyteId, 'data.name': 'total_energy', 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} }", + "projection": "{'sort': {'precision.value': -1}, 'limit': 1}" + } + }, + "name": "DATA" + } + ], + "next": "bbe13b97-4243-5a85-8f61-a279d0b797aa", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assignment", + "name": "e-bulk", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "bbe13b97-4243-5a85-8f61-a279d0b797aa", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [ + { + "name": "DATA", + "scope": "490635e0-c593-5809-9eb2-c794b96cfed1" + } + ], + "operand": "E_BULK", + "value": "DATA[0].data.value if DATA else None", + "next": "a06c9f43-7670-5fd0-ac42-7028a472235a", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assertion", + "name": "assert-e-bulk", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "a06c9f43-7670-5fd0-ac42-7028a472235a", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "statement": "E_BULK != None", + "errorMessage": "E_BULK does not exist!", + "next": "cdf210be-26ed-585a-b4ac-d55795ba2975", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assignment", + "name": "surface", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "cdf210be-26ed-585a-b4ac-d55795ba2975", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [], + "operand": "A", + "value": "np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))", + "next": "ffa8e43d-096a-555b-b8d0-6d283365ef47", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assignment", + "name": "n-bulk", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "ffa8e43d-096a-555b-b8d0-6d283365ef47", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [], + "operand": "N_BULK", + "value": "len(BULK.basis.elements)", + "next": "a0336ec5-a6da-5e4c-bb48-82b70cf5245f", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assignment", + "name": "n-slab", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "a0336ec5-a6da-5e4c-bb48-82b70cf5245f", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [], + "operand": "N_SLAB", + "value": "len(SLAB.basis.elements)", + "next": "913f756d-fbe1-548f-b3fc-f82ac46f1015", + "schemaVersion": "2022.8.16", + "isDefault": false + }, { "type": "execution", "name": "vasp_symprec", - "head": true, + "head": false, "results": [ { "name": "total_energy" @@ -210,6 +468,53 @@ } ], "context": [], + "next": "fcd88119-817c-5ac1-a430-ba892ac743eb", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assignment", + "name": "e-slab", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "fcd88119-817c-5ac1-a430-ba892ac743eb", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [ + { + "name": "total_energy", + "scope": "913f756d-fbe1-548f-b3fc-f82ac46f1015" + } + ], + "operand": "E_SLAB", + "value": "total_energy", + "next": "542ea9ad-8a07-5a76-b233-f72fb27c4fc6", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assignment", + "name": "surface-energy", + "head": false, + "results": [ + { + "name": "surface_energy" + } + ], + "monitors": [], + "flowchartId": "542ea9ad-8a07-5a76-b233-f72fb27c4fc6", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [], + "operand": "SURFACE_ENERGY", + "value": "1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))", "schemaVersion": "2022.8.16", "isDefault": false } diff --git a/data/workflows/workflows/espresso/phonon_map.json b/data/workflows/workflows/espresso/phonon_map.json index 35e0f9b7..47dcdc95 100644 --- a/data/workflows/workflows/espresso/phonon_map.json +++ b/data/workflows/workflows/espresso/phonon_map.json @@ -317,7 +317,104 @@ "data": {} } }, - "units": [], + "units": [ + { + "type": "execution", + "name": "python", + "head": true, + "results": [], + "monitors": [ + { + "name": "standard_output" + } + ], + "flowchartId": "9b8a495e-1ac1-56a7-b2e0-af1b405a1219", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "application": { + "name": "python", + "shortName": "py", + "summary": "Python Script", + "build": "GNU", + "isDefault": true, + "version": "3.10.13", + "schemaVersion": "2022.8.16" + }, + "executable": { + "preProcessors": [], + "postProcessors": [], + "isDefault": true, + "monitors": [ + { + "name": "standard_output" + } + ], + "name": "python", + "schemaVersion": "2022.8.16" + }, + "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], + "applicationName": "python", + "executableName": "python", + "input": [ + { + "name": "espresso_xml_get_qpt_irr.py" + } + ], + "monitors": [ + { + "name": "standard_output" + } + ], + "name": "espresso_xml_get_qpt_irr", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + "input": [ + { + "template": { + "applicationName": "python", + "content": "# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n{# JOB_WORK_DIR will be initialized at runtime => avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n", + "contextProviders": [], + "executableName": "python", + "name": "espresso_xml_get_qpt_irr.py", + "schemaVersion": "2022.8.16" + }, + "rendered": "", + "isManuallyChanged": false + } + ], + "context": [], + "next": "assignment", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "name": "assignment", + "type": "assignment", + "input": [ + { + "scope": "9b8a495e-1ac1-56a7-b2e0-af1b405a1219", + "name": "STDOUT" + } + ], + "operand": "Q_POINTS", + "value": "json.loads(STDOUT)", + "preProcessors": [], + "postProcessors": [], + "monitors": [], + "results": [], + "flowchartId": "assignment", + "head": false, + "schemaVersion": "2022.8.16", + "isDefault": false + } + ], "schemaVersion": "2022.8.16", "isDraft": false }, @@ -752,7 +849,7 @@ "status": "idle", "statusTrack": [], "tags": [], - "workflowId": "d380c881-756d-4160-941b-9c57c22b71e4", + "workflowId": "5cc1c6bd-9047-4b64-8e10-e5ae288bbacf", "flowchartId": "24e3c1f0-8090-512e-9727-8770071d17c8", "schemaVersion": "2022.8.16", "isDefault": false diff --git a/data/workflows/workflows/espresso/surface_energy.json b/data/workflows/workflows/espresso/surface_energy.json index 277b3fb3..beb63570 100644 --- a/data/workflows/workflows/espresso/surface_energy.json +++ b/data/workflows/workflows/espresso/surface_energy.json @@ -36,10 +36,268 @@ "functional": "pbe" }, "units": [ + { + "type": "io", + "name": "io-slab", + "head": true, + "results": [], + "monitors": [], + "flowchartId": "e463ef46-a36e-5168-87dd-e21eb980dfb8", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "subtype": "input", + "source": "api", + "input": [ + { + "type": "api", + "endpoint": "materials", + "endpoint_options": { + "params": { + "query": "{'_id': MATERIAL_ID}", + "projection": "{}" + } + }, + "name": "DATA" + } + ], + "next": "ee7abb4e-7848-5aeb-960d-0d441909e2d1", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assignment", + "name": "slab", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "ee7abb4e-7848-5aeb-960d-0d441909e2d1", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [ + { + "name": "DATA", + "scope": "e463ef46-a36e-5168-87dd-e21eb980dfb8" + } + ], + "operand": "SLAB", + "value": "DATA[0]", + "next": "44263820-0c80-5bd1-b854-9da8d198eac1", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "io", + "name": "io-bulk", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "44263820-0c80-5bd1-b854-9da8d198eac1", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "subtype": "input", + "source": "api", + "input": [ + { + "type": "api", + "endpoint": "materials", + "endpoint_options": { + "params": { + "query": "{'_id': SLAB.metadata.bulkId}", + "projection": "{}" + } + }, + "name": "DATA" + } + ], + "next": "b70656f1-a394-57f4-b4de-00096969df4b", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assignment", + "name": "bulk", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "b70656f1-a394-57f4-b4de-00096969df4b", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [ + { + "name": "DATA", + "scope": "44263820-0c80-5bd1-b854-9da8d198eac1" + } + ], + "operand": "BULK", + "value": "DATA[0] if DATA else None", + "next": "6ca4006a-e3ae-56ea-91a1-06b9790b5f7e", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assertion", + "name": "assert-bulk", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "6ca4006a-e3ae-56ea-91a1-06b9790b5f7e", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "statement": "BULK != None", + "errorMessage": "Bulk material does not exist!", + "next": "490635e0-c593-5809-9eb2-c794b96cfed1", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "io", + "name": "io-e-bulk", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "490635e0-c593-5809-9eb2-c794b96cfed1", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "subtype": "input", + "source": "api", + "input": [ + { + "type": "api", + "endpoint": "refined-properties", + "endpoint_options": { + "params": { + "query": "{ 'exabyteId': BULK.exabyteId, 'data.name': 'total_energy', 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} }", + "projection": "{'sort': {'precision.value': -1}, 'limit': 1}" + } + }, + "name": "DATA" + } + ], + "next": "bbe13b97-4243-5a85-8f61-a279d0b797aa", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assignment", + "name": "e-bulk", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "bbe13b97-4243-5a85-8f61-a279d0b797aa", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [ + { + "name": "DATA", + "scope": "490635e0-c593-5809-9eb2-c794b96cfed1" + } + ], + "operand": "E_BULK", + "value": "DATA[0].data.value if DATA else None", + "next": "a06c9f43-7670-5fd0-ac42-7028a472235a", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assertion", + "name": "assert-e-bulk", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "a06c9f43-7670-5fd0-ac42-7028a472235a", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "statement": "E_BULK != None", + "errorMessage": "E_BULK does not exist!", + "next": "cdf210be-26ed-585a-b4ac-d55795ba2975", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assignment", + "name": "surface", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "cdf210be-26ed-585a-b4ac-d55795ba2975", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [], + "operand": "A", + "value": "np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))", + "next": "ffa8e43d-096a-555b-b8d0-6d283365ef47", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assignment", + "name": "n-bulk", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "ffa8e43d-096a-555b-b8d0-6d283365ef47", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [], + "operand": "N_BULK", + "value": "len(BULK.basis.elements)", + "next": "a0336ec5-a6da-5e4c-bb48-82b70cf5245f", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assignment", + "name": "n-slab", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "a0336ec5-a6da-5e4c-bb48-82b70cf5245f", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [], + "operand": "N_SLAB", + "value": "len(SLAB.basis.elements)", + "next": "9fc7a088-5533-5f70-bb33-f676ec65f565", + "schemaVersion": "2022.8.16", + "isDefault": false + }, { "type": "execution", "name": "pw_scf", - "head": true, + "head": false, "results": [ { "name": "atomic_forces" @@ -180,6 +438,53 @@ } ], "context": [], + "next": "fcd88119-817c-5ac1-a430-ba892ac743eb", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assignment", + "name": "e-slab", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "fcd88119-817c-5ac1-a430-ba892ac743eb", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [ + { + "name": "total_energy", + "scope": "9fc7a088-5533-5f70-bb33-f676ec65f565" + } + ], + "operand": "E_SLAB", + "value": "total_energy", + "next": "542ea9ad-8a07-5a76-b233-f72fb27c4fc6", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assignment", + "name": "surface-energy", + "head": false, + "results": [ + { + "name": "surface_energy" + } + ], + "monitors": [], + "flowchartId": "542ea9ad-8a07-5a76-b233-f72fb27c4fc6", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [], + "operand": "SURFACE_ENERGY", + "value": "1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))", "schemaVersion": "2022.8.16", "isDefault": false } diff --git a/data/workflows/workflows/vasp/surface_energy.json b/data/workflows/workflows/vasp/surface_energy.json index cb491007..3fdfc8eb 100644 --- a/data/workflows/workflows/vasp/surface_energy.json +++ b/data/workflows/workflows/vasp/surface_energy.json @@ -36,10 +36,268 @@ "functional": "pbe" }, "units": [ + { + "type": "io", + "name": "io-slab", + "head": true, + "results": [], + "monitors": [], + "flowchartId": "e463ef46-a36e-5168-87dd-e21eb980dfb8", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "subtype": "input", + "source": "api", + "input": [ + { + "type": "api", + "endpoint": "materials", + "endpoint_options": { + "params": { + "query": "{'_id': MATERIAL_ID}", + "projection": "{}" + } + }, + "name": "DATA" + } + ], + "next": "ee7abb4e-7848-5aeb-960d-0d441909e2d1", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assignment", + "name": "slab", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "ee7abb4e-7848-5aeb-960d-0d441909e2d1", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [ + { + "name": "DATA", + "scope": "e463ef46-a36e-5168-87dd-e21eb980dfb8" + } + ], + "operand": "SLAB", + "value": "DATA[0]", + "next": "44263820-0c80-5bd1-b854-9da8d198eac1", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "io", + "name": "io-bulk", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "44263820-0c80-5bd1-b854-9da8d198eac1", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "subtype": "input", + "source": "api", + "input": [ + { + "type": "api", + "endpoint": "materials", + "endpoint_options": { + "params": { + "query": "{'_id': SLAB.metadata.bulkId}", + "projection": "{}" + } + }, + "name": "DATA" + } + ], + "next": "b70656f1-a394-57f4-b4de-00096969df4b", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assignment", + "name": "bulk", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "b70656f1-a394-57f4-b4de-00096969df4b", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [ + { + "name": "DATA", + "scope": "44263820-0c80-5bd1-b854-9da8d198eac1" + } + ], + "operand": "BULK", + "value": "DATA[0] if DATA else None", + "next": "6ca4006a-e3ae-56ea-91a1-06b9790b5f7e", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assertion", + "name": "assert-bulk", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "6ca4006a-e3ae-56ea-91a1-06b9790b5f7e", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "statement": "BULK != None", + "errorMessage": "Bulk material does not exist!", + "next": "490635e0-c593-5809-9eb2-c794b96cfed1", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "io", + "name": "io-e-bulk", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "490635e0-c593-5809-9eb2-c794b96cfed1", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "subtype": "input", + "source": "api", + "input": [ + { + "type": "api", + "endpoint": "refined-properties", + "endpoint_options": { + "params": { + "query": "{ 'exabyteId': BULK.exabyteId, 'data.name': 'total_energy', 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} }", + "projection": "{'sort': {'precision.value': -1}, 'limit': 1}" + } + }, + "name": "DATA" + } + ], + "next": "bbe13b97-4243-5a85-8f61-a279d0b797aa", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assignment", + "name": "e-bulk", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "bbe13b97-4243-5a85-8f61-a279d0b797aa", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [ + { + "name": "DATA", + "scope": "490635e0-c593-5809-9eb2-c794b96cfed1" + } + ], + "operand": "E_BULK", + "value": "DATA[0].data.value if DATA else None", + "next": "a06c9f43-7670-5fd0-ac42-7028a472235a", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assertion", + "name": "assert-e-bulk", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "a06c9f43-7670-5fd0-ac42-7028a472235a", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "statement": "E_BULK != None", + "errorMessage": "E_BULK does not exist!", + "next": "cdf210be-26ed-585a-b4ac-d55795ba2975", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assignment", + "name": "surface", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "cdf210be-26ed-585a-b4ac-d55795ba2975", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [], + "operand": "A", + "value": "np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))", + "next": "ffa8e43d-096a-555b-b8d0-6d283365ef47", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assignment", + "name": "n-bulk", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "ffa8e43d-096a-555b-b8d0-6d283365ef47", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [], + "operand": "N_BULK", + "value": "len(BULK.basis.elements)", + "next": "a0336ec5-a6da-5e4c-bb48-82b70cf5245f", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assignment", + "name": "n-slab", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "a0336ec5-a6da-5e4c-bb48-82b70cf5245f", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [], + "operand": "N_SLAB", + "value": "len(SLAB.basis.elements)", + "next": "913f756d-fbe1-548f-b3fc-f82ac46f1015", + "schemaVersion": "2022.8.16", + "isDefault": false + }, { "type": "execution", "name": "vasp_symprec", - "head": true, + "head": false, "results": [ { "name": "total_energy" @@ -221,6 +479,53 @@ } ], "context": [], + "next": "fcd88119-817c-5ac1-a430-ba892ac743eb", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assignment", + "name": "e-slab", + "head": false, + "results": [], + "monitors": [], + "flowchartId": "fcd88119-817c-5ac1-a430-ba892ac743eb", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [ + { + "name": "total_energy", + "scope": "913f756d-fbe1-548f-b3fc-f82ac46f1015" + } + ], + "operand": "E_SLAB", + "value": "total_energy", + "next": "542ea9ad-8a07-5a76-b233-f72fb27c4fc6", + "schemaVersion": "2022.8.16", + "isDefault": false + }, + { + "type": "assignment", + "name": "surface-energy", + "head": false, + "results": [ + { + "name": "surface_energy" + } + ], + "monitors": [], + "flowchartId": "542ea9ad-8a07-5a76-b233-f72fb27c4fc6", + "preProcessors": [], + "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], + "input": [], + "operand": "SURFACE_ENERGY", + "value": "1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))", "schemaVersion": "2022.8.16", "isDefault": false } diff --git a/dist/js/application.d.ts b/dist/js/application.d.ts index 9da4bb67..2d6a45b5 100644 --- a/dist/js/application.d.ts +++ b/dist/js/application.d.ts @@ -1,6 +1,5 @@ -import type { ApplicationSchema, FlavorSchema, TemplateSchema } from "@mat3ra/esse/dist/js/types"; +import type { ApplicationSchema, ExecutableSchema, FlavorSchema, TemplateSchema } from "@mat3ra/esse/dist/js/types"; import { Standata } from "./base"; -import { type ExecutableTreeItem } from "./types/application"; export declare enum TAGS { DEFAULT = "default", DEFAULT_VERSION = "default_version", @@ -80,8 +79,9 @@ export declare class ApplicationStandata extends Standata { }[]; }; }; + private appCache; private getAppDataForApplication; - private getAppTreeForApplication; + private getApplicationExecutablesTree; getAllAppTemplates(): TemplateSchema[]; getAllAppTree(): { espresso: { @@ -1990,26 +1990,11 @@ export declare class ApplicationStandata extends Standata { getApplications(): ApplicationSchema[]; getApplicationTreeItem(appName: string): ApplicationTreeItem; getApplication({ name, version, build }: ApplicationConfig): ApplicationSchema; - getExecutableByName(appName: string, execName?: string): ExecutableTreeItem; - /** - * - * @deprecated use getExecutableByName directly - */ - getExecutableByConfig(appName: string, config?: { - name: string; - }): ExecutableTreeItem; + getExecutableByName(appName: string, execName?: string): ExecutableSchema; getExecutableAndFlavorByName(appName: string, execName?: string, flavorName?: string): { - executable: ExecutableTreeItem; + executable: ExecutableSchema; flavor: FlavorSchema; }; - getFlavorByName(executable: ExecutableTreeItem, name?: string): FlavorSchema | undefined; - /** - * @deprecated use getFlavorByName directly - */ - getFlavorByConfig(executable: ExecutableTreeItem, config?: { - name: string; - }): FlavorSchema | undefined; - getExecutableFlavors(executable: ExecutableTreeItem): FlavorSchema[]; getInput(flavor: FlavorSchema): TemplateSchema[]; } export {}; diff --git a/dist/js/application.js b/dist/js/application.js index c82d7b48..689b142a 100644 --- a/dist/js/application.js +++ b/dist/js/application.js @@ -19,6 +19,10 @@ var TAGS; TAGS["DEFAULT_BUILD"] = "default_build"; })(TAGS = exports.TAGS || (exports.TAGS = {})); class ApplicationStandata extends base_1.Standata { + constructor() { + super(...arguments); + this.appCache = {}; + } getAppDataForApplication(appName) { const applicationVersionsMap = APP_VERSIONS[appName]; if (!applicationVersionsMap) { @@ -26,25 +30,40 @@ class ApplicationStandata extends base_1.Standata { } return applicationVersionsMap; } - getAppTreeForApplication(appName) { + getApplicationExecutablesTree(appName) { + if (appName in this.appCache) { + return this.appCache[appName]; + } // TODO: Convert to use this.findEntitiesByTags() when tree data is in Standata format const executableData = EXECUTABLE_FLAVOR; if (!(appName in executableData)) { throw new Error(`${appName} is not a known application with executable tree.`); } const appTree = executableData[appName]; - return Object.fromEntries(Object.entries(appTree).map(([name, exec]) => { + this.appCache[appName] = Object.fromEntries(Object.entries(appTree).map(([name, { flavors, ...executable }]) => { return [ name, { - preProcessors: [], - postProcessors: [], - applicationId: [], - ...exec, - name, + executable: { + preProcessors: [], + postProcessors: [], + applicationId: [], + ...executable, + name, + }, + flavors: Object.entries(flavors).map(([name, value]) => { + return { + preProcessors: [], + postProcessors: [], + results: [], + ...value, + name, + }; + }), }, ]; })); + return this.appCache[appName]; } getAllAppTemplates() { // TODO: Convert to use this.getAll() when template data is in Standata format @@ -178,49 +197,32 @@ class ApplicationStandata extends base_1.Standata { return application; } getExecutableByName(appName, execName) { - const appTree = this.getAppTreeForApplication(appName); - const config = execName && appTree[execName] - ? appTree[execName] - : Object.values(appTree).find((exec) => exec.isDefault); + const appTree = this.getApplicationExecutablesTree(appName); + const config = (execName && appTree[execName]) || + Object.values(appTree).find((exec) => exec.executable.isDefault); if (!config) { throw new Error(`Executable ${execName} not found for application ${appName}`); } - return config; - } - /** - * - * @deprecated use getExecutableByName directly - */ - getExecutableByConfig(appName, config) { - return this.getExecutableByName(appName, config === null || config === void 0 ? void 0 : config.name); + return config.executable; } getExecutableAndFlavorByName(appName, execName, flavorName) { - const executable = this.getExecutableByName(appName, execName); - const flavor = this.getFlavorByName(executable, flavorName); + const appTree = this.getApplicationExecutablesTree(appName); + const config = (execName && appTree[execName]) || + Object.values(appTree).find((exec) => exec.executable.isDefault); + if (!config) { + throw new Error(`Executable ${execName} not found for application ${appName}`); + } + const { executable, flavors } = config; + const flavor = flavors.find((value) => { + return flavorName ? value.name === flavorName : value.isDefault; + }); if (!flavor) { throw new Error(`Flavor ${flavorName} not found for executable ${execName} in application ${appName}`); } - return { executable, flavor }; - } - getFlavorByName(executable, name) { - return this.getExecutableFlavors(executable).find((flavor) => name ? flavor.name === name : flavor.isDefault); - } - /** - * @deprecated use getFlavorByName directly - */ - getFlavorByConfig(executable, config) { - return this.getFlavorByName(executable, config === null || config === void 0 ? void 0 : config.name); - } - getExecutableFlavors(executable) { - return Object.entries(executable.flavors).map(([key, value]) => { - return { - preProcessors: [], - postProcessors: [], - results: [], - ...value, - name: key, - }; - }); + return { + executable, + flavor, + }; } getInput(flavor) { const appName = flavor.applicationName || ""; diff --git a/dist/js/runtime_data/subworkflows.json b/dist/js/runtime_data/subworkflows.json index 7a8740c8..7810666f 100644 --- a/dist/js/runtime_data/subworkflows.json +++ b/dist/js/runtime_data/subworkflows.json @@ -1 +1 @@ -{"filesMapByName":{"espresso/average_electrostatic_potential.json":{"_id":"7f2f8a38-c3bd-5aa9-b3b0-2c367287dd60","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Average Electrostatic Potential","properties":["atomic_forces","average_potential_profile","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average_potential","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average ESP","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/average_electrostatic_potential_find_minima.json":{"_id":"e5bee93f-2b6b-5d91-9a53-5ed309a918d3","application":{"name":"espresso"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Find ESP Value","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"generic:processing:find_extrema:scipy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"python-find-extrema","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema"}],"isDefault":false,"monitors":[],"name":"Set Average ESP Value","operand":"AVG_ESP","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},"espresso/average_electrostatic_potential_via_band_structure.json":{"_id":"09f5f4ff-7dbd-59ae-ad27-5af1bdfc2bd0","application":{"name":"espresso"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure + average ESP","properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"2d360607-c739-54ad-97a0-8a83f0971f2c","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Material Index","next":"9fc7a088-5533-5f70-bb33-f676ec65f565","operand":"MATERIAL_INDEX","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap"}],"isDefault":false,"monitors":[],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Set Valence Band Maximum","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","operand":"VBM","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average_potential","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential"}],"isDefault":false,"monitors":[],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},"espresso/band_gap.json":{"_id":"233bb8cf-3b4a-5378-84d9-a6a95a2ab43d","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Gap","properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16"},"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_gap_hse_dos.json":{"_id":"f1341a29-777d-5ca3-8933-78a5e0d3f6f2","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"hse06","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"hybrid","type":"dft"},"name":"HSE Band Gap","properties":["atomic_forces","band_gaps","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_hse.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_hse","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"f494cdb2-304f-5da2-b979-ce3fbba3a6c4","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = {% if kgrid.dimensions[0]%2 == 0 %}{{kgrid.dimensions[0]/2}}{% else %}{{(kgrid.dimensions[0]+1)/2}}{% endif %}, nqx2 = {% if kgrid.dimensions[1]%2 == 0 %}{{kgrid.dimensions[1]/2}}{% else %}{{(kgrid.dimensions[1]+1)/2}}{% endif %}, nqx3 = {% if kgrid.dimensions[2]%2 == 0 %}{{kgrid.dimensions[2]/2}}{% else %}{{(kgrid.dimensions[2]+1)/2}}{% endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{% if d%2 == 0 %}{{d}} {% else %}{{d+1}} {% endif %}{% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_hse.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_hse","next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"schemaVersion":"2022.8.16"},"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure.json":{"_id":"26d32e68-c2b5-50e9-8933-15f684fcc039","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"d618df45-5af3-5da5-8882-d74a27e00b04","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure_dos.json":{"_id":"fa594399-6b98-5d79-986c-0713601dc06c","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure + Density of States","properties":["atomic_forces","band_gaps","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"d618df45-5af3-5da5-8882-d74a27e00b04","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16"},"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"schemaVersion":"2022.8.16"},"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure_hse.json":{"_id":"ef3089f3-7460-56f2-9aa2-172d5339d3be","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"hse06","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"hybrid","type":"dft"},"name":"Band Structure - HSE","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_bands_hse.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_bands_hse","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"08bd7e4a-2454-53b7-8cc9-9a95975f7e6f","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n {% for d in qgrid.dimensions -%}\n nqx{{loop.index}} = {{d}}\n {% endfor %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal\n{{ '{{' }} {{ explicitKPath.length }} {% raw %} + KPOINTS|length {% endraw %} {{ '}}' }}\n{% raw %}\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n{% endraw %}\n{% for point in explicitKPath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}0.0000001\n{% endfor %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPathFormDataManager"}],"executableName":"pw.x","name":"pw_scf_bands_hse.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_bands_hse","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure_magn.json":{"_id":"4a7dced1-224e-57d7-a616-cbad99062c7b","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Spin magnetic bandstructure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_magn.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_magn","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"c229d2a0-3c19-5f13-b3e0-ceb86cb9fbc1","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_magn.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_magn","next":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_magn.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands_magn","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_magn.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands_magn","next":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_up.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands_spin_up","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_up.dat'{% endraw %}\n spin_component = 1\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_up.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands_spin_up","next":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_dn.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands_spin_dn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_dn.dat'{% endraw %}\n spin_component = 2\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_dn.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands_spin_dn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure_soc.json":{"_id":"51e6fb82-538a-58ee-8d4e-991c8446f657","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{"searchText":"nc-fr"},"subtype":"nc-fr","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Spin orbit coupling bandstructure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_soc.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_soc","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"74ec024a-f247-5f15-9c21-cc169bcb62c7","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_soc.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_soc","next":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_soc.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands_soc","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_soc.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands_soc","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/dielectric_tensor.json":{"_id":"38340b52-83ad-5862-bc18-c140bdc0cb72","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"nc","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Compute Dielectric Function","properties":["atomic_forces","band_gaps","dielectric_tensor","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"3b230ec3-0791-52f7-a4db-625390b8718f","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"3b230ec3-0791-52f7-a4db-625390b8718f","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Set No-Symmetry Flag","next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","operand":"NO_SYMMETRY_NO_INVERSION","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":true},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16"},"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","next":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"epsilon.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"epsilon.x","input":[{"name":"epsilon.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"dielectric_tensor","postProcessors":[],"preProcessors":[],"results":[{"name":"dielectric_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n","contextProviders":[],"executableName":"epsilon.x","name":"epsilon.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Compute dielectric function","postProcessors":[],"preProcessors":[],"results":[{"name":"dielectric_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/dos.json":{"_id":"2cf317f3-3306-5a96-bc9b-e9103ebcd5be","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Density of States","properties":["atomic_forces","band_gaps","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16"},"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"schemaVersion":"2022.8.16"},"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/electronic_density_mesh.json":{"_id":"e2749c5a-fcd9-589c-819b-8b88c5c90924","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Electronic Density Mesh","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_density.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_density","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_density.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_density","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/esm.json":{"_id":"0de669f6-a455-5dae-b331-19dc85f7090f","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Effective Screening Medium (ESM)","properties":["atomic_forces","charge_density_profile","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_esm","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"2f487bc6-c237-53e4-bad5-be60369662cb","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_esm","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/esm_relax.json":{"_id":"69728792-afeb-50aa-9b4e-6974a90f676a","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Effective Screening Medium (ESM) Relax","properties":["atomic_forces","charge_density_profile","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm_relax.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_esm_relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"a2bec506-1fdd-5125-a787-85f31cde20c1","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm_relax.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_esm_relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/espresso_extract_kpoints.json":{"_id":"a2785cc5-2427-5c7a-b30f-7077475b948c","application":{"name":"espresso"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Extract KPOINTS","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"espresso_extract_kpoints.py"},{"name":"requirements.txt","templateName":"requirements_empty.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"espresso_extract_kpoints","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"a716b133-2d04-50b5-b497-100265e3fa24","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_extract_kpoints.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Extract kpoints","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/espresso_xml_get_qpt_irr.json":{"_id":"e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a","application":{"name":"espresso"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"espresso-xml-get-qpt-irr","properties":[],"schemaVersion":"2022.8.16","units":[]},"espresso/fixed_cell_relaxation.json":{"_id":"fb75e249-5489-5146-bd8a-786d33330d9c","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Fixed-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_relax.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"c42871f6-ab79-5987-b228-c3bd80f16ffd","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_relax.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/gw_band_structure_band_gap_full_frequency.json":{"_id":"46bcdcc8-628e-518e-b8c3-9bf38d7a2aef","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{"searchText":".*dojo-oncv.*"},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Full Frequency GW Band Structure + Band Gap","properties":["atomic_forces","band_gaps","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"gw.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_full_frequency.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"gw_bands_full_frequency","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16"},"flowchartId":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_full_frequency.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"gw_bands_full_frequency","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/gw_band_structure_band_gap_plasmon_pole.json":{"_id":"72b79a87-8eef-5fe2-9d6c-6c9c256dd56c","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{"searchText":".*dojo-oncv.*"},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Plasmon-Pole GW Band Structure + Band Gap","properties":["atomic_forces","band_gaps","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"gw.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_plasmon_pole.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"gw_bands_plasmon_pole","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16"},"flowchartId":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_plasmon_pole.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"gw_bands_plasmon_pole","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/kpoint_convergence.json":{"_id":"ff6a8fbc-2202-5786-9a26-67c843417d0b","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"K-point Convergence","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"init-tolerance","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Init tolerance","next":"init-increment","operand":"TOL","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0.00001},{"flowchartId":"init-increment","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init increment","next":"init-result","operand":"INC","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"flowchartId":"init-result","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init result","next":"init-parameter","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0},{"flowchartId":"init-parameter","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init parameter","next":"pwscf-kpoint-convergence","operand":"PARAMETER","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_kpt_conv.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_kpt_conv","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"pwscf-kpoint-convergence","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0{% endraw %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_kpt_conv.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_kpt_conv","next":"store-result","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"store-result","head":false,"input":[{"name":"total_energy","scope":"pwscf-kpoint-convergence"}],"isDefault":false,"monitors":[],"name":"store result","next":"check-convergence","operand":"RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"else":"update-result","flowchartId":"check-convergence","head":false,"input":[],"isDefault":false,"maxOccurrences":50,"monitors":[],"name":"check convergence","next":"update-result","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","status":"idle","statusTrack":[],"tags":[],"then":"convergence-is-reached","type":"condition"},{"flowchartId":"update-result","head":false,"input":[{"name":"RESULT","scope":"global"}],"isDefault":false,"monitors":[],"name":"update result","next":"increment-parameter","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"RESULT"},{"flowchartId":"increment-parameter","head":false,"input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"isDefault":false,"monitors":[],"name":"increment parameter","next":"pwscf-kpoint-convergence","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER+INC"},{"flowchartId":"convergence-is-reached","head":false,"input":[{"name":"PARAMETER","scope":"global"}],"isDefault":false,"monitors":[],"name":"exit","operand":"PARAMETER","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER"}]},"espresso/neb.json":{"_id":"c9034468-df28-5357-8912-02226f919042","application":{"name":"espresso"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Nudged Elastic Band (NEB)","properties":["reaction_energy_barrier","reaction_energy_profile"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"neb.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"neb.x","input":[{"name":"neb.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"neb","postProcessors":[],"preProcessors":[],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"9f273ca0-d240-5b1f-89a9-64dd579304ac","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = {{ 2 + (input.INTERMEDIATE_IMAGES.length or neb.nImages) }},\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_first = false %}\n{%- for position in input.FIRST_IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_first = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.FIRST_IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_first %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n{%- for IMAGE in input.INTERMEDIATE_IMAGES %}\nINTERMEDIATE_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_intermediate = false %}\n{%- for position in IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_intermediate = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_intermediate %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n{%- endfor %}\nLAST_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_last = false %}\n{%- for position in input.LAST_IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_last = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.LAST_IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_last %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nEND_POSITIONS\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nEND_ENGINE_INPUT\nEND\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"NEBFormDataManager"},{"name":"QENEBInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"neb.x","name":"neb.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"neb","postProcessors":[],"preProcessors":[],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/ph_init_qpoints.json":{"_id":"2f017bcb-f4ba-55b8-b939-1f780679a88e","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"ph-init-qpoints","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_init_qpoints.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_init_qpoints","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"b8ea6a33-38f3-5434-b17e-b5eae8fff9fc","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_init_qpoints.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_init_qpoints","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/ph_single_irr_qpt.json":{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"ph-single-irr-qpt","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_single_irr_qpt.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_single_irr_qpt","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"8db9af08-d935-57a0-a824-e7db6d936de8","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_single_irr_qpt.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_single_irr_qpt","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/phonon_dispersions.json":{"_id":"bfb69b48-8fbf-5a0d-8949-448f20754766","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Phonon Dispersions","properties":["atomic_forces","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"13bcafce-56ef-5b47-b079-317495eb6933","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16"},"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","next":"a7fded20-889b-54fc-bbb0-456e82689ab1","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"schemaVersion":"2022.8.16"},"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/phonon_dos.json":{"_id":"2232051b-9f2a-5a48-9b4d-6231eb6e8297","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Phonon Density of States","properties":["atomic_forces","fermi_energy","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"13bcafce-56ef-5b47-b079-317495eb6933","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16"},"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","next":"8fe6a24b-c994-55a2-a448-88657292e8c2","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16"},"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/phonon_dos_dispersion.json":{"_id":"291d25cd-378a-5be7-9d85-c8013a4b165b","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Phonon Density of States + Dispersions","properties":["atomic_forces","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"13bcafce-56ef-5b47-b079-317495eb6933","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16"},"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","next":"8fe6a24b-c994-55a2-a448-88657292e8c2","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16"},"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","next":"a7fded20-889b-54fc-bbb0-456e82689ab1","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"schemaVersion":"2022.8.16"},"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/phonon_reduce.json":{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"reduce","properties":["phonon_dispersions","phonon_dos"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid_restart.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid_restart","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb206177-a4af-599a-81ba-6c88d24253b6","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid_restart.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid_restart","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","next":"8fe6a24b-c994-55a2-a448-88657292e8c2","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16"},"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","next":"a7fded20-889b-54fc-bbb0-456e82689ab1","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"schemaVersion":"2022.8.16"},"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/plot_wavefunction.json":{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","application":{"name":"espresso"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Plot Wavefunction","properties":["file_content"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"plot_wavefunction","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"57fca898-8e8b-5ef2-81a5-9d2b612bc18d","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"plot WFN","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/post_processor.json":{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","application":{"name":"espresso"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"post-processor","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_collect_dynmat.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"espresso_collect_dynmat","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_collect_dynmat.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/pre_processor.json":{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","application":{"name":"espresso"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"pre-processor","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_link_outdir_save.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"espresso_link_outdir_save","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_link_outdir_save.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/pw_scf.json":{"_id":"f52b8039-83d0-5485-a1f1-0bc37cb01ed3","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"pw-scf","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/recalculate_bands.json":{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Recalculate Bands","properties":["band_structure"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/surface_energy.json":{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Surface Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/total_energy.json":{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Total Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","tags":["default"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/valence_band_offset_calc_from_previous_esp_vbm.json":{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","application":{"name":"espresso"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Calculate VBO","properties":["valence_band_offset"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Difference of valence band maxima","next":"2626f7bb-d392-5fd4-ab71-329b508de347","operand":"VBM_DIFF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"VBM_LEFT - VBM_RIGHT"},{"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Difference of macroscopically averaged ESP in bulk","next":"b7307787-53e2-599b-ad12-d627b04074b4","operand":"AVG_ESP_DIFF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]"},{"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Lineup of macroscopically averaged ESP in interface","next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","operand":"ESP_LINEUP","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])"},{"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Valence Band Offset","operand":"VALENCE_BAND_OFFSET","postProcessors":[],"preProcessors":[],"results":[{"name":"valence_band_offset"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))"}]},"espresso/variable_cell_relaxation.json":{"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Variable-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","systemName":"espresso-variable-cell-relaxation","tags":["variable-cell_relaxation"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/wavefunction_amplitude.json":{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Wavefunction Amplitude","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"schemaVersion":"2022.8.16","tags":["wfn","wfn_plot"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-scf","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"extract-band-energies","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"band_structure"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"extract-band-energies","head":false,"input":[{"name":"band_structure","scope":"pw-scf"}],"isDefault":false,"monitors":[],"name":"Extract Band Energies","next":"indices-below-fermi","operand":"band_energies","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]"},{"flowchartId":"indices-below-fermi","head":false,"input":[{"name":"fermi_energy","scope":"pw-scf"}],"isDefault":false,"monitors":[],"name":"Find Indices Below Fermi","next":"8771dc7f-878e-5f13-a840-a3a416854f1e","operand":"indices_below_fermi","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]"},{"flowchartId":"8771dc7f-878e-5f13-a840-a3a416854f1e","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Store Band Below EF","next":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","operand":"KBAND_VALUE_BELOW_EF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1"},{"flowchartId":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Select Band","next":"pp-wfn","operand":"KBAND_VALUE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"KBAND_VALUE_BELOW_EF"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_wfn","postProcessors":[],"preProcessors":[],"results":[{"name":"wavefunction_amplitude"}],"schemaVersion":"2022.8.16"},"flowchartId":"pp-wfn","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_wfn.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_wfn","postProcessors":[],"preProcessors":[],"results":[{"name":"wavefunction_amplitude"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/zero_point_energy.json":{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Zero Point Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"107595d1-490f-53a2-8432-7f8a12f14d96","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_gamma","postProcessors":[],"preProcessors":[],"results":[{"name":"zero_point_energy"}],"schemaVersion":"2022.8.16"},"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_zpe","postProcessors":[],"preProcessors":[],"results":[{"name":"zero_point_energy"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"nwchem/total_energy.json":{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","application":{"name":"nwchem"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"pople","type":"localorbital"},"subtype":"gga","type":"dft"},"name":"Total Energy","properties":["total_energy","total_energy_contributions"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"nwchem","schemaVersion":"2022.8.16","shortName":"nwchem","summary":"NWChem","version":"7.0.2"},"context":[],"executable":{"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem","postProcessors":[{"name":"error_handler"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"schemaVersion":"2022.8.16"},"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"python/ml/classification_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"name":"python"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:random_forest_classification:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:roc_curve:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ROC Curve Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]},"python/ml/clustering_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"name":"python"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_k_means_clustering_sklearn.py","templateName":"model_k_means_clustering_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:k_means_clustering:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_k_means_clustering_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"9c95c27b-c8bd-5e8b-8829-d354611decef","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_pca_2d_clusters_matplotlib.py","templateName":"post_processing_pca_2d_clusters_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:pca_2d_clusters:matplotlib","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"9c95c27b-c8bd-5e8b-8829-d354611decef","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_pca_2d_clusters_matplotlib.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"2D PCA Clusters Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"},{"name":"file_content"},{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]},"python/ml/regression_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"name":"python"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:multilayer_perceptron:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:parity_plot:matplotlib","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Parity Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]},"python/ml/train_head.json":{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"name":"python"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"schemaVersion":"2022.8.16","units":[{"flowchartId":"head-set-predict-status","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Dataset","next":"head-branch-on-predict-status","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"isDefault":false,"maxOccurrences":100,"monitors":[],"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"flowchartId":"end-of-ml-train-head","head":false,"input":[],"isDefault":false,"monitors":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},"python/python_script.json":{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","application":{"name":"python"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Python Script","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"shell/batch_espresso_pwscf.json":{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","application":{"name":"shell"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Batch Job (Espresso PWSCF)","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"job_espresso_pw_scf","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"shell/hello_world.json":{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","application":{"name":"shell"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Hello World","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/band_gap.json":{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","application":{"name":"vasp"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Gap","properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"f0d65517-9592-5bc8-948e-a0851a766cbb","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"schemaVersion":"2022.8.16"},"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/band_structure.json":{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","application":{"name":"vasp"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/band_structure_dos.json":{"_id":"d38fea11-9781-5151-8dae-d705381498be","application":{"name":"vasp"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure + Density of States","properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/dos.json":{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","application":{"name":"vasp"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Density of States","properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/fixed_cell_relaxation.json":{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","application":{"name":"vasp"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Fixed-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","postProcessors":[{"name":"prepare_restart"}],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","postProcessors":[{"name":"prepare_restart"}],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/initial_final_total_energies.json":{"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","application":{"name":"vasp"},"compute":{"arguments":{"nband":1,"ndiag":1,"nimage":1,"npools":1,"ntg":1},"cluster":{"fqdn":""},"isRestartable":true,"nodes":1,"notify":"n","ppn":1,"queue":"D","timeLimit":"01:00:00","timeLimitType":"per single attempt"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Initial/Final Total Energies","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","next":"e65a17ce-10c8-5710-ad4d-fb3d42434091","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/kpoint_convergence.json":{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","application":{"name":"vasp"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"K-point Convergence","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"init-tolerance","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Init tolerance","next":"init-increment","operand":"TOL","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0.00001},{"flowchartId":"init-increment","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init increment","next":"init-result","operand":"INC","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"flowchartId":"init-result","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init result","next":"init-parameter","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0},{"flowchartId":"init-parameter","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init parameter","next":"vasp-kpoint-convergence","operand":"PARAMETER","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"vasp-kpoint-convergence","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","next":"store-result","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"store-result","head":false,"input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"isDefault":false,"monitors":[],"name":"store result","next":"check-convergence","operand":"RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"else":"update-result","flowchartId":"check-convergence","head":false,"input":[],"isDefault":false,"maxOccurrences":50,"monitors":[],"name":"check convergence","next":"update-result","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","status":"idle","statusTrack":[],"tags":[],"then":"convergence-is-reached","type":"condition"},{"flowchartId":"update-result","head":false,"input":[{"name":"RESULT","scope":"global"}],"isDefault":false,"monitors":[],"name":"update result","next":"increment-parameter","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"RESULT"},{"flowchartId":"increment-parameter","head":false,"input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"isDefault":false,"monitors":[],"name":"increment parameter","next":"vasp-kpoint-convergence","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER+INC"},{"flowchartId":"convergence-is-reached","head":false,"input":[{"name":"PARAMETER","scope":"global"}],"isDefault":false,"monitors":[],"name":"exit","operand":"PARAMETER","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER"}]},"vasp/neb_subworkflow.json":{"_id":"e6215fb9-e60c-541b-b73e-b077d64b3a95","application":{"name":"vasp"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Nudged Elastic Band (NEB)","properties":["reaction_energy_barrier","reaction_energy_profile"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB"},{"name":"KPOINTS","templateName":"KPOINTS"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"vasp_neb","postProcessors":[],"preProcessors":[],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"9a1660ab-8067-5fad-9fb8-7c039f634636","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISTART = 0\nIBRION = 1\nEDIFFG = -0.001\nENCUT = 500\nNELM = 100\nNSW = 100\nIMAGES = {{ input.INTERMEDIATE_IMAGES.length or neb.nImages }}\nSPRING = -5\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"vasp_neb","postProcessors":[],"preProcessors":[],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/prepare_images.json":{"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","application":{"name":"vasp"},"isDraft":false,"isMultiMaterial":true,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Prepare Directories","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bash_vasp_prepare_neb_images","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR <=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema"}],"isDefault":false,"monitors":[],"name":"Set Average ESP Value","operand":"AVG_ESP","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},"espresso/average_electrostatic_potential_via_band_structure.json":{"_id":"09f5f4ff-7dbd-59ae-ad27-5af1bdfc2bd0","application":{"name":"espresso"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure + average ESP","properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"2d360607-c739-54ad-97a0-8a83f0971f2c","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Material Index","next":"9fc7a088-5533-5f70-bb33-f676ec65f565","operand":"MATERIAL_INDEX","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap"}],"isDefault":false,"monitors":[],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Set Valence Band Maximum","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","operand":"VBM","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average_potential","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential"}],"isDefault":false,"monitors":[],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},"espresso/band_gap.json":{"_id":"233bb8cf-3b4a-5378-84d9-a6a95a2ab43d","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Gap","properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16"},"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_gap_hse_dos.json":{"_id":"f1341a29-777d-5ca3-8933-78a5e0d3f6f2","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"hse06","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"hybrid","type":"dft"},"name":"HSE Band Gap","properties":["atomic_forces","band_gaps","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_hse.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_hse","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"f494cdb2-304f-5da2-b979-ce3fbba3a6c4","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = {% if kgrid.dimensions[0]%2 == 0 %}{{kgrid.dimensions[0]/2}}{% else %}{{(kgrid.dimensions[0]+1)/2}}{% endif %}, nqx2 = {% if kgrid.dimensions[1]%2 == 0 %}{{kgrid.dimensions[1]/2}}{% else %}{{(kgrid.dimensions[1]+1)/2}}{% endif %}, nqx3 = {% if kgrid.dimensions[2]%2 == 0 %}{{kgrid.dimensions[2]/2}}{% else %}{{(kgrid.dimensions[2]+1)/2}}{% endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{% if d%2 == 0 %}{{d}} {% else %}{{d+1}} {% endif %}{% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_hse.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_hse","next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"schemaVersion":"2022.8.16"},"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure.json":{"_id":"26d32e68-c2b5-50e9-8933-15f684fcc039","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"d618df45-5af3-5da5-8882-d74a27e00b04","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure_dos.json":{"_id":"fa594399-6b98-5d79-986c-0713601dc06c","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure + Density of States","properties":["atomic_forces","band_gaps","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"d618df45-5af3-5da5-8882-d74a27e00b04","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16"},"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"schemaVersion":"2022.8.16"},"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure_hse.json":{"_id":"ef3089f3-7460-56f2-9aa2-172d5339d3be","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"hse06","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"hybrid","type":"dft"},"name":"Band Structure - HSE","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_bands_hse.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_bands_hse","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"08bd7e4a-2454-53b7-8cc9-9a95975f7e6f","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n {% for d in qgrid.dimensions -%}\n nqx{{loop.index}} = {{d}}\n {% endfor %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal\n{{ '{{' }} {{ explicitKPath.length }} {% raw %} + KPOINTS|length {% endraw %} {{ '}}' }}\n{% raw %}\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n{% endraw %}\n{% for point in explicitKPath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}0.0000001\n{% endfor %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPathFormDataManager"}],"executableName":"pw.x","name":"pw_scf_bands_hse.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_bands_hse","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure_magn.json":{"_id":"4a7dced1-224e-57d7-a616-cbad99062c7b","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Spin magnetic bandstructure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_magn.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_magn","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"c229d2a0-3c19-5f13-b3e0-ceb86cb9fbc1","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_magn.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_magn","next":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_magn.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands_magn","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_magn.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands_magn","next":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_up.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands_spin_up","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_up.dat'{% endraw %}\n spin_component = 1\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_up.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands_spin_up","next":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_dn.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands_spin_dn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_dn.dat'{% endraw %}\n spin_component = 2\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_dn.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands_spin_dn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure_soc.json":{"_id":"51e6fb82-538a-58ee-8d4e-991c8446f657","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{"searchText":"nc-fr"},"subtype":"nc-fr","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Spin orbit coupling bandstructure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_soc.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_soc","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"74ec024a-f247-5f15-9c21-cc169bcb62c7","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_soc.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_soc","next":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_soc.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands_soc","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_soc.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands_soc","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/dielectric_tensor.json":{"_id":"38340b52-83ad-5862-bc18-c140bdc0cb72","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"nc","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Compute Dielectric Function","properties":["atomic_forces","band_gaps","dielectric_tensor","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"3b230ec3-0791-52f7-a4db-625390b8718f","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"3b230ec3-0791-52f7-a4db-625390b8718f","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Set No-Symmetry Flag","next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","operand":"NO_SYMMETRY_NO_INVERSION","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":true},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16"},"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","next":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"epsilon.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"epsilon.x","input":[{"name":"epsilon.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"dielectric_tensor","postProcessors":[],"preProcessors":[],"results":[{"name":"dielectric_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n","contextProviders":[],"executableName":"epsilon.x","name":"epsilon.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Compute dielectric function","postProcessors":[],"preProcessors":[],"results":[{"name":"dielectric_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/dos.json":{"_id":"2cf317f3-3306-5a96-bc9b-e9103ebcd5be","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Density of States","properties":["atomic_forces","band_gaps","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16"},"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"schemaVersion":"2022.8.16"},"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/electronic_density_mesh.json":{"_id":"e2749c5a-fcd9-589c-819b-8b88c5c90924","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Electronic Density Mesh","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_density.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_density","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_density.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_density","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/esm.json":{"_id":"0de669f6-a455-5dae-b331-19dc85f7090f","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Effective Screening Medium (ESM)","properties":["atomic_forces","charge_density_profile","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_esm","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"2f487bc6-c237-53e4-bad5-be60369662cb","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_esm","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/esm_relax.json":{"_id":"69728792-afeb-50aa-9b4e-6974a90f676a","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Effective Screening Medium (ESM) Relax","properties":["atomic_forces","charge_density_profile","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm_relax.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_esm_relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"a2bec506-1fdd-5125-a787-85f31cde20c1","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm_relax.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_esm_relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/espresso_extract_kpoints.json":{"_id":"a2785cc5-2427-5c7a-b30f-7077475b948c","application":{"name":"espresso"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Extract KPOINTS","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"espresso_extract_kpoints.py"},{"name":"requirements.txt","templateName":"requirements_empty.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"espresso_extract_kpoints","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"a716b133-2d04-50b5-b497-100265e3fa24","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_extract_kpoints.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Extract kpoints","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/espresso_xml_get_qpt_irr.json":{"_id":"e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a","application":{"name":"espresso"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"espresso-xml-get-qpt-irr","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"espresso_xml_get_qpt_irr.py"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"espresso_xml_get_qpt_irr","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n{# JOB_WORK_DIR will be initialized at runtime => avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_xml_get_qpt_irr.py","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"python","next":"assignment","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"assignment","head":false,"input":[{"name":"STDOUT","scope":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219"}],"isDefault":false,"monitors":[],"name":"assignment","operand":"Q_POINTS","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"assignment","value":"json.loads(STDOUT)"}]},"espresso/fixed_cell_relaxation.json":{"_id":"fb75e249-5489-5146-bd8a-786d33330d9c","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Fixed-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_relax.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"c42871f6-ab79-5987-b228-c3bd80f16ffd","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_relax.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/gw_band_structure_band_gap_full_frequency.json":{"_id":"46bcdcc8-628e-518e-b8c3-9bf38d7a2aef","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{"searchText":".*dojo-oncv.*"},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Full Frequency GW Band Structure + Band Gap","properties":["atomic_forces","band_gaps","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"gw.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_full_frequency.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"gw_bands_full_frequency","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16"},"flowchartId":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_full_frequency.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"gw_bands_full_frequency","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/gw_band_structure_band_gap_plasmon_pole.json":{"_id":"72b79a87-8eef-5fe2-9d6c-6c9c256dd56c","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{"searchText":".*dojo-oncv.*"},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Plasmon-Pole GW Band Structure + Band Gap","properties":["atomic_forces","band_gaps","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"gw.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_plasmon_pole.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"gw_bands_plasmon_pole","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16"},"flowchartId":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_plasmon_pole.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"gw_bands_plasmon_pole","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/kpoint_convergence.json":{"_id":"ff6a8fbc-2202-5786-9a26-67c843417d0b","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"K-point Convergence","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"init-tolerance","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Init tolerance","next":"init-increment","operand":"TOL","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0.00001},{"flowchartId":"init-increment","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init increment","next":"init-result","operand":"INC","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"flowchartId":"init-result","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init result","next":"init-parameter","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0},{"flowchartId":"init-parameter","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init parameter","next":"pwscf-kpoint-convergence","operand":"PARAMETER","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_kpt_conv.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_kpt_conv","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"pwscf-kpoint-convergence","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0{% endraw %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_kpt_conv.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_kpt_conv","next":"store-result","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"store-result","head":false,"input":[{"name":"total_energy","scope":"pwscf-kpoint-convergence"}],"isDefault":false,"monitors":[],"name":"store result","next":"check-convergence","operand":"RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"else":"update-result","flowchartId":"check-convergence","head":false,"input":[],"isDefault":false,"maxOccurrences":50,"monitors":[],"name":"check convergence","next":"update-result","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","status":"idle","statusTrack":[],"tags":[],"then":"convergence-is-reached","type":"condition"},{"flowchartId":"update-result","head":false,"input":[{"name":"RESULT","scope":"global"}],"isDefault":false,"monitors":[],"name":"update result","next":"increment-parameter","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"RESULT"},{"flowchartId":"increment-parameter","head":false,"input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"isDefault":false,"monitors":[],"name":"increment parameter","next":"pwscf-kpoint-convergence","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER+INC"},{"flowchartId":"convergence-is-reached","head":false,"input":[{"name":"PARAMETER","scope":"global"}],"isDefault":false,"monitors":[],"name":"exit","operand":"PARAMETER","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER"}]},"espresso/neb.json":{"_id":"c9034468-df28-5357-8912-02226f919042","application":{"name":"espresso"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Nudged Elastic Band (NEB)","properties":["reaction_energy_barrier","reaction_energy_profile"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"neb.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"neb.x","input":[{"name":"neb.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"neb","postProcessors":[],"preProcessors":[],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"9f273ca0-d240-5b1f-89a9-64dd579304ac","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = {{ 2 + (input.INTERMEDIATE_IMAGES.length or neb.nImages) }},\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_first = false %}\n{%- for position in input.FIRST_IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_first = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.FIRST_IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_first %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n{%- for IMAGE in input.INTERMEDIATE_IMAGES %}\nINTERMEDIATE_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_intermediate = false %}\n{%- for position in IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_intermediate = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_intermediate %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n{%- endfor %}\nLAST_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_last = false %}\n{%- for position in input.LAST_IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_last = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.LAST_IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_last %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nEND_POSITIONS\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nEND_ENGINE_INPUT\nEND\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"NEBFormDataManager"},{"name":"QENEBInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"neb.x","name":"neb.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"neb","postProcessors":[],"preProcessors":[],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/ph_init_qpoints.json":{"_id":"2f017bcb-f4ba-55b8-b939-1f780679a88e","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"ph-init-qpoints","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_init_qpoints.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_init_qpoints","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"b8ea6a33-38f3-5434-b17e-b5eae8fff9fc","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_init_qpoints.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_init_qpoints","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/ph_single_irr_qpt.json":{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"ph-single-irr-qpt","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_single_irr_qpt.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_single_irr_qpt","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"8db9af08-d935-57a0-a824-e7db6d936de8","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_single_irr_qpt.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_single_irr_qpt","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/phonon_dispersions.json":{"_id":"bfb69b48-8fbf-5a0d-8949-448f20754766","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Phonon Dispersions","properties":["atomic_forces","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"13bcafce-56ef-5b47-b079-317495eb6933","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16"},"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","next":"a7fded20-889b-54fc-bbb0-456e82689ab1","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"schemaVersion":"2022.8.16"},"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/phonon_dos.json":{"_id":"2232051b-9f2a-5a48-9b4d-6231eb6e8297","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Phonon Density of States","properties":["atomic_forces","fermi_energy","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"13bcafce-56ef-5b47-b079-317495eb6933","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16"},"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","next":"8fe6a24b-c994-55a2-a448-88657292e8c2","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16"},"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/phonon_dos_dispersion.json":{"_id":"291d25cd-378a-5be7-9d85-c8013a4b165b","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Phonon Density of States + Dispersions","properties":["atomic_forces","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"13bcafce-56ef-5b47-b079-317495eb6933","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16"},"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","next":"8fe6a24b-c994-55a2-a448-88657292e8c2","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16"},"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","next":"a7fded20-889b-54fc-bbb0-456e82689ab1","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"schemaVersion":"2022.8.16"},"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/phonon_reduce.json":{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"reduce","properties":["phonon_dispersions","phonon_dos"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid_restart.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid_restart","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb206177-a4af-599a-81ba-6c88d24253b6","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid_restart.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid_restart","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","next":"8fe6a24b-c994-55a2-a448-88657292e8c2","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16"},"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","next":"a7fded20-889b-54fc-bbb0-456e82689ab1","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"schemaVersion":"2022.8.16"},"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/plot_wavefunction.json":{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","application":{"name":"espresso"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Plot Wavefunction","properties":["file_content"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"plot_wavefunction","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"57fca898-8e8b-5ef2-81a5-9d2b612bc18d","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"plot WFN","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/post_processor.json":{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","application":{"name":"espresso"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"post-processor","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_collect_dynmat.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"espresso_collect_dynmat","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_collect_dynmat.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/pre_processor.json":{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","application":{"name":"espresso"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"pre-processor","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_link_outdir_save.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"espresso_link_outdir_save","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_link_outdir_save.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/pw_scf.json":{"_id":"f52b8039-83d0-5485-a1f1-0bc37cb01ed3","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"pw-scf","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/recalculate_bands.json":{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Recalculate Bands","properties":["band_structure"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/surface_energy.json":{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Surface Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"e463ef46-a36e-5168-87dd-e21eb980dfb8","head":true,"input":[{"endpoint":"materials","endpoint_options":{"params":{"projection":"{}","query":"{'_id': MATERIAL_ID}"}},"name":"DATA","type":"api"}],"isDefault":false,"monitors":[],"name":"io-slab","next":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"api","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"flowchartId":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","head":false,"input":[{"name":"DATA","scope":"e463ef46-a36e-5168-87dd-e21eb980dfb8"}],"isDefault":false,"monitors":[],"name":"slab","next":"44263820-0c80-5bd1-b854-9da8d198eac1","operand":"SLAB","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"DATA[0]"},{"flowchartId":"44263820-0c80-5bd1-b854-9da8d198eac1","head":false,"input":[{"endpoint":"materials","endpoint_options":{"params":{"projection":"{}","query":"{'_id': SLAB.metadata.bulkId}"}},"name":"DATA","type":"api"}],"isDefault":false,"monitors":[],"name":"io-bulk","next":"b70656f1-a394-57f4-b4de-00096969df4b","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"api","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"flowchartId":"b70656f1-a394-57f4-b4de-00096969df4b","head":false,"input":[{"name":"DATA","scope":"44263820-0c80-5bd1-b854-9da8d198eac1"}],"isDefault":false,"monitors":[],"name":"bulk","next":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","operand":"BULK","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"DATA[0] if DATA else None"},{"errorMessage":"Bulk material does not exist!","flowchartId":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","head":false,"isDefault":false,"monitors":[],"name":"assert-bulk","next":"490635e0-c593-5809-9eb2-c794b96cfed1","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"BULK != None","status":"idle","statusTrack":[],"tags":[],"type":"assertion"},{"flowchartId":"490635e0-c593-5809-9eb2-c794b96cfed1","head":false,"input":[{"endpoint":"refined-properties","endpoint_options":{"params":{"projection":"{'sort': {'precision.value': -1}, 'limit': 1}","query":"{ 'exabyteId': BULK.exabyteId, 'data.name': 'total_energy', 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} }"}},"name":"DATA","type":"api"}],"isDefault":false,"monitors":[],"name":"io-e-bulk","next":"bbe13b97-4243-5a85-8f61-a279d0b797aa","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"api","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"flowchartId":"bbe13b97-4243-5a85-8f61-a279d0b797aa","head":false,"input":[{"name":"DATA","scope":"490635e0-c593-5809-9eb2-c794b96cfed1"}],"isDefault":false,"monitors":[],"name":"e-bulk","next":"a06c9f43-7670-5fd0-ac42-7028a472235a","operand":"E_BULK","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"DATA[0].data.value if DATA else None"},{"errorMessage":"E_BULK does not exist!","flowchartId":"a06c9f43-7670-5fd0-ac42-7028a472235a","head":false,"isDefault":false,"monitors":[],"name":"assert-e-bulk","next":"cdf210be-26ed-585a-b4ac-d55795ba2975","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"E_BULK != None","status":"idle","statusTrack":[],"tags":[],"type":"assertion"},{"flowchartId":"cdf210be-26ed-585a-b4ac-d55795ba2975","head":false,"input":[],"isDefault":false,"monitors":[],"name":"surface","next":"ffa8e43d-096a-555b-b8d0-6d283365ef47","operand":"A","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))"},{"flowchartId":"ffa8e43d-096a-555b-b8d0-6d283365ef47","head":false,"input":[],"isDefault":false,"monitors":[],"name":"n-bulk","next":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","operand":"N_BULK","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"len(BULK.basis.elements)"},{"flowchartId":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","head":false,"input":[],"isDefault":false,"monitors":[],"name":"n-slab","next":"9fc7a088-5533-5f70-bb33-f676ec65f565","operand":"N_SLAB","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"len(SLAB.basis.elements)"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"fcd88119-817c-5ac1-a430-ba892ac743eb","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"fcd88119-817c-5ac1-a430-ba892ac743eb","head":false,"input":[{"name":"total_energy","scope":"9fc7a088-5533-5f70-bb33-f676ec65f565"}],"isDefault":false,"monitors":[],"name":"e-slab","next":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","operand":"E_SLAB","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"flowchartId":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","head":false,"input":[],"isDefault":false,"monitors":[],"name":"surface-energy","operand":"SURFACE_ENERGY","postProcessors":[],"preProcessors":[],"results":[{"name":"surface_energy"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))"}]},"espresso/total_energy.json":{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Total Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","tags":["default"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/valence_band_offset_calc_from_previous_esp_vbm.json":{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","application":{"name":"espresso"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Calculate VBO","properties":["valence_band_offset"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Difference of valence band maxima","next":"2626f7bb-d392-5fd4-ab71-329b508de347","operand":"VBM_DIFF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"VBM_LEFT - VBM_RIGHT"},{"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Difference of macroscopically averaged ESP in bulk","next":"b7307787-53e2-599b-ad12-d627b04074b4","operand":"AVG_ESP_DIFF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]"},{"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Lineup of macroscopically averaged ESP in interface","next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","operand":"ESP_LINEUP","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])"},{"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Valence Band Offset","operand":"VALENCE_BAND_OFFSET","postProcessors":[],"preProcessors":[],"results":[{"name":"valence_band_offset"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))"}]},"espresso/variable_cell_relaxation.json":{"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Variable-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","systemName":"espresso-variable-cell-relaxation","tags":["variable-cell_relaxation"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/wavefunction_amplitude.json":{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Wavefunction Amplitude","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"schemaVersion":"2022.8.16","tags":["wfn","wfn_plot"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-scf","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"extract-band-energies","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"band_structure"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"extract-band-energies","head":false,"input":[{"name":"band_structure","scope":"pw-scf"}],"isDefault":false,"monitors":[],"name":"Extract Band Energies","next":"indices-below-fermi","operand":"band_energies","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]"},{"flowchartId":"indices-below-fermi","head":false,"input":[{"name":"fermi_energy","scope":"pw-scf"}],"isDefault":false,"monitors":[],"name":"Find Indices Below Fermi","next":"8771dc7f-878e-5f13-a840-a3a416854f1e","operand":"indices_below_fermi","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]"},{"flowchartId":"8771dc7f-878e-5f13-a840-a3a416854f1e","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Store Band Below EF","next":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","operand":"KBAND_VALUE_BELOW_EF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1"},{"flowchartId":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Select Band","next":"pp-wfn","operand":"KBAND_VALUE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"KBAND_VALUE_BELOW_EF"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_wfn","postProcessors":[],"preProcessors":[],"results":[{"name":"wavefunction_amplitude"}],"schemaVersion":"2022.8.16"},"flowchartId":"pp-wfn","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_wfn.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_wfn","postProcessors":[],"preProcessors":[],"results":[{"name":"wavefunction_amplitude"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/zero_point_energy.json":{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Zero Point Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"107595d1-490f-53a2-8432-7f8a12f14d96","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_gamma","postProcessors":[],"preProcessors":[],"results":[{"name":"zero_point_energy"}],"schemaVersion":"2022.8.16"},"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_zpe","postProcessors":[],"preProcessors":[],"results":[{"name":"zero_point_energy"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"nwchem/total_energy.json":{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","application":{"name":"nwchem"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"pople","type":"localorbital"},"subtype":"gga","type":"dft"},"name":"Total Energy","properties":["total_energy","total_energy_contributions"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"nwchem","schemaVersion":"2022.8.16","shortName":"nwchem","summary":"NWChem","version":"7.0.2"},"context":[],"executable":{"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem","postProcessors":[{"name":"error_handler"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"schemaVersion":"2022.8.16"},"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"python/ml/classification_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"name":"python"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:random_forest_classification:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:roc_curve:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ROC Curve Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]},"python/ml/clustering_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"name":"python"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_k_means_clustering_sklearn.py","templateName":"model_k_means_clustering_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:k_means_clustering:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_k_means_clustering_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"9c95c27b-c8bd-5e8b-8829-d354611decef","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_pca_2d_clusters_matplotlib.py","templateName":"post_processing_pca_2d_clusters_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:pca_2d_clusters:matplotlib","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"9c95c27b-c8bd-5e8b-8829-d354611decef","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_pca_2d_clusters_matplotlib.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"2D PCA Clusters Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"},{"name":"file_content"},{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]},"python/ml/regression_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"name":"python"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:multilayer_perceptron:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:parity_plot:matplotlib","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Parity Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]},"python/ml/train_head.json":{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"name":"python"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"schemaVersion":"2022.8.16","units":[{"flowchartId":"head-set-predict-status","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Dataset","next":"head-branch-on-predict-status","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"isDefault":false,"maxOccurrences":100,"monitors":[],"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"flowchartId":"end-of-ml-train-head","head":false,"input":[],"isDefault":false,"monitors":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},"python/python_script.json":{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","application":{"name":"python"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Python Script","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"shell/batch_espresso_pwscf.json":{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","application":{"name":"shell"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Batch Job (Espresso PWSCF)","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"job_espresso_pw_scf","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"shell/hello_world.json":{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","application":{"name":"shell"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Hello World","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/band_gap.json":{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","application":{"name":"vasp"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Gap","properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"f0d65517-9592-5bc8-948e-a0851a766cbb","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"schemaVersion":"2022.8.16"},"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/band_structure.json":{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","application":{"name":"vasp"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/band_structure_dos.json":{"_id":"d38fea11-9781-5151-8dae-d705381498be","application":{"name":"vasp"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure + Density of States","properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/dos.json":{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","application":{"name":"vasp"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Density of States","properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/fixed_cell_relaxation.json":{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","application":{"name":"vasp"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Fixed-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","postProcessors":[{"name":"prepare_restart"}],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","postProcessors":[{"name":"prepare_restart"}],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/initial_final_total_energies.json":{"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","application":{"name":"vasp"},"compute":{"arguments":{"nband":1,"ndiag":1,"nimage":1,"npools":1,"ntg":1},"cluster":{"fqdn":""},"isRestartable":true,"nodes":1,"notify":"n","ppn":1,"queue":"D","timeLimit":"01:00:00","timeLimitType":"per single attempt"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Initial/Final Total Energies","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","next":"e65a17ce-10c8-5710-ad4d-fb3d42434091","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/kpoint_convergence.json":{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","application":{"name":"vasp"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"K-point Convergence","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"init-tolerance","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Init tolerance","next":"init-increment","operand":"TOL","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0.00001},{"flowchartId":"init-increment","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init increment","next":"init-result","operand":"INC","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"flowchartId":"init-result","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init result","next":"init-parameter","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0},{"flowchartId":"init-parameter","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init parameter","next":"vasp-kpoint-convergence","operand":"PARAMETER","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"vasp-kpoint-convergence","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","next":"store-result","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"store-result","head":false,"input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"isDefault":false,"monitors":[],"name":"store result","next":"check-convergence","operand":"RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"else":"update-result","flowchartId":"check-convergence","head":false,"input":[],"isDefault":false,"maxOccurrences":50,"monitors":[],"name":"check convergence","next":"update-result","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","status":"idle","statusTrack":[],"tags":[],"then":"convergence-is-reached","type":"condition"},{"flowchartId":"update-result","head":false,"input":[{"name":"RESULT","scope":"global"}],"isDefault":false,"monitors":[],"name":"update result","next":"increment-parameter","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"RESULT"},{"flowchartId":"increment-parameter","head":false,"input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"isDefault":false,"monitors":[],"name":"increment parameter","next":"vasp-kpoint-convergence","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER+INC"},{"flowchartId":"convergence-is-reached","head":false,"input":[{"name":"PARAMETER","scope":"global"}],"isDefault":false,"monitors":[],"name":"exit","operand":"PARAMETER","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER"}]},"vasp/neb_subworkflow.json":{"_id":"e6215fb9-e60c-541b-b73e-b077d64b3a95","application":{"name":"vasp"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Nudged Elastic Band (NEB)","properties":["reaction_energy_barrier","reaction_energy_profile"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB"},{"name":"KPOINTS","templateName":"KPOINTS"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"vasp_neb","postProcessors":[],"preProcessors":[],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"9a1660ab-8067-5fad-9fb8-7c039f634636","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISTART = 0\nIBRION = 1\nEDIFFG = -0.001\nENCUT = 500\nNELM = 100\nNSW = 100\nIMAGES = {{ input.INTERMEDIATE_IMAGES.length or neb.nImages }}\nSPRING = -5\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"vasp_neb","postProcessors":[],"preProcessors":[],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/prepare_images.json":{"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","application":{"name":"vasp"},"isDraft":false,"isMultiMaterial":true,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Prepare Directories","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bash_vasp_prepare_neb_images","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR <=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema"}],"isDefault":false,"monitors":[],"name":"Set Average ESP Value","operand":"AVG_ESP_INTERFACE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},{"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"BS + Avg ESP (interface left)","properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"0bd31760-f6e4-5826-b282-882c06c97f94","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Material Index (Interface left)","next":"3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08","operand":"MATERIAL_INDEX","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"1"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap-left","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap-left","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-left"}],"isDefault":false,"monitors":[],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Set Valence Band Maximum","next":"dfc4f1c5-5856-588a-99df-6d5fb46bb429","operand":"VBM_LEFT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"dfc4f1c5-5856-588a-99df-6d5fb46bb429","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","next":"b1bb2b3e-3197-5bcd-85b0-959cc357c8d3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"b1bb2b3e-3197-5bcd-85b0-959cc357c8d3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential-left","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average_potential","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential-left","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-left"}],"isDefault":false,"monitors":[],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},{"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Find ESP Value (Interface left)","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"generic:processing:find_extrema:scipy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"python-find-extrema-left","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema-left"}],"isDefault":false,"monitors":[],"name":"Set Average ESP Value","operand":"AVG_ESP_LEFT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},{"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"BS + Avg ESP (interface right)","properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"a05809d1-cc0d-5a0b-bf5e-d43b90a6ac4b","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Material Index (Interface right)","next":"b89d6348-3915-5c24-9fbb-350bc98ac708","operand":"MATERIAL_INDEX","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"2"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"b89d6348-3915-5c24-9fbb-350bc98ac708","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap-right","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap-right","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-right"}],"isDefault":false,"monitors":[],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Set Valence Band Maximum","next":"bc3f514c-4bed-521b-85a3-4e0edfdc3585","operand":"VBM_RIGHT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"bc3f514c-4bed-521b-85a3-4e0edfdc3585","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","next":"28bb682d-d287-5beb-8a67-826449c474ee","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"28bb682d-d287-5beb-8a67-826449c474ee","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential-right","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average_potential","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential-right","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-right"}],"isDefault":false,"monitors":[],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},{"_id":"736295e8-2ee0-5974-83bc-362061ac0688","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Find ESP Value (Interface right)","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"generic:processing:find_extrema:scipy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"python-find-extrema-right","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema-right"}],"isDefault":false,"monitors":[],"name":"Set Average ESP Value","operand":"AVG_ESP_RIGHT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Calculate VBO","properties":["valence_band_offset"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Difference of valence band maxima","next":"2626f7bb-d392-5fd4-ab71-329b508de347","operand":"VBM_DIFF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"VBM_LEFT - VBM_RIGHT"},{"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Difference of macroscopically averaged ESP in bulk","next":"b7307787-53e2-599b-ad12-d627b04074b4","operand":"AVG_ESP_DIFF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]"},{"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Lineup of macroscopically averaged ESP in interface","next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","operand":"ESP_LINEUP","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])"},{"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Valence Band Offset","operand":"VALENCE_BAND_OFFSET","postProcessors":[],"preProcessors":[],"results":[{"name":"valence_band_offset"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))"}]}],"units":[{"_id":"9c65d03e-6a30-58f3-947a-f174342be0c3","flowchartId":"fd622b5c-5c02-594e-b582-b245c17ca9a4","isDefault":false,"monitors":[],"name":"BS + Avg ESP (Interface)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7","flowchartId":"ad3b1e4c-5965-5605-a067-dd0c59907c4b","isDefault":false,"monitors":[],"name":"Find ESP Values (Interface)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","flowchartId":"8d5b4734-edfd-55cc-ad80-aaa72487398d","isDefault":false,"monitors":[],"name":"BS + Avg ESP (interface left)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","flowchartId":"102ec582-5b75-52f5-8b39-19ca725ed47a","isDefault":false,"monitors":[],"name":"Find ESP Value (Interface left)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","flowchartId":"603c45db-93aa-54ce-a7fe-6e9b65b0037d","isDefault":false,"monitors":[],"name":"BS + Avg ESP (interface right)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"736295e8-2ee0-5974-83bc-362061ac0688","flowchartId":"e3444d35-cc41-59f5-8481-78d0c383b84e","isDefault":false,"monitors":[],"name":"Find ESP Value (Interface right)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","flowchartId":"0e0b141a-39ca-52bc-9094-e5f96dc72f39","isDefault":false,"monitors":[],"name":"Calculate VBO","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/variable_cell_relaxation.json":{"_id":"c45dcef1-d16b-59d1-9318-cedd0b1acf08","application":{"name":"espresso"},"isDefault":false,"name":"Variable-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Variable-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","systemName":"espresso-variable-cell-relaxation","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"tags":["variable-cell_relaxation"],"units":[{"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","flowchartId":"8f6e9590-6a87-584b-abd7-1fb98253054c","isDefault":false,"monitors":[],"name":"Variable-cell Relaxation","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/wavefunction_amplitude.json":{"_id":"196d364a-5a30-549b-a898-8b9704b50ff1","application":{"name":"espresso"},"isDefault":false,"name":"Wavefunction Amplitude","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude","file_content"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Wavefunction Amplitude","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-scf","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"extract-band-energies","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"band_structure"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"extract-band-energies","head":false,"input":[{"name":"band_structure","scope":"pw-scf"}],"isDefault":false,"monitors":[],"name":"Extract Band Energies","next":"indices-below-fermi","operand":"band_energies","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]"},{"flowchartId":"indices-below-fermi","head":false,"input":[{"name":"fermi_energy","scope":"pw-scf"}],"isDefault":false,"monitors":[],"name":"Find Indices Below Fermi","next":"8771dc7f-878e-5f13-a840-a3a416854f1e","operand":"indices_below_fermi","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]"},{"flowchartId":"8771dc7f-878e-5f13-a840-a3a416854f1e","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Store Band Below EF","next":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","operand":"KBAND_VALUE_BELOW_EF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1"},{"flowchartId":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Select Band","next":"pp-wfn","operand":"KBAND_VALUE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"KBAND_VALUE_BELOW_EF"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_wfn","postProcessors":[],"preProcessors":[],"results":[{"name":"wavefunction_amplitude"}],"schemaVersion":"2022.8.16"},"flowchartId":"pp-wfn","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_wfn.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_wfn","postProcessors":[],"preProcessors":[],"results":[{"name":"wavefunction_amplitude"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Plot Wavefunction","properties":["file_content"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"plot_wavefunction","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"57fca898-8e8b-5ef2-81a5-9d2b612bc18d","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"plot WFN","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"tags":["wfn","wfn_plot"],"units":[{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","flowchartId":"36467db9-279f-52a3-a6ef-ffdc26d875ed","isDefault":false,"monitors":[],"name":"Wavefunction Amplitude","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","flowchartId":"4ce49281-e731-550e-af66-6d2408db8237","isDefault":false,"monitors":[],"name":"Plot Wavefunction","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/zero_point_energy.json":{"_id":"3158c78d-58bb-5675-8c7f-6f2337061015","application":{"name":"espresso"},"isDefault":false,"name":"Zero Point Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Zero Point Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"107595d1-490f-53a2-8432-7f8a12f14d96","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_gamma","postProcessors":[],"preProcessors":[],"results":[{"name":"zero_point_energy"}],"schemaVersion":"2022.8.16"},"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_zpe","postProcessors":[],"preProcessors":[],"results":[{"name":"zero_point_energy"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","flowchartId":"d906bd20-eb92-5a01-a0e2-c81a2d9b2a41","isDefault":false,"monitors":[],"name":"Zero Point Energy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"nwchem/total_energy.json":{"_id":"937fbac8-2dec-5fb1-a46f-b8a0cc3d3d05","application":{"name":"nwchem"},"isDefault":false,"name":"Total Energy","properties":["total_energy","total_energy_contributions"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","application":{"build":"GNU","isDefault":true,"name":"nwchem","schemaVersion":"2022.8.16","shortName":"nwchem","summary":"NWChem","version":"7.0.2"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"pople","type":"localorbital"},"subtype":"gga","type":"dft"},"name":"Total Energy","properties":["total_energy","total_energy_contributions"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"nwchem","schemaVersion":"2022.8.16","shortName":"nwchem","summary":"NWChem","version":"7.0.2"},"context":[],"executable":{"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem","postProcessors":[{"name":"error_handler"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"schemaVersion":"2022.8.16"},"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","flowchartId":"6059d61a-6a92-5657-9130-02208639aff8","isDefault":false,"monitors":[],"name":"Total Energy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/ml/classification_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","application":{"name":"python"},"isDefault":false,"isUsingDataset":true,"name":"Python ML Train Classification","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"schemaVersion":"2022.8.16","units":[{"flowchartId":"head-set-predict-status","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Dataset","next":"head-branch-on-predict-status","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"isDefault":false,"maxOccurrences":100,"monitors":[],"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"flowchartId":"end-of-ml-train-head","head":false,"input":[],"isDefault":false,"monitors":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:random_forest_classification:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:roc_curve:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ROC Curve Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","isDefault":false,"monitors":[],"name":"Set Up the Job","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","isDefault":false,"monitors":[],"name":"Machine Learning","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/ml/clustering_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","application":{"name":"python"},"isDefault":false,"isUsingDataset":true,"name":"Python ML Train Clustering","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"schemaVersion":"2022.8.16","units":[{"flowchartId":"head-set-predict-status","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Dataset","next":"head-branch-on-predict-status","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"isDefault":false,"maxOccurrences":100,"monitors":[],"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"flowchartId":"end-of-ml-train-head","head":false,"input":[],"isDefault":false,"monitors":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:random_forest_classification:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:roc_curve:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ROC Curve Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","isDefault":false,"monitors":[],"name":"Set Up the Job","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","isDefault":false,"monitors":[],"name":"Machine Learning","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/ml/regression_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","application":{"name":"python"},"isDefault":false,"isUsingDataset":true,"name":"Python ML Train Regression","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"schemaVersion":"2022.8.16","units":[{"flowchartId":"head-set-predict-status","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Dataset","next":"head-branch-on-predict-status","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"isDefault":false,"maxOccurrences":100,"monitors":[],"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"flowchartId":"end-of-ml-train-head","head":false,"input":[],"isDefault":false,"monitors":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:multilayer_perceptron:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:parity_plot:matplotlib","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Parity Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","isDefault":false,"monitors":[],"name":"Set Up the Job","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","isDefault":false,"monitors":[],"name":"Machine Learning","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/python_script.json":{"_id":"de816646-766b-5f97-b468-0937d4381440","application":{"name":"python"},"isDefault":false,"name":"Python Script","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Python Script","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","flowchartId":"c50e28b2-a0c5-5324-8b6f-e99b5a546bd8","isDefault":false,"monitors":[],"name":"Python Script","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"shell/batch_espresso_pwscf.json":{"_id":"e0046fb4-37db-5732-bf81-c48e13081a4c","application":{"name":"shell"},"isDefault":false,"name":"Shell Batch Job (Espresso PWSCF)","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Batch Job (Espresso PWSCF)","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"job_espresso_pw_scf","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","flowchartId":"d884e8f7-7acf-5a03-bc9a-186903bdaa0e","isDefault":false,"monitors":[],"name":"Shell Batch Job (Espresso PWSCF)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"shell/hello_world.json":{"_id":"d2fd444c-06b4-5d66-baeb-449c680ae1bf","application":{"name":"shell"},"isDefault":false,"name":"Shell Script","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Hello World","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","flowchartId":"319307c2-bf22-5bf2-b4e9-a4cdf671b786","isDefault":false,"monitors":[],"name":"Shell Hello World","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/band_gap.json":{"_id":"1a358471-0a73-5fcb-ad3c-7a8079029c86","application":{"name":"vasp"},"isDefault":false,"name":"Band Gap","properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Gap","properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"f0d65517-9592-5bc8-948e-a0851a766cbb","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"schemaVersion":"2022.8.16"},"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","flowchartId":"db3b83ea-0ef5-594c-89a8-bde38dbc6105","isDefault":false,"monitors":[],"name":"Band Gap","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/band_structure.json":{"_id":"25b0ad08-87bb-5400-bea4-acd5fe2163c0","application":{"name":"vasp"},"isDefault":false,"name":"Band Structure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","flowchartId":"c573187f-a8bb-5084-9fcf-1560bf4a7786","isDefault":false,"monitors":[],"name":"Band Structure","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/band_structure_dos.json":{"_id":"c8338d40-3c6e-5581-b03c-d7fb5cbb8df5","application":{"name":"vasp"},"isDefault":false,"name":"Band Structure + Density of States","properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"d38fea11-9781-5151-8dae-d705381498be","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure + Density of States","properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"d38fea11-9781-5151-8dae-d705381498be","flowchartId":"8a098bb9-73b1-5e84-bfc7-b783e02d0f53","isDefault":false,"monitors":[],"name":"Band Structure + Density of States","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/dos.json":{"_id":"629a79fb-a03f-5e34-b2ce-9c735e8ef6c0","application":{"name":"vasp"},"isDefault":false,"name":"Density of States","properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Density of States","properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","flowchartId":"3e64fdb4-ab5b-52a0-a1d5-51343c49481c","isDefault":false,"monitors":[],"name":"Density of States","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/fixed_cell_relaxation.json":{"_id":"cb69418c-2f6c-551d-af81-0cf20ec1113d","application":{"name":"vasp"},"isDefault":false,"name":"Fixed-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Fixed-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","postProcessors":[{"name":"prepare_restart"}],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","postProcessors":[{"name":"prepare_restart"}],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","flowchartId":"0de8c4c8-b722-5cd2-ae68-b484262e0a01","isDefault":false,"monitors":[],"name":"Fixed-cell Relaxation","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/kpoint_convergence.json":{"_id":"fcf105f9-5ae7-5c32-a6b3-e3579cbdf39a","application":{"name":"vasp"},"isDefault":false,"name":"K-point Convergence","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"K-point Convergence","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"init-tolerance","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Init tolerance","next":"init-increment","operand":"TOL","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0.00001},{"flowchartId":"init-increment","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init increment","next":"init-result","operand":"INC","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"flowchartId":"init-result","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init result","next":"init-parameter","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0},{"flowchartId":"init-parameter","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init parameter","next":"vasp-kpoint-convergence","operand":"PARAMETER","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"vasp-kpoint-convergence","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","next":"store-result","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"store-result","head":false,"input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"isDefault":false,"monitors":[],"name":"store result","next":"check-convergence","operand":"RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"else":"update-result","flowchartId":"check-convergence","head":false,"input":[],"isDefault":false,"maxOccurrences":50,"monitors":[],"name":"check convergence","next":"update-result","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","status":"idle","statusTrack":[],"tags":[],"then":"convergence-is-reached","type":"condition"},{"flowchartId":"update-result","head":false,"input":[{"name":"RESULT","scope":"global"}],"isDefault":false,"monitors":[],"name":"update result","next":"increment-parameter","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"RESULT"},{"flowchartId":"increment-parameter","head":false,"input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"isDefault":false,"monitors":[],"name":"increment parameter","next":"vasp-kpoint-convergence","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER+INC"},{"flowchartId":"convergence-is-reached","head":false,"input":[{"name":"PARAMETER","scope":"global"}],"isDefault":false,"monitors":[],"name":"exit","operand":"PARAMETER","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER"}]}],"units":[{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","flowchartId":"a34eec2c-cdb2-537d-88c0-ed1d7b205879","isDefault":false,"monitors":[],"name":"K-point Convergence","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/neb.json":{"_id":"2973908e-21ae-5424-afc9-ccb3fde477d8","application":{"name":"vasp"},"isDefault":false,"name":"Nudged Elastic Band (NEB)","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","reaction_energy_barrier","reaction_energy_profile"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"compute":{"arguments":{"nband":1,"ndiag":1,"nimage":1,"npools":1,"ntg":1},"cluster":{"fqdn":""},"isRestartable":true,"nodes":1,"notify":"n","ppn":1,"queue":"D","timeLimit":"01:00:00","timeLimitType":"per single attempt"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Initial/Final Total Energies","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","next":"e65a17ce-10c8-5710-ad4d-fb3d42434091","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"isDraft":false,"isMultiMaterial":true,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Prepare Directories","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bash_vasp_prepare_neb_images","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_xml_get_qpt_irr.py","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"python","next":"assignment","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"assignment","head":false,"input":[{"name":"STDOUT","scope":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219"}],"isDefault":false,"monitors":[],"name":"assignment","operand":"Q_POINTS","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"assignment","value":"json.loads(STDOUT)"}]},{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"reduce","properties":["phonon_dispersions","phonon_dos"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid_restart.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid_restart","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb206177-a4af-599a-81ba-6c88d24253b6","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid_restart.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid_restart","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","next":"8fe6a24b-c994-55a2-a448-88657292e8c2","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16"},"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","next":"a7fded20-889b-54fc-bbb0-456e82689ab1","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"schemaVersion":"2022.8.16"},"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"f52b8039-83d0-5485-a1f1-0bc37cb01ed3","flowchartId":"d270b789-fb67-573c-a566-9f09fdacea23","isDefault":false,"monitors":[],"name":"pw-scf","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"2f017bcb-f4ba-55b8-b939-1f780679a88e","flowchartId":"4bb74dfb-46a6-5bf4-a477-5d374dc2e271","isDefault":false,"monitors":[],"name":"ph-init-qpoints","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a","flowchartId":"9894b91f-6e97-5ee6-af02-0bef26bd62c0","isDefault":false,"monitors":[],"name":"espresso-xml-get-qpt-irr","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"flowchartId":"24e3c1f0-8090-512e-9727-8770071d17c8","input":{"name":"Q_POINTS","scope":"global","target":"MAP_DATA","useValues":false,"values":[]},"isDefault":false,"monitors":[],"name":"map","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"map","workflowId":"5cc1c6bd-9047-4b64-8e10-e5ae288bbacf"},{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","flowchartId":"55a9e9fb-3545-5c4b-a1bb-b64a899b78c6","isDefault":false,"monitors":[],"name":"reduce","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[{"_id":"731d3397-3278-516a-b28e-53626ef50f0a","name":"phonon_map_workflow","properties":[],"subworkflows":[{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"pre-processor","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_link_outdir_save.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"espresso_link_outdir_save","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_link_outdir_save.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"ph-single-irr-qpt","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_single_irr_qpt.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_single_irr_qpt","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"8db9af08-d935-57a0-a824-e7db6d936de8","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_single_irr_qpt.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_single_irr_qpt","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"post-processor","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_collect_dynmat.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"espresso_collect_dynmat","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cd5c3e29-511b-5ef8-949d-ad884f210301","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_collect_dynmat.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","flowchartId":"e9a790f4-dec6-52c1-b951-014f0ff01cb4","monitors":[],"name":"pre-processor","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","flowchartId":"c2195045-7a5c-54d3-ab88-211c82de09f1","monitors":[],"name":"ph-single-irr-qpt","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","flowchartId":"e483c7fb-2a29-5e91-819a-7465ead70134","monitors":[],"name":"post-processor","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]}]},"espresso/recalculate_bands.json":{"_id":"42b2b964-8ccc-5b36-9e33-41a954abc2ba","application":{"name":"espresso"},"isDefault":false,"name":"Recalculate Bands","properties":["band_structure"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Recalculate Bands","properties":["band_structure"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","flowchartId":"e8b72a45-765e-565f-ab17-c91a21aec09d","isDefault":false,"monitors":[],"name":"Recalculate Bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/surface_energy.json":{"_id":"68512987-de73-5614-bab2-0f8b575cffa3","application":{"name":"espresso"},"isDefault":false,"name":"Surface Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Surface Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"e463ef46-a36e-5168-87dd-e21eb980dfb8","head":true,"input":[{"endpoint":"materials","endpoint_options":{"params":{"projection":"{}","query":"{'_id': MATERIAL_ID}"}},"name":"DATA","type":"api"}],"isDefault":false,"monitors":[],"name":"io-slab","next":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"api","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"flowchartId":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","head":false,"input":[{"name":"DATA","scope":"e463ef46-a36e-5168-87dd-e21eb980dfb8"}],"isDefault":false,"monitors":[],"name":"slab","next":"44263820-0c80-5bd1-b854-9da8d198eac1","operand":"SLAB","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"DATA[0]"},{"flowchartId":"44263820-0c80-5bd1-b854-9da8d198eac1","head":false,"input":[{"endpoint":"materials","endpoint_options":{"params":{"projection":"{}","query":"{'_id': SLAB.metadata.bulkId}"}},"name":"DATA","type":"api"}],"isDefault":false,"monitors":[],"name":"io-bulk","next":"b70656f1-a394-57f4-b4de-00096969df4b","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"api","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"flowchartId":"b70656f1-a394-57f4-b4de-00096969df4b","head":false,"input":[{"name":"DATA","scope":"44263820-0c80-5bd1-b854-9da8d198eac1"}],"isDefault":false,"monitors":[],"name":"bulk","next":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","operand":"BULK","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"DATA[0] if DATA else None"},{"errorMessage":"Bulk material does not exist!","flowchartId":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","head":false,"isDefault":false,"monitors":[],"name":"assert-bulk","next":"490635e0-c593-5809-9eb2-c794b96cfed1","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"BULK != None","status":"idle","statusTrack":[],"tags":[],"type":"assertion"},{"flowchartId":"490635e0-c593-5809-9eb2-c794b96cfed1","head":false,"input":[{"endpoint":"refined-properties","endpoint_options":{"params":{"projection":"{'sort': {'precision.value': -1}, 'limit': 1}","query":"{ 'exabyteId': BULK.exabyteId, 'data.name': 'total_energy', 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} }"}},"name":"DATA","type":"api"}],"isDefault":false,"monitors":[],"name":"io-e-bulk","next":"bbe13b97-4243-5a85-8f61-a279d0b797aa","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"api","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"flowchartId":"bbe13b97-4243-5a85-8f61-a279d0b797aa","head":false,"input":[{"name":"DATA","scope":"490635e0-c593-5809-9eb2-c794b96cfed1"}],"isDefault":false,"monitors":[],"name":"e-bulk","next":"a06c9f43-7670-5fd0-ac42-7028a472235a","operand":"E_BULK","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"DATA[0].data.value if DATA else None"},{"errorMessage":"E_BULK does not exist!","flowchartId":"a06c9f43-7670-5fd0-ac42-7028a472235a","head":false,"isDefault":false,"monitors":[],"name":"assert-e-bulk","next":"cdf210be-26ed-585a-b4ac-d55795ba2975","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"E_BULK != None","status":"idle","statusTrack":[],"tags":[],"type":"assertion"},{"flowchartId":"cdf210be-26ed-585a-b4ac-d55795ba2975","head":false,"input":[],"isDefault":false,"monitors":[],"name":"surface","next":"ffa8e43d-096a-555b-b8d0-6d283365ef47","operand":"A","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))"},{"flowchartId":"ffa8e43d-096a-555b-b8d0-6d283365ef47","head":false,"input":[],"isDefault":false,"monitors":[],"name":"n-bulk","next":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","operand":"N_BULK","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"len(BULK.basis.elements)"},{"flowchartId":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","head":false,"input":[],"isDefault":false,"monitors":[],"name":"n-slab","next":"9fc7a088-5533-5f70-bb33-f676ec65f565","operand":"N_SLAB","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"len(SLAB.basis.elements)"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"fcd88119-817c-5ac1-a430-ba892ac743eb","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"fcd88119-817c-5ac1-a430-ba892ac743eb","head":false,"input":[{"name":"total_energy","scope":"9fc7a088-5533-5f70-bb33-f676ec65f565"}],"isDefault":false,"monitors":[],"name":"e-slab","next":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","operand":"E_SLAB","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"flowchartId":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","head":false,"input":[],"isDefault":false,"monitors":[],"name":"surface-energy","operand":"SURFACE_ENERGY","postProcessors":[],"preProcessors":[],"results":[{"name":"surface_energy"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))"}]}],"units":[{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","flowchartId":"d81dc9ce-bb50-5bc6-af1d-e5ede03bb0a6","isDefault":false,"monitors":[],"name":"Surface Energy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/total_energy.json":{"_id":"4e36ca25-fa46-5628-a227-27d22dea8553","application":{"name":"espresso"},"isDefault":false,"name":"Total Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Total Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"tags":["default"],"units":[{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","flowchartId":"6059d61a-6a92-5657-9130-02208639aff8","isDefault":false,"monitors":[],"name":"Total Energy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/valence_band_offset.json":{"_id":"d8e08cac-7747-50aa-b925-41f214d722c6","application":{"name":"espresso"},"isDefault":false,"name":"Valence Band Offset (2D)","properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","valence_band_offset"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"9c65d03e-6a30-58f3-947a-f174342be0c3","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"BS + Avg ESP (Interface)","properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"0f21d8c4-ab32-53ba-b40d-fc9b6608e1b9","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Material Index (Interface)","next":"9fc7a088-5533-5f70-bb33-f676ec65f565","operand":"MATERIAL_INDEX","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"0"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap"}],"isDefault":false,"monitors":[],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Set Valence Band Maximum","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","operand":"VBM","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average_potential","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential"}],"isDefault":false,"monitors":[],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},{"_id":"ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Find ESP Values (Interface)","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"generic:processing:find_extrema:scipy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"python-find-extrema","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema"}],"isDefault":false,"monitors":[],"name":"Set Average ESP Value","operand":"AVG_ESP_INTERFACE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},{"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"BS + Avg ESP (interface left)","properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"0bd31760-f6e4-5826-b282-882c06c97f94","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Material Index (Interface left)","next":"3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08","operand":"MATERIAL_INDEX","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"1"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap-left","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap-left","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-left"}],"isDefault":false,"monitors":[],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Set Valence Band Maximum","next":"dfc4f1c5-5856-588a-99df-6d5fb46bb429","operand":"VBM_LEFT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"dfc4f1c5-5856-588a-99df-6d5fb46bb429","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","next":"b1bb2b3e-3197-5bcd-85b0-959cc357c8d3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"b1bb2b3e-3197-5bcd-85b0-959cc357c8d3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential-left","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average_potential","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential-left","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-left"}],"isDefault":false,"monitors":[],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},{"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Find ESP Value (Interface left)","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"generic:processing:find_extrema:scipy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"python-find-extrema-left","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema-left"}],"isDefault":false,"monitors":[],"name":"Set Average ESP Value","operand":"AVG_ESP_LEFT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},{"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"BS + Avg ESP (interface right)","properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"a05809d1-cc0d-5a0b-bf5e-d43b90a6ac4b","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Material Index (Interface right)","next":"b89d6348-3915-5c24-9fbb-350bc98ac708","operand":"MATERIAL_INDEX","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"2"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"b89d6348-3915-5c24-9fbb-350bc98ac708","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap-right","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap-right","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-right"}],"isDefault":false,"monitors":[],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Set Valence Band Maximum","next":"bc3f514c-4bed-521b-85a3-4e0edfdc3585","operand":"VBM_RIGHT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"bc3f514c-4bed-521b-85a3-4e0edfdc3585","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","next":"28bb682d-d287-5beb-8a67-826449c474ee","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"28bb682d-d287-5beb-8a67-826449c474ee","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential-right","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average_potential","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential-right","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-right"}],"isDefault":false,"monitors":[],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},{"_id":"736295e8-2ee0-5974-83bc-362061ac0688","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Find ESP Value (Interface right)","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"generic:processing:find_extrema:scipy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"python-find-extrema-right","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema-right"}],"isDefault":false,"monitors":[],"name":"Set Average ESP Value","operand":"AVG_ESP_RIGHT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Calculate VBO","properties":["valence_band_offset"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Difference of valence band maxima","next":"2626f7bb-d392-5fd4-ab71-329b508de347","operand":"VBM_DIFF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"VBM_LEFT - VBM_RIGHT"},{"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Difference of macroscopically averaged ESP in bulk","next":"b7307787-53e2-599b-ad12-d627b04074b4","operand":"AVG_ESP_DIFF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]"},{"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Lineup of macroscopically averaged ESP in interface","next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","operand":"ESP_LINEUP","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])"},{"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Valence Band Offset","operand":"VALENCE_BAND_OFFSET","postProcessors":[],"preProcessors":[],"results":[{"name":"valence_band_offset"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))"}]}],"units":[{"_id":"9c65d03e-6a30-58f3-947a-f174342be0c3","flowchartId":"fd622b5c-5c02-594e-b582-b245c17ca9a4","isDefault":false,"monitors":[],"name":"BS + Avg ESP (Interface)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7","flowchartId":"ad3b1e4c-5965-5605-a067-dd0c59907c4b","isDefault":false,"monitors":[],"name":"Find ESP Values (Interface)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","flowchartId":"8d5b4734-edfd-55cc-ad80-aaa72487398d","isDefault":false,"monitors":[],"name":"BS + Avg ESP (interface left)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","flowchartId":"102ec582-5b75-52f5-8b39-19ca725ed47a","isDefault":false,"monitors":[],"name":"Find ESP Value (Interface left)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","flowchartId":"603c45db-93aa-54ce-a7fe-6e9b65b0037d","isDefault":false,"monitors":[],"name":"BS + Avg ESP (interface right)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"736295e8-2ee0-5974-83bc-362061ac0688","flowchartId":"e3444d35-cc41-59f5-8481-78d0c383b84e","isDefault":false,"monitors":[],"name":"Find ESP Value (Interface right)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","flowchartId":"0e0b141a-39ca-52bc-9094-e5f96dc72f39","isDefault":false,"monitors":[],"name":"Calculate VBO","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/variable_cell_relaxation.json":{"_id":"c45dcef1-d16b-59d1-9318-cedd0b1acf08","application":{"name":"espresso"},"isDefault":false,"name":"Variable-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Variable-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","systemName":"espresso-variable-cell-relaxation","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"tags":["variable-cell_relaxation"],"units":[{"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","flowchartId":"8f6e9590-6a87-584b-abd7-1fb98253054c","isDefault":false,"monitors":[],"name":"Variable-cell Relaxation","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/wavefunction_amplitude.json":{"_id":"196d364a-5a30-549b-a898-8b9704b50ff1","application":{"name":"espresso"},"isDefault":false,"name":"Wavefunction Amplitude","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude","file_content"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Wavefunction Amplitude","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-scf","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"extract-band-energies","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"band_structure"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"extract-band-energies","head":false,"input":[{"name":"band_structure","scope":"pw-scf"}],"isDefault":false,"monitors":[],"name":"Extract Band Energies","next":"indices-below-fermi","operand":"band_energies","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]"},{"flowchartId":"indices-below-fermi","head":false,"input":[{"name":"fermi_energy","scope":"pw-scf"}],"isDefault":false,"monitors":[],"name":"Find Indices Below Fermi","next":"8771dc7f-878e-5f13-a840-a3a416854f1e","operand":"indices_below_fermi","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]"},{"flowchartId":"8771dc7f-878e-5f13-a840-a3a416854f1e","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Store Band Below EF","next":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","operand":"KBAND_VALUE_BELOW_EF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1"},{"flowchartId":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Select Band","next":"pp-wfn","operand":"KBAND_VALUE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"KBAND_VALUE_BELOW_EF"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_wfn","postProcessors":[],"preProcessors":[],"results":[{"name":"wavefunction_amplitude"}],"schemaVersion":"2022.8.16"},"flowchartId":"pp-wfn","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_wfn.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_wfn","postProcessors":[],"preProcessors":[],"results":[{"name":"wavefunction_amplitude"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Plot Wavefunction","properties":["file_content"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"plot_wavefunction","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"57fca898-8e8b-5ef2-81a5-9d2b612bc18d","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"plot WFN","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"tags":["wfn","wfn_plot"],"units":[{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","flowchartId":"36467db9-279f-52a3-a6ef-ffdc26d875ed","isDefault":false,"monitors":[],"name":"Wavefunction Amplitude","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","flowchartId":"4ce49281-e731-550e-af66-6d2408db8237","isDefault":false,"monitors":[],"name":"Plot Wavefunction","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/zero_point_energy.json":{"_id":"3158c78d-58bb-5675-8c7f-6f2337061015","application":{"name":"espresso"},"isDefault":false,"name":"Zero Point Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Zero Point Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"107595d1-490f-53a2-8432-7f8a12f14d96","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_gamma","postProcessors":[],"preProcessors":[],"results":[{"name":"zero_point_energy"}],"schemaVersion":"2022.8.16"},"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_zpe","postProcessors":[],"preProcessors":[],"results":[{"name":"zero_point_energy"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","flowchartId":"d906bd20-eb92-5a01-a0e2-c81a2d9b2a41","isDefault":false,"monitors":[],"name":"Zero Point Energy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"nwchem/total_energy.json":{"_id":"937fbac8-2dec-5fb1-a46f-b8a0cc3d3d05","application":{"name":"nwchem"},"isDefault":false,"name":"Total Energy","properties":["total_energy","total_energy_contributions"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","application":{"build":"GNU","isDefault":true,"name":"nwchem","schemaVersion":"2022.8.16","shortName":"nwchem","summary":"NWChem","version":"7.0.2"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"pople","type":"localorbital"},"subtype":"gga","type":"dft"},"name":"Total Energy","properties":["total_energy","total_energy_contributions"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"nwchem","schemaVersion":"2022.8.16","shortName":"nwchem","summary":"NWChem","version":"7.0.2"},"context":[],"executable":{"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem","postProcessors":[{"name":"error_handler"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"schemaVersion":"2022.8.16"},"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","flowchartId":"6059d61a-6a92-5657-9130-02208639aff8","isDefault":false,"monitors":[],"name":"Total Energy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/ml/classification_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","application":{"name":"python"},"isDefault":false,"isUsingDataset":true,"name":"Python ML Train Classification","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"schemaVersion":"2022.8.16","units":[{"flowchartId":"head-set-predict-status","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Dataset","next":"head-branch-on-predict-status","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"isDefault":false,"maxOccurrences":100,"monitors":[],"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"flowchartId":"end-of-ml-train-head","head":false,"input":[],"isDefault":false,"monitors":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:random_forest_classification:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:roc_curve:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ROC Curve Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","isDefault":false,"monitors":[],"name":"Set Up the Job","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","isDefault":false,"monitors":[],"name":"Machine Learning","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/ml/clustering_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","application":{"name":"python"},"isDefault":false,"isUsingDataset":true,"name":"Python ML Train Clustering","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"schemaVersion":"2022.8.16","units":[{"flowchartId":"head-set-predict-status","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Dataset","next":"head-branch-on-predict-status","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"isDefault":false,"maxOccurrences":100,"monitors":[],"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"flowchartId":"end-of-ml-train-head","head":false,"input":[],"isDefault":false,"monitors":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:random_forest_classification:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:roc_curve:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ROC Curve Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","isDefault":false,"monitors":[],"name":"Set Up the Job","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","isDefault":false,"monitors":[],"name":"Machine Learning","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/ml/regression_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","application":{"name":"python"},"isDefault":false,"isUsingDataset":true,"name":"Python ML Train Regression","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"schemaVersion":"2022.8.16","units":[{"flowchartId":"head-set-predict-status","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Dataset","next":"head-branch-on-predict-status","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"isDefault":false,"maxOccurrences":100,"monitors":[],"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"flowchartId":"end-of-ml-train-head","head":false,"input":[],"isDefault":false,"monitors":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:multilayer_perceptron:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:parity_plot:matplotlib","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Parity Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","isDefault":false,"monitors":[],"name":"Set Up the Job","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","isDefault":false,"monitors":[],"name":"Machine Learning","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/python_script.json":{"_id":"de816646-766b-5f97-b468-0937d4381440","application":{"name":"python"},"isDefault":false,"name":"Python Script","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Python Script","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","flowchartId":"c50e28b2-a0c5-5324-8b6f-e99b5a546bd8","isDefault":false,"monitors":[],"name":"Python Script","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"shell/batch_espresso_pwscf.json":{"_id":"e0046fb4-37db-5732-bf81-c48e13081a4c","application":{"name":"shell"},"isDefault":false,"name":"Shell Batch Job (Espresso PWSCF)","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Batch Job (Espresso PWSCF)","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"job_espresso_pw_scf","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","flowchartId":"d884e8f7-7acf-5a03-bc9a-186903bdaa0e","isDefault":false,"monitors":[],"name":"Shell Batch Job (Espresso PWSCF)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"shell/hello_world.json":{"_id":"d2fd444c-06b4-5d66-baeb-449c680ae1bf","application":{"name":"shell"},"isDefault":false,"name":"Shell Script","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Hello World","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","flowchartId":"319307c2-bf22-5bf2-b4e9-a4cdf671b786","isDefault":false,"monitors":[],"name":"Shell Hello World","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/band_gap.json":{"_id":"1a358471-0a73-5fcb-ad3c-7a8079029c86","application":{"name":"vasp"},"isDefault":false,"name":"Band Gap","properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Gap","properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"f0d65517-9592-5bc8-948e-a0851a766cbb","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"schemaVersion":"2022.8.16"},"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","flowchartId":"db3b83ea-0ef5-594c-89a8-bde38dbc6105","isDefault":false,"monitors":[],"name":"Band Gap","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/band_structure.json":{"_id":"25b0ad08-87bb-5400-bea4-acd5fe2163c0","application":{"name":"vasp"},"isDefault":false,"name":"Band Structure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","flowchartId":"c573187f-a8bb-5084-9fcf-1560bf4a7786","isDefault":false,"monitors":[],"name":"Band Structure","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/band_structure_dos.json":{"_id":"c8338d40-3c6e-5581-b03c-d7fb5cbb8df5","application":{"name":"vasp"},"isDefault":false,"name":"Band Structure + Density of States","properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"d38fea11-9781-5151-8dae-d705381498be","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure + Density of States","properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"d38fea11-9781-5151-8dae-d705381498be","flowchartId":"8a098bb9-73b1-5e84-bfc7-b783e02d0f53","isDefault":false,"monitors":[],"name":"Band Structure + Density of States","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/dos.json":{"_id":"629a79fb-a03f-5e34-b2ce-9c735e8ef6c0","application":{"name":"vasp"},"isDefault":false,"name":"Density of States","properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Density of States","properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","flowchartId":"3e64fdb4-ab5b-52a0-a1d5-51343c49481c","isDefault":false,"monitors":[],"name":"Density of States","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/fixed_cell_relaxation.json":{"_id":"cb69418c-2f6c-551d-af81-0cf20ec1113d","application":{"name":"vasp"},"isDefault":false,"name":"Fixed-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Fixed-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","postProcessors":[{"name":"prepare_restart"}],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","postProcessors":[{"name":"prepare_restart"}],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","flowchartId":"0de8c4c8-b722-5cd2-ae68-b484262e0a01","isDefault":false,"monitors":[],"name":"Fixed-cell Relaxation","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/kpoint_convergence.json":{"_id":"fcf105f9-5ae7-5c32-a6b3-e3579cbdf39a","application":{"name":"vasp"},"isDefault":false,"name":"K-point Convergence","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"K-point Convergence","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"init-tolerance","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Init tolerance","next":"init-increment","operand":"TOL","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0.00001},{"flowchartId":"init-increment","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init increment","next":"init-result","operand":"INC","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"flowchartId":"init-result","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init result","next":"init-parameter","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0},{"flowchartId":"init-parameter","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init parameter","next":"vasp-kpoint-convergence","operand":"PARAMETER","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"vasp-kpoint-convergence","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","next":"store-result","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"store-result","head":false,"input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"isDefault":false,"monitors":[],"name":"store result","next":"check-convergence","operand":"RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"else":"update-result","flowchartId":"check-convergence","head":false,"input":[],"isDefault":false,"maxOccurrences":50,"monitors":[],"name":"check convergence","next":"update-result","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","status":"idle","statusTrack":[],"tags":[],"then":"convergence-is-reached","type":"condition"},{"flowchartId":"update-result","head":false,"input":[{"name":"RESULT","scope":"global"}],"isDefault":false,"monitors":[],"name":"update result","next":"increment-parameter","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"RESULT"},{"flowchartId":"increment-parameter","head":false,"input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"isDefault":false,"monitors":[],"name":"increment parameter","next":"vasp-kpoint-convergence","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER+INC"},{"flowchartId":"convergence-is-reached","head":false,"input":[{"name":"PARAMETER","scope":"global"}],"isDefault":false,"monitors":[],"name":"exit","operand":"PARAMETER","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER"}]}],"units":[{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","flowchartId":"a34eec2c-cdb2-537d-88c0-ed1d7b205879","isDefault":false,"monitors":[],"name":"K-point Convergence","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/neb.json":{"_id":"2973908e-21ae-5424-afc9-ccb3fde477d8","application":{"name":"vasp"},"isDefault":false,"name":"Nudged Elastic Band (NEB)","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","reaction_energy_barrier","reaction_energy_profile"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"compute":{"arguments":{"nband":1,"ndiag":1,"nimage":1,"npools":1,"ntg":1},"cluster":{"fqdn":""},"isRestartable":true,"nodes":1,"notify":"n","ppn":1,"queue":"D","timeLimit":"01:00:00","timeLimitType":"per single attempt"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Initial/Final Total Energies","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","next":"e65a17ce-10c8-5710-ad4d-fb3d42434091","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"isDraft":false,"isMultiMaterial":true,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Prepare Directories","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bash_vasp_prepare_neb_images","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR <; export class ApplicationStandata extends Standata { static runtimeData = APPLICATIONS; + private appCache: Record< + string, + Record< + string, + { + executable: ExecutableSchema; + flavors: FlavorSchema[]; + } + > + > = {}; + private getAppDataForApplication(appName: string) { const applicationVersionsMap = APP_VERSIONS[appName]; @@ -53,7 +69,11 @@ export class ApplicationStandata extends Standata { return applicationVersionsMap; } - private getAppTreeForApplication(appName: string) { + private getApplicationExecutablesTree(appName: string) { + if (appName in this.appCache) { + return this.appCache[appName]; + } + // TODO: Convert to use this.findEntitiesByTags() when tree data is in Standata format const executableData = EXECUTABLE_FLAVOR; @@ -63,20 +83,33 @@ export class ApplicationStandata extends Standata { const appTree = executableData[appName]; - return Object.fromEntries( - Object.entries(appTree).map(([name, exec]) => { + this.appCache[appName] = Object.fromEntries( + Object.entries(appTree).map(([name, { flavors, ...executable }]) => { return [ name, { - preProcessors: [], - postProcessors: [], - applicationId: [], - ...exec, - name, + executable: { + preProcessors: [], + postProcessors: [], + applicationId: [], + ...executable, + name, + }, + flavors: Object.entries(flavors).map(([name, value]) => { + return { + preProcessors: [], + postProcessors: [], + results: [], + ...value, + name, + }; + }), }, ]; }), ); + + return this.appCache[appName]; } getAllAppTemplates(): TemplateSchema[] { @@ -249,32 +282,42 @@ export class ApplicationStandata extends Standata { return application; } - getExecutableByName(appName: string, execName?: string): ExecutableTreeItem { - const appTree = this.getAppTreeForApplication(appName); + getExecutableByName(appName: string, execName?: string) { + const appTree = this.getApplicationExecutablesTree(appName); const config = - execName && appTree[execName] - ? appTree[execName] - : Object.values(appTree).find((exec) => exec.isDefault); + (execName && appTree[execName]) || + Object.values(appTree).find((exec) => exec.executable.isDefault); if (!config) { throw new Error(`Executable ${execName} not found for application ${appName}`); } - return config; + return config.executable; } - /** - * - * @deprecated use getExecutableByName directly - */ - getExecutableByConfig(appName: string, config?: { name: string }) { - return this.getExecutableByName(appName, config?.name); - } + getExecutableAndFlavorByName( + appName: string, + execName?: string, + flavorName?: string, + ): { + executable: ExecutableSchema; + flavor: FlavorSchema; + } { + const appTree = this.getApplicationExecutablesTree(appName); + const config = + (execName && appTree[execName]) || + Object.values(appTree).find((exec) => exec.executable.isDefault); + + if (!config) { + throw new Error(`Executable ${execName} not found for application ${appName}`); + } + + const { executable, flavors } = config; - getExecutableAndFlavorByName(appName: string, execName?: string, flavorName?: string) { - const executable = this.getExecutableByName(appName, execName); - const flavor = this.getFlavorByName(executable, flavorName); + const flavor = flavors.find((value) => { + return flavorName ? value.name === flavorName : value.isDefault; + }); if (!flavor) { throw new Error( @@ -282,32 +325,10 @@ export class ApplicationStandata extends Standata { ); } - return { executable, flavor }; - } - - getFlavorByName(executable: ExecutableTreeItem, name?: string) { - return this.getExecutableFlavors(executable).find((flavor) => - name ? flavor.name === name : flavor.isDefault, - ); - } - - /** - * @deprecated use getFlavorByName directly - */ - getFlavorByConfig(executable: ExecutableTreeItem, config?: { name: string }) { - return this.getFlavorByName(executable, config?.name); - } - - getExecutableFlavors(executable: ExecutableTreeItem): FlavorSchema[] { - return Object.entries(executable.flavors).map(([key, value]) => { - return { - preProcessors: [], - postProcessors: [], - results: [], - ...value, - name: key, - }; - }); + return { + executable, + flavor, + }; } getInput(flavor: FlavorSchema): TemplateSchema[] { diff --git a/src/py/mat3ra/standata/data/subworkflows.py b/src/py/mat3ra/standata/data/subworkflows.py index d85288c6..540241ca 100644 --- a/src/py/mat3ra/standata/data/subworkflows.py +++ b/src/py/mat3ra/standata/data/subworkflows.py @@ -1,3 +1,3 @@ import json -subworkflows_data = json.loads(r'''{"standataConfig":{"categories":{"properties":["atomic_forces","average_potential_profile","band_gaps","band_structure","charge_density_profile","density_of_states","dielectric_tensor","fermi_energy","file_content","final_structure","phonon_dispersions","phonon_dos","potential_profile","pressure","reaction_energy_barrier","reaction_energy_profile","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force","valence_band_offset","wavefunction_amplitude","workflow:pyml_predict","zero_point_energy"],"tags":["creates-predictions-csv-during-predict-phase","default","pyml:workflow-type-setter","remove-all-results","set-io-unit-filenames","variable-cell_relaxation","wfn","wfn_plot"],"application":["espresso","nwchem","python","shell","vasp"]},"entities":[{"filename":"espresso/average_electrostatic_potential_find_minima.json","categories":["espresso","python"]},{"filename":"espresso/average_electrostatic_potential_via_band_structure.json","categories":["atomic_forces","average_potential_profile","band_gaps","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/average_electrostatic_potential.json","categories":["atomic_forces","average_potential_profile","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_gap_hse_dos.json","categories":["atomic_forces","band_gaps","density_of_states","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_gap.json","categories":["atomic_forces","band_gaps","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_structure_dos.json","categories":["atomic_forces","band_gaps","band_structure","density_of_states","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_structure_hse.json","categories":["atomic_forces","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_structure_magn.json","categories":["atomic_forces","band_structure","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_structure_soc.json","categories":["atomic_forces","band_structure","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/band_structure.json","categories":["atomic_forces","band_structure","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/dielectric_tensor.json","categories":["atomic_forces","band_gaps","dielectric_tensor","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/dos.json","categories":["atomic_forces","band_gaps","density_of_states","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/electronic_density_mesh.json","categories":["atomic_forces","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/esm_relax.json","categories":["atomic_forces","charge_density_profile","espresso","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/esm.json","categories":["atomic_forces","charge_density_profile","espresso","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/espresso_extract_kpoints.json","categories":["espresso","python"]},{"filename":"espresso/espresso_xml_get_qpt_irr.json","categories":["espresso"]},{"filename":"espresso/fixed_cell_relaxation.json","categories":["atomic_forces","espresso","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"]},{"filename":"espresso/gw_band_structure_band_gap_full_frequency.json","categories":["atomic_forces","band_gaps","band_structure","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/gw_band_structure_band_gap_plasmon_pole.json","categories":["atomic_forces","band_gaps","band_structure","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/kpoint_convergence.json","categories":["atomic_forces","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_force"]},{"filename":"espresso/neb.json","categories":["espresso","reaction_energy_barrier","reaction_energy_profile"]},{"filename":"espresso/ph_init_qpoints.json","categories":["espresso"]},{"filename":"espresso/ph_single_irr_qpt.json","categories":["espresso"]},{"filename":"espresso/phonon_dispersions.json","categories":["atomic_forces","espresso","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/phonon_dos_dispersion.json","categories":["atomic_forces","espresso","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/phonon_dos.json","categories":["atomic_forces","espresso","fermi_energy","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/phonon_reduce.json","categories":["espresso","phonon_dispersions","phonon_dos"]},{"filename":"espresso/plot_wavefunction.json","categories":["espresso","file_content","python"]},{"filename":"espresso/post_processor.json","categories":["espresso","shell"]},{"filename":"espresso/pre_processor.json","categories":["espresso","shell"]},{"filename":"espresso/pw_scf.json","categories":["atomic_forces","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/recalculate_bands.json","categories":["band_structure","espresso"]},{"filename":"espresso/surface_energy.json","categories":["atomic_forces","espresso","fermi_energy","pressure","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/total_energy.json","categories":["atomic_forces","default","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"]},{"filename":"espresso/valence_band_offset_calc_from_previous_esp_vbm.json","categories":["espresso","valence_band_offset"]},{"filename":"espresso/variable_cell_relaxation.json","categories":["atomic_forces","espresso","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force","variable-cell_relaxation"]},{"filename":"espresso/wavefunction_amplitude.json","categories":["atomic_forces","band_structure","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude","wfn","wfn_plot"]},{"filename":"espresso/zero_point_energy.json","categories":["atomic_forces","espresso","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"]},{"filename":"nwchem/total_energy.json","categories":["nwchem","total_energy","total_energy_contributions"]},{"filename":"python/ml/classification_tail.json","categories":["creates-predictions-csv-during-predict-phase","file_content","python","remove-all-results","workflow:pyml_predict"]},{"filename":"python/ml/clustering_tail.json","categories":["creates-predictions-csv-during-predict-phase","file_content","python","remove-all-results","workflow:pyml_predict"]},{"filename":"python/ml/regression_tail.json","categories":["creates-predictions-csv-during-predict-phase","file_content","python","remove-all-results","workflow:pyml_predict"]},{"filename":"python/ml/train_head.json","categories":["pyml:workflow-type-setter","python","set-io-unit-filenames"]},{"filename":"python/python_script.json","categories":["python"]},{"filename":"shell/batch_espresso_pwscf.json","categories":["shell"]},{"filename":"shell/hello_world.json","categories":["shell"]},{"filename":"vasp/band_gap.json","categories":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/band_structure_dos.json","categories":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/band_structure.json","categories":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/dos.json","categories":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/fixed_cell_relaxation.json","categories":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force","vasp"]},{"filename":"vasp/initial_final_total_energies.json","categories":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/kpoint_convergence.json","categories":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/neb_subworkflow.json","categories":["reaction_energy_barrier","reaction_energy_profile","vasp"]},{"filename":"vasp/prepare_images.json","categories":["shell","vasp"]},{"filename":"vasp/recalculate_bands.json","categories":["band_structure","vasp"]},{"filename":"vasp/surface_energy.json","categories":["atomic_forces","fermi_energy","pressure","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/total_energy.json","categories":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","vasp"]},{"filename":"vasp/variable_cell_relaxation.json","categories":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force","variable-cell_relaxation","vasp"]},{"filename":"vasp/zero_point_energy.json","categories":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_force","vasp","zero_point_energy"]}]},"filesMapByName":{"espresso/average_electrostatic_potential_find_minima.json":{"_id":"e5bee93f-2b6b-5d91-9a53-5ed309a918d3","name":"Find ESP Value","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Find Extrema","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"python-find-extrema","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"generic:processing:find_extrema:scipy","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/average_electrostatic_potential_via_band_structure.json":{"isMultiMaterial":true,"_id":"09f5f4ff-7dbd-59ae-ad27-5af1bdfc2bd0","name":"Band Structure + average ESP","application":{"name":"espresso"},"properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"name":"Set Material Index","type":"assignment","operand":"MATERIAL_INDEX","value":0,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"2d360607-c739-54ad-97a0-8a83f0971f2c","head":true,"next":"9fc7a088-5533-5f70-bb33-f676ec65f565","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"pw-bands-calculate-band-gap","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a667d9fd-35d5-5897-be0e-fa0247233649","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"average-electrostatic-potential","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"average_potential_profile"}],"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"name":"average_potential","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/average_electrostatic_potential.json":{"_id":"7f2f8a38-c3bd-5aa9-b3b0-2c367287dd60","name":"Average Electrostatic Potential","application":{"name":"espresso"},"properties":["atomic_forces","average_potential_profile","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"average-electrostatic-potential","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"average_potential_profile"}],"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"name":"average_potential","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_gap_hse_dos.json":{"_id":"f1341a29-777d-5ca3-8933-78a5e0d3f6f2","name":"HSE Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"hybrid","functional":"hse06","method":{"type":"pseudopotential","subtype":"us","data":{}}},"units":[{"type":"execution","name":"pw_scf_hse","head":true,"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f494cdb2-304f-5da2-b979-ce3fbba3a6c4","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_hse.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_hse","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = {% if kgrid.dimensions[0]%2 == 0 %}{{kgrid.dimensions[0]/2}}{% else %}{{(kgrid.dimensions[0]+1)/2}}{% endif %}, nqx2 = {% if kgrid.dimensions[1]%2 == 0 %}{{kgrid.dimensions[1]/2}}{% else %}{{(kgrid.dimensions[1]+1)/2}}{% endif %}, nqx3 = {% if kgrid.dimensions[2]%2 == 0 %}{{kgrid.dimensions[2]/2}}{% else %}{{(kgrid.dimensions[2]+1)/2}}{% endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{% if d%2 == 0 %}{{d}} {% else %}{{d+1}} {% endif %}{% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_hse.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"density_of_states"}],"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":[{"name":"standard_output"}],"name":"projwfc","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_gap.json":{"_id":"233bb8cf-3b4a-5378-84d9-a6a95a2ab43d","name":"Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_nscf","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_structure_dos.json":{"_id":"fa594399-6b98-5d79-986c-0713601dc06c","name":"Band Structure + Density of States","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"d618df45-5af3-5da5-8882-d74a27e00b04","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_nscf","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"density_of_states"}],"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":[{"name":"standard_output"}],"name":"projwfc","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_structure_hse.json":{"_id":"ef3089f3-7460-56f2-9aa2-172d5339d3be","name":"Band Structure - HSE","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"hybrid","functional":"hse06","method":{"type":"pseudopotential","subtype":"us","data":{}}},"units":[{"type":"execution","name":"pw_scf_bands_hse","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"08bd7e4a-2454-53b7-8cc9-9a95975f7e6f","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_bands_hse.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_bands_hse","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n {% for d in qgrid.dimensions -%}\n nqx{{loop.index}} = {{d}}\n {% endfor %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal\n{{ '{{' }} {{ explicitKPath.length }} {% raw %} + KPOINTS|length {% endraw %} {{ '}}' }}\n{% raw %}\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n{% endraw %}\n{% for point in explicitKPath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}0.0000001\n{% endfor %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPathFormDataManager"}],"executableName":"pw.x","name":"pw_scf_bands_hse.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_structure_magn.json":{"_id":"4a7dced1-224e-57d7-a616-cbad99062c7b","name":"Spin magnetic bandstructure","application":{"name":"espresso"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf_magn","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"c229d2a0-3c19-5f13-b3e0-ceb86cb9fbc1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_magn.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_magn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_magn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands_magn","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_magn.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands_magn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_magn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands_spin_up","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_up.in"}],"monitors":[{"name":"standard_output"}],"name":"bands_spin_up","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_up.dat'{% endraw %}\n spin_component = 1\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_up.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands_spin_dn","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_dn.in"}],"monitors":[{"name":"standard_output"}],"name":"bands_spin_dn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_dn.dat'{% endraw %}\n spin_component = 2\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_dn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_structure_soc.json":{"_id":"51e6fb82-538a-58ee-8d4e-991c8446f657","name":"Spin orbit coupling bandstructure","application":{"name":"espresso"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"nc-fr","data":{"searchText":"nc-fr"}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf_soc","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"74ec024a-f247-5f15-9c21-cc169bcb62c7","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_soc.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_soc","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_soc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands_soc","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_soc.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands_soc","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_soc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_structure.json":{"_id":"26d32e68-c2b5-50e9-8933-15f684fcc039","name":"Band Structure","application":{"name":"espresso"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"d618df45-5af3-5da5-8882-d74a27e00b04","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/dielectric_tensor.json":{"_id":"38340b52-83ad-5862-bc18-c140bdc0cb72","name":"Compute Dielectric Function","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","dielectric_tensor","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"nc","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b230ec3-0791-52f7-a4db-625390b8718f","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set No-Symmetry Flag","type":"assignment","operand":"NO_SYMMETRY_NO_INVERSION","value":true,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"3b230ec3-0791-52f7-a4db-625390b8718f","head":false,"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_nscf","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Compute dielectric function","head":false,"results":[{"name":"dielectric_tensor"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"epsilon.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"dielectric_tensor"}],"applicationName":"espresso","executableName":"epsilon.x","input":[{"name":"epsilon.in"}],"monitors":[{"name":"standard_output"}],"name":"dielectric_tensor","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n","contextProviders":[],"executableName":"epsilon.x","name":"epsilon.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/dos.json":{"_id":"2cf317f3-3306-5a96-bc9b-e9103ebcd5be","name":"Density of States","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_nscf","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"density_of_states"}],"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":[{"name":"standard_output"}],"name":"projwfc","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/electronic_density_mesh.json":{"_id":"e2749c5a-fcd9-589c-819b-8b88c5c90924","name":"Electronic Density Mesh","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pp_density","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_density.in"}],"monitors":[{"name":"standard_output"}],"name":"pp_density","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_density.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/esm_relax.json":{"_id":"69728792-afeb-50aa-9b4e-6974a90f676a","name":"Effective Screening Medium (ESM) Relax","application":{"name":"espresso"},"properties":["atomic_forces","charge_density_profile","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_esm_relax","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"a2bec506-1fdd-5125-a787-85f31cde20c1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_esm_relax","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm_relax.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/esm.json":{"_id":"0de669f6-a455-5dae-b331-19dc85f7090f","name":"Effective Screening Medium (ESM)","application":{"name":"espresso"},"properties":["atomic_forces","charge_density_profile","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_esm","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"2f487bc6-c237-53e4-bad5-be60369662cb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_esm","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/espresso_extract_kpoints.json":{"_id":"a2785cc5-2427-5c7a-b30f-7077475b948c","name":"Extract KPOINTS","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Extract kpoints","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"a716b133-2d04-50b5-b497-100265e3fa24","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"espresso_extract_kpoints.py"},{"name":"requirements.txt","templateName":"requirements_empty.txt"}],"monitors":[{"name":"standard_output"}],"name":"espresso_extract_kpoints","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_extract_kpoints.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/espresso_xml_get_qpt_irr.json":{"_id":"e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a","name":"espresso-xml-get-qpt-irr","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[],"schemaVersion":"2022.8.16","isDraft":false},"espresso/fixed_cell_relaxation.json":{"_id":"fb75e249-5489-5146-bd8a-786d33330d9c","name":"Fixed-cell Relaxation","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"c42871f6-ab79-5987-b228-c3bd80f16ffd","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_relax","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_relax.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/gw_band_structure_band_gap_full_frequency.json":{"_id":"46bcdcc8-628e-518e-b8c3-9bf38d7a2aef","name":"Full Frequency GW Band Structure + Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{"searchText":".*dojo-oncv.*"}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"gw_bands_full_frequency","head":false,"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"gw.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_full_frequency.in"}],"monitors":[{"name":"standard_output"}],"name":"gw_bands_full_frequency","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_full_frequency.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/gw_band_structure_band_gap_plasmon_pole.json":{"_id":"72b79a87-8eef-5fe2-9d6c-6c9c256dd56c","name":"Plasmon-Pole GW Band Structure + Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{"searchText":".*dojo-oncv.*"}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"gw_bands_plasmon_pole","head":false,"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"gw.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_plasmon_pole.in"}],"monitors":[{"name":"standard_output"}],"name":"gw_bands_plasmon_pole","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_plasmon_pole.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/kpoint_convergence.json":{"_id":"ff6a8fbc-2202-5786-9a26-67c843417d0b","name":"K-point Convergence","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-tolerance","head":true,"next":"init-increment","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-increment","head":false,"next":"init-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-result","head":false,"next":"init-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-parameter","head":false,"next":"pwscf-kpoint-convergence","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"pwscf-kpoint-convergence","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_kpt_conv.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_kpt_conv","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0{% endraw %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_kpt_conv.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"store-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"pwscf-kpoint-convergence"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"store-result","head":false,"next":"check-convergence","schemaVersion":"2022.8.16","isDefault":false},{"name":"check convergence","type":"condition","input":[],"statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"check-convergence","then":"convergence-is-reached","else":"update-result","head":false,"next":"update-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"update-result","head":false,"next":"increment-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"increment-parameter","next":"pwscf-kpoint-convergence","head":false,"schemaVersion":"2022.8.16","isDefault":false},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"convergence-is-reached","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/neb.json":{"isMultiMaterial":true,"_id":"c9034468-df28-5357-8912-02226f919042","name":"Nudged Elastic Band (NEB)","application":{"name":"espresso"},"properties":["reaction_energy_barrier","reaction_energy_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"neb","head":true,"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9f273ca0-d240-5b1f-89a9-64dd579304ac","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"neb.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"applicationName":"espresso","executableName":"neb.x","input":[{"name":"neb.in"}],"monitors":[{"name":"standard_output"}],"name":"neb","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = {{ 2 + (input.INTERMEDIATE_IMAGES.length or neb.nImages) }},\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_first = false %}\n{%- for position in input.FIRST_IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_first = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.FIRST_IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_first %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n{%- for IMAGE in input.INTERMEDIATE_IMAGES %}\nINTERMEDIATE_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_intermediate = false %}\n{%- for position in IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_intermediate = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_intermediate %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n{%- endfor %}\nLAST_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_last = false %}\n{%- for position in input.LAST_IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_last = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.LAST_IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_last %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nEND_POSITIONS\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nEND_ENGINE_INPUT\nEND\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"NEBFormDataManager"},{"name":"QENEBInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"neb.x","name":"neb.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/ph_init_qpoints.json":{"_id":"2f017bcb-f4ba-55b8-b939-1f780679a88e","name":"ph-init-qpoints","application":{"name":"espresso"},"properties":[],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"ph_init_qpoints","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"b8ea6a33-38f3-5434-b17e-b5eae8fff9fc","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_init_qpoints.in"}],"monitors":[{"name":"standard_output"}],"name":"ph_init_qpoints","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_init_qpoints.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/ph_single_irr_qpt.json":{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","name":"ph-single-irr-qpt","application":{"name":"espresso"},"properties":[],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"ph_single_irr_qpt","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"8db9af08-d935-57a0-a824-e7db6d936de8","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_single_irr_qpt.in"}],"monitors":[{"name":"standard_output"}],"name":"ph_single_irr_qpt","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_single_irr_qpt.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/phonon_dispersions.json":{"_id":"bfb69b48-8fbf-5a0d-8949-448f20754766","name":"Phonon Dispersions","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"13bcafce-56ef-5b47-b079-317495eb6933","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dos"}],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":[{"name":"standard_output"}],"name":"ph_grid","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dispersions"}],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_path","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/phonon_dos_dispersion.json":{"_id":"291d25cd-378a-5be7-9d85-c8013a4b165b","name":"Phonon Density of States + Dispersions","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"13bcafce-56ef-5b47-b079-317495eb6933","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dos"}],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":[{"name":"standard_output"}],"name":"ph_grid","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dos"}],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dispersions"}],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_path","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/phonon_dos.json":{"_id":"2232051b-9f2a-5a48-9b4d-6231eb6e8297","name":"Phonon Density of States","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"13bcafce-56ef-5b47-b079-317495eb6933","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dos"}],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":[{"name":"standard_output"}],"name":"ph_grid","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dos"}],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/phonon_reduce.json":{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","name":"reduce","application":{"name":"espresso"},"properties":["phonon_dispersions","phonon_dos"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"ph_grid_restart","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb206177-a4af-599a-81ba-6c88d24253b6","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid_restart.in"}],"monitors":[{"name":"standard_output"}],"name":"ph_grid_restart","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid_restart.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dos"}],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dispersions"}],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_path","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/plot_wavefunction.json":{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","name":"Plot Wavefunction","application":{"name":"espresso"},"properties":["file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"plot WFN","head":true,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"57fca898-8e8b-5ef2-81a5-9d2b612bc18d","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"file_content"}],"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"monitors":[{"name":"standard_output"}],"name":"plot_wavefunction","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/post_processor.json":{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","name":"post-processor","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_collect_dynmat.sh"}],"monitors":[{"name":"standard_output"}],"name":"espresso_collect_dynmat","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_collect_dynmat.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/pre_processor.json":{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","name":"pre-processor","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_link_outdir_save.sh"}],"monitors":[{"name":"standard_output"}],"name":"espresso_link_outdir_save","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_link_outdir_save.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/pw_scf.json":{"_id":"f52b8039-83d0-5485-a1f1-0bc37cb01ed3","name":"pw-scf","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/recalculate_bands.json":{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","name":"Recalculate Bands","application":{"name":"espresso"},"properties":["band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_bands","head":true,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/surface_energy.json":{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","name":"Surface Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/total_energy.json":{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","name":"Total Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false,"tags":["default"]},"espresso/valence_band_offset_calc_from_previous_esp_vbm.json":{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","name":"Calculate VBO","application":{"name":"espresso"},"properties":["valence_band_offset"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Difference of valence band maxima","type":"assignment","operand":"VBM_DIFF","value":"VBM_LEFT - VBM_RIGHT","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","head":true,"next":"2626f7bb-d392-5fd4-ab71-329b508de347","schemaVersion":"2022.8.16","isDefault":false},{"name":"Difference of macroscopically averaged ESP in bulk","type":"assignment","operand":"AVG_ESP_DIFF","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","head":false,"next":"b7307787-53e2-599b-ad12-d627b04074b4","schemaVersion":"2022.8.16","isDefault":false},{"name":"Lineup of macroscopically averaged ESP in interface","type":"assignment","operand":"ESP_LINEUP","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","head":false,"next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","schemaVersion":"2022.8.16","isDefault":false},{"name":"Valence Band Offset","type":"assignment","operand":"VALENCE_BAND_OFFSET","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))","input":[],"results":[{"name":"valence_band_offset"}],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/variable_cell_relaxation.json":{"systemName":"espresso-variable-cell-relaxation","_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","name":"Variable-cell Relaxation","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_vc-relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false,"tags":["variable-cell_relaxation"]},"espresso/wavefunction_amplitude.json":{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","name":"Wavefunction Amplitude","application":{"name":"espresso"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"band_structure"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"pw-scf","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"extract-band-energies","schemaVersion":"2022.8.16","isDefault":false},{"name":"Extract Band Energies","type":"assignment","operand":"band_energies","value":"[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]","input":[{"name":"band_structure","scope":"pw-scf"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"extract-band-energies","head":false,"next":"indices-below-fermi","schemaVersion":"2022.8.16","isDefault":false},{"name":"Find Indices Below Fermi","type":"assignment","operand":"indices_below_fermi","value":"[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]","input":[{"name":"fermi_energy","scope":"pw-scf"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"indices-below-fermi","head":false,"next":"8771dc7f-878e-5f13-a840-a3a416854f1e","schemaVersion":"2022.8.16","isDefault":false},{"name":"Store Band Below EF","type":"assignment","operand":"KBAND_VALUE_BELOW_EF","value":"indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8771dc7f-878e-5f13-a840-a3a416854f1e","head":false,"next":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select Band","type":"assignment","operand":"KBAND_VALUE","value":"KBAND_VALUE_BELOW_EF","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","head":false,"next":"pp-wfn","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pp_wfn","head":false,"results":[{"name":"wavefunction_amplitude"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pp-wfn","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"wavefunction_amplitude"}],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"monitors":[{"name":"standard_output"}],"name":"pp_wfn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_wfn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false,"tags":["wfn","wfn_plot"]},"espresso/zero_point_energy.json":{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","name":"Zero Point Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"107595d1-490f-53a2-8432-7f8a12f14d96","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_zpe","head":false,"results":[{"name":"zero_point_energy"}],"monitors":[{"name":"standard_output"}],"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"zero_point_energy"}],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"monitors":[{"name":"standard_output"}],"name":"ph_gamma","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"nwchem/total_energy.json":{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","name":"Total Energy","application":{"name":"nwchem"},"properties":["total_energy","total_energy_contributions"],"model":{"type":"dft","subtype":"gga","method":{"type":"localorbital","subtype":"pople","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"nwchem_total_energy","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"nwchem","shortName":"nwchem","summary":"NWChem","build":"GNU","isDefault":true,"version":"7.0.2","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"}],"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"python/ml/classification_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:model:random_forest_classification:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ROC Curve Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"file_content"}],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:roc_curve:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"python/ml/clustering_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"applicationName":"python","executableName":"python","input":[{"name":"model_k_means_clustering_sklearn.py","templateName":"model_k_means_clustering_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:model:k_means_clustering:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_k_means_clustering_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"9c95c27b-c8bd-5e8b-8829-d354611decef","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"2D PCA Clusters Plot","head":false,"results":[{"name":"file_content"},{"name":"file_content"},{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9c95c27b-c8bd-5e8b-8829-d354611decef","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"file_content"}],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_pca_2d_clusters_matplotlib.py","templateName":"post_processing_pca_2d_clusters_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:pca_2d_clusters:matplotlib","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_pca_2d_clusters_matplotlib.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"python/ml/regression_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:model:multilayer_perceptron:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Parity Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"file_content"}],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:parity_plot:matplotlib","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"python/ml/train_head.json":{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"flowchartId":"head-set-predict-status","head":true,"next":"head-fetch-training-data","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Dataset","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"type":"object_storage","basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"head-branch-on-predict-status","schemaVersion":"2022.8.16","isDefault":false},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","then":"head-fetch-trained-model","head":false,"next":"head-fetch-trained-model","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["set-io-unit-filenames"],"enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"type":"object_storage","basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"end-of-ml-train-head","schemaVersion":"2022.8.16","isDefault":false},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"end-of-ml-train-head","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"python/python_script.json":{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","name":"Python Script","application":{"name":"python"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"python","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"shell/batch_espresso_pwscf.json":{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","name":"Shell Batch Job (Espresso PWSCF)","application":{"name":"shell"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"monitors":[{"name":"standard_output"}],"name":"job_espresso_pw_scf","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"shell/hello_world.json":{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","name":"Shell Hello World","application":{"name":"shell"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/band_gap.json":{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","name":"Band Gap","application":{"name":"vasp"},"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"f0d65517-9592-5bc8-948e-a0851a766cbb","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_nscf","head":false,"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/band_structure_dos.json":{"_id":"d38fea11-9781-5151-8dae-d705381498be","name":"Band Structure + Density of States","application":{"name":"vasp"},"properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/band_structure.json":{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","name":"Band Structure","application":{"name":"vasp"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/dos.json":{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","name":"Density of States","application":{"name":"vasp"},"properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/fixed_cell_relaxation.json":{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","name":"Fixed-cell Relaxation","application":{"name":"vasp"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_relax","head":true,"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/initial_final_total_energies.json":{"isMultiMaterial":true,"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","name":"Initial/Final Total Energies","application":{"name":"vasp"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_neb_initial","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"e65a17ce-10c8-5710-ad4d-fb3d42434091","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_neb_final","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"compute":{"ppn":1,"nodes":1,"queue":"D","timeLimit":"01:00:00","notify":"n","cluster":{"fqdn":""},"timeLimitType":"per single attempt","isRestartable":true,"arguments":{"nimage":1,"npools":1,"nband":1,"ntg":1,"ndiag":1}},"schemaVersion":"2022.8.16","isDraft":false},"vasp/kpoint_convergence.json":{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","name":"K-point Convergence","application":{"name":"vasp"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-tolerance","head":true,"next":"init-increment","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-increment","head":false,"next":"init-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-result","head":false,"next":"init-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-parameter","head":false,"next":"vasp-kpoint-convergence","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"vasp-kpoint-convergence","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"store-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"store-result","head":false,"next":"check-convergence","schemaVersion":"2022.8.16","isDefault":false},{"name":"check convergence","type":"condition","input":[],"statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"check-convergence","then":"convergence-is-reached","else":"update-result","head":false,"next":"update-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"update-result","head":false,"next":"increment-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"increment-parameter","next":"vasp-kpoint-convergence","head":false,"schemaVersion":"2022.8.16","isDefault":false},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"convergence-is-reached","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/neb_subworkflow.json":{"isMultiMaterial":true,"_id":"e6215fb9-e60c-541b-b73e-b077d64b3a95","name":"Nudged Elastic Band (NEB)","application":{"name":"vasp"},"properties":["reaction_energy_barrier","reaction_energy_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_neb","head":true,"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9a1660ab-8067-5fad-9fb8-7c039f634636","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB"},{"name":"KPOINTS","templateName":"KPOINTS"}],"monitors":[{"name":"standard_output"}],"name":"vasp_neb","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nIBRION = 1\nEDIFFG = -0.001\nENCUT = 500\nNELM = 100\nNSW = 100\nIMAGES = {{ input.INTERMEDIATE_IMAGES.length or neb.nImages }}\nSPRING = -5\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/prepare_images.json":{"isMultiMaterial":true,"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","name":"Prepare Directories","application":{"name":"vasp"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"prepare-neb-images","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"monitors":[{"name":"standard_output"}],"name":"bash_vasp_prepare_neb_images","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR <=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/average_electrostatic_potential_via_band_structure.json":{"isMultiMaterial":true,"_id":"09f5f4ff-7dbd-59ae-ad27-5af1bdfc2bd0","name":"Band Structure + average ESP","application":{"name":"espresso"},"properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"name":"Set Material Index","type":"assignment","operand":"MATERIAL_INDEX","value":0,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"2d360607-c739-54ad-97a0-8a83f0971f2c","head":true,"next":"9fc7a088-5533-5f70-bb33-f676ec65f565","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"pw-bands-calculate-band-gap","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a667d9fd-35d5-5897-be0e-fa0247233649","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"average-electrostatic-potential","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"average_potential_profile"}],"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"name":"average_potential","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/average_electrostatic_potential.json":{"_id":"7f2f8a38-c3bd-5aa9-b3b0-2c367287dd60","name":"Average Electrostatic Potential","application":{"name":"espresso"},"properties":["atomic_forces","average_potential_profile","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"average-electrostatic-potential","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"average_potential_profile"}],"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"name":"average_potential","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_gap_hse_dos.json":{"_id":"f1341a29-777d-5ca3-8933-78a5e0d3f6f2","name":"HSE Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"hybrid","functional":"hse06","method":{"type":"pseudopotential","subtype":"us","data":{}}},"units":[{"type":"execution","name":"pw_scf_hse","head":true,"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f494cdb2-304f-5da2-b979-ce3fbba3a6c4","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_hse.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_hse","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = {% if kgrid.dimensions[0]%2 == 0 %}{{kgrid.dimensions[0]/2}}{% else %}{{(kgrid.dimensions[0]+1)/2}}{% endif %}, nqx2 = {% if kgrid.dimensions[1]%2 == 0 %}{{kgrid.dimensions[1]/2}}{% else %}{{(kgrid.dimensions[1]+1)/2}}{% endif %}, nqx3 = {% if kgrid.dimensions[2]%2 == 0 %}{{kgrid.dimensions[2]/2}}{% else %}{{(kgrid.dimensions[2]+1)/2}}{% endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{% if d%2 == 0 %}{{d}} {% else %}{{d+1}} {% endif %}{% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_hse.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"density_of_states"}],"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":[{"name":"standard_output"}],"name":"projwfc","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_gap.json":{"_id":"233bb8cf-3b4a-5378-84d9-a6a95a2ab43d","name":"Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_nscf","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_structure_dos.json":{"_id":"fa594399-6b98-5d79-986c-0713601dc06c","name":"Band Structure + Density of States","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"d618df45-5af3-5da5-8882-d74a27e00b04","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_nscf","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"density_of_states"}],"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":[{"name":"standard_output"}],"name":"projwfc","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_structure_hse.json":{"_id":"ef3089f3-7460-56f2-9aa2-172d5339d3be","name":"Band Structure - HSE","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"hybrid","functional":"hse06","method":{"type":"pseudopotential","subtype":"us","data":{}}},"units":[{"type":"execution","name":"pw_scf_bands_hse","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"08bd7e4a-2454-53b7-8cc9-9a95975f7e6f","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_bands_hse.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_bands_hse","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n {% for d in qgrid.dimensions -%}\n nqx{{loop.index}} = {{d}}\n {% endfor %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal\n{{ '{{' }} {{ explicitKPath.length }} {% raw %} + KPOINTS|length {% endraw %} {{ '}}' }}\n{% raw %}\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n{% endraw %}\n{% for point in explicitKPath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}0.0000001\n{% endfor %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPathFormDataManager"}],"executableName":"pw.x","name":"pw_scf_bands_hse.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_structure_magn.json":{"_id":"4a7dced1-224e-57d7-a616-cbad99062c7b","name":"Spin magnetic bandstructure","application":{"name":"espresso"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf_magn","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"c229d2a0-3c19-5f13-b3e0-ceb86cb9fbc1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_magn.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_magn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_magn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands_magn","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_magn.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands_magn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_magn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands_spin_up","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_up.in"}],"monitors":[{"name":"standard_output"}],"name":"bands_spin_up","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_up.dat'{% endraw %}\n spin_component = 1\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_up.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands_spin_dn","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_dn.in"}],"monitors":[{"name":"standard_output"}],"name":"bands_spin_dn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_dn.dat'{% endraw %}\n spin_component = 2\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_dn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_structure_soc.json":{"_id":"51e6fb82-538a-58ee-8d4e-991c8446f657","name":"Spin orbit coupling bandstructure","application":{"name":"espresso"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"nc-fr","data":{"searchText":"nc-fr"}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf_soc","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"74ec024a-f247-5f15-9c21-cc169bcb62c7","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_soc.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_soc","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_soc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands_soc","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_soc.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands_soc","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_soc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/band_structure.json":{"_id":"26d32e68-c2b5-50e9-8933-15f684fcc039","name":"Band Structure","application":{"name":"espresso"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"d618df45-5af3-5da5-8882-d74a27e00b04","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/dielectric_tensor.json":{"_id":"38340b52-83ad-5862-bc18-c140bdc0cb72","name":"Compute Dielectric Function","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","dielectric_tensor","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"nc","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b230ec3-0791-52f7-a4db-625390b8718f","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set No-Symmetry Flag","type":"assignment","operand":"NO_SYMMETRY_NO_INVERSION","value":true,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"3b230ec3-0791-52f7-a4db-625390b8718f","head":false,"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_nscf","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Compute dielectric function","head":false,"results":[{"name":"dielectric_tensor"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"epsilon.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"dielectric_tensor"}],"applicationName":"espresso","executableName":"epsilon.x","input":[{"name":"epsilon.in"}],"monitors":[{"name":"standard_output"}],"name":"dielectric_tensor","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n","contextProviders":[],"executableName":"epsilon.x","name":"epsilon.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/dos.json":{"_id":"2cf317f3-3306-5a96-bc9b-e9103ebcd5be","name":"Density of States","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_nscf","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"density_of_states"}],"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":[{"name":"standard_output"}],"name":"projwfc","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/electronic_density_mesh.json":{"_id":"e2749c5a-fcd9-589c-819b-8b88c5c90924","name":"Electronic Density Mesh","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pp_density","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_density.in"}],"monitors":[{"name":"standard_output"}],"name":"pp_density","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_density.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/esm_relax.json":{"_id":"69728792-afeb-50aa-9b4e-6974a90f676a","name":"Effective Screening Medium (ESM) Relax","application":{"name":"espresso"},"properties":["atomic_forces","charge_density_profile","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_esm_relax","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"a2bec506-1fdd-5125-a787-85f31cde20c1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_esm_relax","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm_relax.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/esm.json":{"_id":"0de669f6-a455-5dae-b331-19dc85f7090f","name":"Effective Screening Medium (ESM)","application":{"name":"espresso"},"properties":["atomic_forces","charge_density_profile","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_esm","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"2f487bc6-c237-53e4-bad5-be60369662cb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_esm","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/espresso_extract_kpoints.json":{"_id":"a2785cc5-2427-5c7a-b30f-7077475b948c","name":"Extract KPOINTS","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Extract kpoints","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"a716b133-2d04-50b5-b497-100265e3fa24","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"espresso_extract_kpoints.py"},{"name":"requirements.txt","templateName":"requirements_empty.txt"}],"monitors":[{"name":"standard_output"}],"name":"espresso_extract_kpoints","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_extract_kpoints.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/espresso_xml_get_qpt_irr.json":{"_id":"e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a","name":"espresso-xml-get-qpt-irr","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"python","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"espresso_xml_get_qpt_irr.py"}],"monitors":[{"name":"standard_output"}],"name":"espresso_xml_get_qpt_irr","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n{# JOB_WORK_DIR will be initialized at runtime => avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_xml_get_qpt_irr.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"assignment","schemaVersion":"2022.8.16","isDefault":false},{"name":"assignment","type":"assignment","input":[{"scope":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","name":"STDOUT"}],"operand":"Q_POINTS","value":"json.loads(STDOUT)","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"assignment","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/fixed_cell_relaxation.json":{"_id":"fb75e249-5489-5146-bd8a-786d33330d9c","name":"Fixed-cell Relaxation","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"c42871f6-ab79-5987-b228-c3bd80f16ffd","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_relax","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_relax.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/gw_band_structure_band_gap_full_frequency.json":{"_id":"46bcdcc8-628e-518e-b8c3-9bf38d7a2aef","name":"Full Frequency GW Band Structure + Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{"searchText":".*dojo-oncv.*"}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"gw_bands_full_frequency","head":false,"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"gw.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_full_frequency.in"}],"monitors":[{"name":"standard_output"}],"name":"gw_bands_full_frequency","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_full_frequency.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/gw_band_structure_band_gap_plasmon_pole.json":{"_id":"72b79a87-8eef-5fe2-9d6c-6c9c256dd56c","name":"Plasmon-Pole GW Band Structure + Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{"searchText":".*dojo-oncv.*"}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"gw_bands_plasmon_pole","head":false,"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"gw.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_plasmon_pole.in"}],"monitors":[{"name":"standard_output"}],"name":"gw_bands_plasmon_pole","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_plasmon_pole.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/kpoint_convergence.json":{"_id":"ff6a8fbc-2202-5786-9a26-67c843417d0b","name":"K-point Convergence","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-tolerance","head":true,"next":"init-increment","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-increment","head":false,"next":"init-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-result","head":false,"next":"init-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-parameter","head":false,"next":"pwscf-kpoint-convergence","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"pwscf-kpoint-convergence","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_kpt_conv.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_kpt_conv","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0{% endraw %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_kpt_conv.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"store-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"pwscf-kpoint-convergence"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"store-result","head":false,"next":"check-convergence","schemaVersion":"2022.8.16","isDefault":false},{"name":"check convergence","type":"condition","input":[],"statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"check-convergence","then":"convergence-is-reached","else":"update-result","head":false,"next":"update-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"update-result","head":false,"next":"increment-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"increment-parameter","next":"pwscf-kpoint-convergence","head":false,"schemaVersion":"2022.8.16","isDefault":false},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"convergence-is-reached","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/neb.json":{"isMultiMaterial":true,"_id":"c9034468-df28-5357-8912-02226f919042","name":"Nudged Elastic Band (NEB)","application":{"name":"espresso"},"properties":["reaction_energy_barrier","reaction_energy_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"neb","head":true,"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9f273ca0-d240-5b1f-89a9-64dd579304ac","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"neb.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"applicationName":"espresso","executableName":"neb.x","input":[{"name":"neb.in"}],"monitors":[{"name":"standard_output"}],"name":"neb","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = {{ 2 + (input.INTERMEDIATE_IMAGES.length or neb.nImages) }},\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_first = false %}\n{%- for position in input.FIRST_IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_first = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.FIRST_IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_first %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n{%- for IMAGE in input.INTERMEDIATE_IMAGES %}\nINTERMEDIATE_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_intermediate = false %}\n{%- for position in IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_intermediate = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_intermediate %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n{%- endfor %}\nLAST_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_last = false %}\n{%- for position in input.LAST_IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_last = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.LAST_IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_last %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nEND_POSITIONS\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nEND_ENGINE_INPUT\nEND\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"NEBFormDataManager"},{"name":"QENEBInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"neb.x","name":"neb.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/ph_init_qpoints.json":{"_id":"2f017bcb-f4ba-55b8-b939-1f780679a88e","name":"ph-init-qpoints","application":{"name":"espresso"},"properties":[],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"ph_init_qpoints","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"b8ea6a33-38f3-5434-b17e-b5eae8fff9fc","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_init_qpoints.in"}],"monitors":[{"name":"standard_output"}],"name":"ph_init_qpoints","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_init_qpoints.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/ph_single_irr_qpt.json":{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","name":"ph-single-irr-qpt","application":{"name":"espresso"},"properties":[],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"ph_single_irr_qpt","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"8db9af08-d935-57a0-a824-e7db6d936de8","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_single_irr_qpt.in"}],"monitors":[{"name":"standard_output"}],"name":"ph_single_irr_qpt","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_single_irr_qpt.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/phonon_dispersions.json":{"_id":"bfb69b48-8fbf-5a0d-8949-448f20754766","name":"Phonon Dispersions","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"13bcafce-56ef-5b47-b079-317495eb6933","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dos"}],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":[{"name":"standard_output"}],"name":"ph_grid","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dispersions"}],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_path","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/phonon_dos_dispersion.json":{"_id":"291d25cd-378a-5be7-9d85-c8013a4b165b","name":"Phonon Density of States + Dispersions","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"13bcafce-56ef-5b47-b079-317495eb6933","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dos"}],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":[{"name":"standard_output"}],"name":"ph_grid","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dos"}],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dispersions"}],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_path","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/phonon_dos.json":{"_id":"2232051b-9f2a-5a48-9b4d-6231eb6e8297","name":"Phonon Density of States","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"13bcafce-56ef-5b47-b079-317495eb6933","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dos"}],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":[{"name":"standard_output"}],"name":"ph_grid","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dos"}],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/phonon_reduce.json":{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","name":"reduce","application":{"name":"espresso"},"properties":["phonon_dispersions","phonon_dos"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"ph_grid_restart","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb206177-a4af-599a-81ba-6c88d24253b6","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid_restart.in"}],"monitors":[{"name":"standard_output"}],"name":"ph_grid_restart","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid_restart.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dos"}],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dispersions"}],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_path","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/plot_wavefunction.json":{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","name":"Plot Wavefunction","application":{"name":"espresso"},"properties":["file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"plot WFN","head":true,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"57fca898-8e8b-5ef2-81a5-9d2b612bc18d","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"file_content"}],"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"monitors":[{"name":"standard_output"}],"name":"plot_wavefunction","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/post_processor.json":{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","name":"post-processor","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_collect_dynmat.sh"}],"monitors":[{"name":"standard_output"}],"name":"espresso_collect_dynmat","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_collect_dynmat.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/pre_processor.json":{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","name":"pre-processor","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_link_outdir_save.sh"}],"monitors":[{"name":"standard_output"}],"name":"espresso_link_outdir_save","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_link_outdir_save.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/pw_scf.json":{"_id":"f52b8039-83d0-5485-a1f1-0bc37cb01ed3","name":"pw-scf","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/recalculate_bands.json":{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","name":"Recalculate Bands","application":{"name":"espresso"},"properties":["band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_bands","head":true,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/surface_energy.json":{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","name":"Surface Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"io","name":"io-slab","head":true,"results":[],"monitors":[],"flowchartId":"e463ef46-a36e-5168-87dd-e21eb980dfb8","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"subtype":"input","source":"api","input":[{"type":"api","endpoint":"materials","endpoint_options":{"params":{"query":"{'_id': MATERIAL_ID}","projection":"{}"}},"name":"DATA"}],"next":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","schemaVersion":"2022.8.16","isDefault":false},{"type":"assignment","name":"slab","head":false,"results":[],"monitors":[],"flowchartId":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"input":[{"name":"DATA","scope":"e463ef46-a36e-5168-87dd-e21eb980dfb8"}],"operand":"SLAB","value":"DATA[0]","next":"44263820-0c80-5bd1-b854-9da8d198eac1","schemaVersion":"2022.8.16","isDefault":false},{"type":"io","name":"io-bulk","head":false,"results":[],"monitors":[],"flowchartId":"44263820-0c80-5bd1-b854-9da8d198eac1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"subtype":"input","source":"api","input":[{"type":"api","endpoint":"materials","endpoint_options":{"params":{"query":"{'_id': SLAB.metadata.bulkId}","projection":"{}"}},"name":"DATA"}],"next":"b70656f1-a394-57f4-b4de-00096969df4b","schemaVersion":"2022.8.16","isDefault":false},{"type":"assignment","name":"bulk","head":false,"results":[],"monitors":[],"flowchartId":"b70656f1-a394-57f4-b4de-00096969df4b","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"input":[{"name":"DATA","scope":"44263820-0c80-5bd1-b854-9da8d198eac1"}],"operand":"BULK","value":"DATA[0] if DATA else None","next":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","schemaVersion":"2022.8.16","isDefault":false},{"type":"assertion","name":"assert-bulk","head":false,"results":[],"monitors":[],"flowchartId":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"statement":"BULK != None","errorMessage":"Bulk material does not exist!","next":"490635e0-c593-5809-9eb2-c794b96cfed1","schemaVersion":"2022.8.16","isDefault":false},{"type":"io","name":"io-e-bulk","head":false,"results":[],"monitors":[],"flowchartId":"490635e0-c593-5809-9eb2-c794b96cfed1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"subtype":"input","source":"api","input":[{"type":"api","endpoint":"refined-properties","endpoint_options":{"params":{"query":"{ 'exabyteId': BULK.exabyteId, 'data.name': 'total_energy', 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} }","projection":"{'sort': {'precision.value': -1}, 'limit': 1}"}},"name":"DATA"}],"next":"bbe13b97-4243-5a85-8f61-a279d0b797aa","schemaVersion":"2022.8.16","isDefault":false},{"type":"assignment","name":"e-bulk","head":false,"results":[],"monitors":[],"flowchartId":"bbe13b97-4243-5a85-8f61-a279d0b797aa","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"input":[{"name":"DATA","scope":"490635e0-c593-5809-9eb2-c794b96cfed1"}],"operand":"E_BULK","value":"DATA[0].data.value if DATA else None","next":"a06c9f43-7670-5fd0-ac42-7028a472235a","schemaVersion":"2022.8.16","isDefault":false},{"type":"assertion","name":"assert-e-bulk","head":false,"results":[],"monitors":[],"flowchartId":"a06c9f43-7670-5fd0-ac42-7028a472235a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"statement":"E_BULK != None","errorMessage":"E_BULK does not exist!","next":"cdf210be-26ed-585a-b4ac-d55795ba2975","schemaVersion":"2022.8.16","isDefault":false},{"type":"assignment","name":"surface","head":false,"results":[],"monitors":[],"flowchartId":"cdf210be-26ed-585a-b4ac-d55795ba2975","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"input":[],"operand":"A","value":"np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))","next":"ffa8e43d-096a-555b-b8d0-6d283365ef47","schemaVersion":"2022.8.16","isDefault":false},{"type":"assignment","name":"n-bulk","head":false,"results":[],"monitors":[],"flowchartId":"ffa8e43d-096a-555b-b8d0-6d283365ef47","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"input":[],"operand":"N_BULK","value":"len(BULK.basis.elements)","next":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","schemaVersion":"2022.8.16","isDefault":false},{"type":"assignment","name":"n-slab","head":false,"results":[],"monitors":[],"flowchartId":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"input":[],"operand":"N_SLAB","value":"len(SLAB.basis.elements)","next":"9fc7a088-5533-5f70-bb33-f676ec65f565","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"fcd88119-817c-5ac1-a430-ba892ac743eb","schemaVersion":"2022.8.16","isDefault":false},{"type":"assignment","name":"e-slab","head":false,"results":[],"monitors":[],"flowchartId":"fcd88119-817c-5ac1-a430-ba892ac743eb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"input":[{"name":"total_energy","scope":"9fc7a088-5533-5f70-bb33-f676ec65f565"}],"operand":"E_SLAB","value":"total_energy","next":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","schemaVersion":"2022.8.16","isDefault":false},{"type":"assignment","name":"surface-energy","head":false,"results":[{"name":"surface_energy"}],"monitors":[],"flowchartId":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"input":[],"operand":"SURFACE_ENERGY","value":"1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))","schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/total_energy.json":{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","name":"Total Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false,"tags":["default"]},"espresso/valence_band_offset_calc_from_previous_esp_vbm.json":{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","name":"Calculate VBO","application":{"name":"espresso"},"properties":["valence_band_offset"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Difference of valence band maxima","type":"assignment","operand":"VBM_DIFF","value":"VBM_LEFT - VBM_RIGHT","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","head":true,"next":"2626f7bb-d392-5fd4-ab71-329b508de347","schemaVersion":"2022.8.16","isDefault":false},{"name":"Difference of macroscopically averaged ESP in bulk","type":"assignment","operand":"AVG_ESP_DIFF","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","head":false,"next":"b7307787-53e2-599b-ad12-d627b04074b4","schemaVersion":"2022.8.16","isDefault":false},{"name":"Lineup of macroscopically averaged ESP in interface","type":"assignment","operand":"ESP_LINEUP","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","head":false,"next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","schemaVersion":"2022.8.16","isDefault":false},{"name":"Valence Band Offset","type":"assignment","operand":"VALENCE_BAND_OFFSET","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))","input":[],"results":[{"name":"valence_band_offset"}],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"espresso/variable_cell_relaxation.json":{"systemName":"espresso-variable-cell-relaxation","_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","name":"Variable-cell Relaxation","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_vc-relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false,"tags":["variable-cell_relaxation"]},"espresso/wavefunction_amplitude.json":{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","name":"Wavefunction Amplitude","application":{"name":"espresso"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"band_structure"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"pw-scf","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"extract-band-energies","schemaVersion":"2022.8.16","isDefault":false},{"name":"Extract Band Energies","type":"assignment","operand":"band_energies","value":"[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]","input":[{"name":"band_structure","scope":"pw-scf"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"extract-band-energies","head":false,"next":"indices-below-fermi","schemaVersion":"2022.8.16","isDefault":false},{"name":"Find Indices Below Fermi","type":"assignment","operand":"indices_below_fermi","value":"[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]","input":[{"name":"fermi_energy","scope":"pw-scf"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"indices-below-fermi","head":false,"next":"8771dc7f-878e-5f13-a840-a3a416854f1e","schemaVersion":"2022.8.16","isDefault":false},{"name":"Store Band Below EF","type":"assignment","operand":"KBAND_VALUE_BELOW_EF","value":"indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8771dc7f-878e-5f13-a840-a3a416854f1e","head":false,"next":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select Band","type":"assignment","operand":"KBAND_VALUE","value":"KBAND_VALUE_BELOW_EF","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","head":false,"next":"pp-wfn","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pp_wfn","head":false,"results":[{"name":"wavefunction_amplitude"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pp-wfn","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"wavefunction_amplitude"}],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"monitors":[{"name":"standard_output"}],"name":"pp_wfn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_wfn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false,"tags":["wfn","wfn_plot"]},"espresso/zero_point_energy.json":{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","name":"Zero Point Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"107595d1-490f-53a2-8432-7f8a12f14d96","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_zpe","head":false,"results":[{"name":"zero_point_energy"}],"monitors":[{"name":"standard_output"}],"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"zero_point_energy"}],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"monitors":[{"name":"standard_output"}],"name":"ph_gamma","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"nwchem/total_energy.json":{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","name":"Total Energy","application":{"name":"nwchem"},"properties":["total_energy","total_energy_contributions"],"model":{"type":"dft","subtype":"gga","method":{"type":"localorbital","subtype":"pople","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"nwchem_total_energy","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"nwchem","shortName":"nwchem","summary":"NWChem","build":"GNU","isDefault":true,"version":"7.0.2","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"}],"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"python/ml/classification_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:model:random_forest_classification:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ROC Curve Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"file_content"}],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:roc_curve:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"python/ml/clustering_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"applicationName":"python","executableName":"python","input":[{"name":"model_k_means_clustering_sklearn.py","templateName":"model_k_means_clustering_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:model:k_means_clustering:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_k_means_clustering_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"9c95c27b-c8bd-5e8b-8829-d354611decef","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"2D PCA Clusters Plot","head":false,"results":[{"name":"file_content"},{"name":"file_content"},{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9c95c27b-c8bd-5e8b-8829-d354611decef","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"file_content"}],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_pca_2d_clusters_matplotlib.py","templateName":"post_processing_pca_2d_clusters_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:pca_2d_clusters:matplotlib","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_pca_2d_clusters_matplotlib.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"python/ml/regression_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:model:multilayer_perceptron:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Parity Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"file_content"}],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:parity_plot:matplotlib","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"python/ml/train_head.json":{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"flowchartId":"head-set-predict-status","head":true,"next":"head-fetch-training-data","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Dataset","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"type":"object_storage","basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"head-branch-on-predict-status","schemaVersion":"2022.8.16","isDefault":false},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","then":"head-fetch-trained-model","head":false,"next":"head-fetch-trained-model","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["set-io-unit-filenames"],"enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"type":"object_storage","basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"end-of-ml-train-head","schemaVersion":"2022.8.16","isDefault":false},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"end-of-ml-train-head","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"python/python_script.json":{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","name":"Python Script","application":{"name":"python"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"python","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"shell/batch_espresso_pwscf.json":{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","name":"Shell Batch Job (Espresso PWSCF)","application":{"name":"shell"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"monitors":[{"name":"standard_output"}],"name":"job_espresso_pw_scf","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"shell/hello_world.json":{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","name":"Shell Hello World","application":{"name":"shell"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/band_gap.json":{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","name":"Band Gap","application":{"name":"vasp"},"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"f0d65517-9592-5bc8-948e-a0851a766cbb","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_nscf","head":false,"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/band_structure_dos.json":{"_id":"d38fea11-9781-5151-8dae-d705381498be","name":"Band Structure + Density of States","application":{"name":"vasp"},"properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/band_structure.json":{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","name":"Band Structure","application":{"name":"vasp"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/dos.json":{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","name":"Density of States","application":{"name":"vasp"},"properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/fixed_cell_relaxation.json":{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","name":"Fixed-cell Relaxation","application":{"name":"vasp"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_relax","head":true,"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/initial_final_total_energies.json":{"isMultiMaterial":true,"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","name":"Initial/Final Total Energies","application":{"name":"vasp"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_neb_initial","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"e65a17ce-10c8-5710-ad4d-fb3d42434091","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_neb_final","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"compute":{"ppn":1,"nodes":1,"queue":"D","timeLimit":"01:00:00","notify":"n","cluster":{"fqdn":""},"timeLimitType":"per single attempt","isRestartable":true,"arguments":{"nimage":1,"npools":1,"nband":1,"ntg":1,"ndiag":1}},"schemaVersion":"2022.8.16","isDraft":false},"vasp/kpoint_convergence.json":{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","name":"K-point Convergence","application":{"name":"vasp"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-tolerance","head":true,"next":"init-increment","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-increment","head":false,"next":"init-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-result","head":false,"next":"init-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-parameter","head":false,"next":"vasp-kpoint-convergence","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"vasp-kpoint-convergence","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"store-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"store-result","head":false,"next":"check-convergence","schemaVersion":"2022.8.16","isDefault":false},{"name":"check convergence","type":"condition","input":[],"statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"check-convergence","then":"convergence-is-reached","else":"update-result","head":false,"next":"update-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"update-result","head":false,"next":"increment-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"increment-parameter","next":"vasp-kpoint-convergence","head":false,"schemaVersion":"2022.8.16","isDefault":false},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"convergence-is-reached","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/neb_subworkflow.json":{"isMultiMaterial":true,"_id":"e6215fb9-e60c-541b-b73e-b077d64b3a95","name":"Nudged Elastic Band (NEB)","application":{"name":"vasp"},"properties":["reaction_energy_barrier","reaction_energy_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_neb","head":true,"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9a1660ab-8067-5fad-9fb8-7c039f634636","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB"},{"name":"KPOINTS","templateName":"KPOINTS"}],"monitors":[{"name":"standard_output"}],"name":"vasp_neb","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nIBRION = 1\nEDIFFG = -0.001\nENCUT = 500\nNELM = 100\nNSW = 100\nIMAGES = {{ input.INTERMEDIATE_IMAGES.length or neb.nImages }}\nSPRING = -5\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},"vasp/prepare_images.json":{"isMultiMaterial":true,"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","name":"Prepare Directories","application":{"name":"vasp"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"prepare-neb-images","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"monitors":[{"name":"standard_output"}],"name":"bash_vasp_prepare_neb_images","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR <=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP_INTERFACE","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"isMultiMaterial":true,"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","name":"BS + Avg ESP (interface left)","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"name":"Set Material Index (Interface left)","type":"assignment","operand":"MATERIAL_INDEX","value":"1","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"0bd31760-f6e4-5826-b282-882c06c97f94","head":true,"next":"3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"pw-bands-calculate-band-gap-left","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap-left","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a667d9fd-35d5-5897-be0e-fa0247233649","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-left"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM_LEFT","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"next":"dfc4f1c5-5856-588a-99df-6d5fb46bb429","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"dfc4f1c5-5856-588a-99df-6d5fb46bb429","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"b1bb2b3e-3197-5bcd-85b0-959cc357c8d3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"b1bb2b3e-3197-5bcd-85b0-959cc357c8d3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"average-electrostatic-potential-left","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential-left","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"average_potential_profile"}],"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"name":"average_potential","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-left"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","name":"Find ESP Value (Interface left)","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Find Extrema","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"python-find-extrema-left","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"generic:processing:find_extrema:scipy","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP_LEFT","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema-left"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"isMultiMaterial":true,"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","name":"BS + Avg ESP (interface right)","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"name":"Set Material Index (Interface right)","type":"assignment","operand":"MATERIAL_INDEX","value":"2","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"a05809d1-cc0d-5a0b-bf5e-d43b90a6ac4b","head":true,"next":"b89d6348-3915-5c24-9fbb-350bc98ac708","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"b89d6348-3915-5c24-9fbb-350bc98ac708","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"pw-bands-calculate-band-gap-right","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap-right","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a667d9fd-35d5-5897-be0e-fa0247233649","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-right"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM_RIGHT","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"next":"bc3f514c-4bed-521b-85a3-4e0edfdc3585","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"bc3f514c-4bed-521b-85a3-4e0edfdc3585","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"28bb682d-d287-5beb-8a67-826449c474ee","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"28bb682d-d287-5beb-8a67-826449c474ee","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"average-electrostatic-potential-right","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential-right","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"average_potential_profile"}],"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"name":"average_potential","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-right"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"736295e8-2ee0-5974-83bc-362061ac0688","name":"Find ESP Value (Interface right)","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Find Extrema","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"python-find-extrema-right","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"generic:processing:find_extrema:scipy","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP_RIGHT","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema-right"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","name":"Calculate VBO","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["valence_band_offset"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Difference of valence band maxima","type":"assignment","operand":"VBM_DIFF","value":"VBM_LEFT - VBM_RIGHT","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","head":true,"next":"2626f7bb-d392-5fd4-ab71-329b508de347","schemaVersion":"2022.8.16","isDefault":false},{"name":"Difference of macroscopically averaged ESP in bulk","type":"assignment","operand":"AVG_ESP_DIFF","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","head":false,"next":"b7307787-53e2-599b-ad12-d627b04074b4","schemaVersion":"2022.8.16","isDefault":false},{"name":"Lineup of macroscopically averaged ESP in interface","type":"assignment","operand":"ESP_LINEUP","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","head":false,"next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","schemaVersion":"2022.8.16","isDefault":false},{"name":"Valence Band Offset","type":"assignment","operand":"VALENCE_BAND_OFFSET","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))","input":[],"results":[{"name":"valence_band_offset"}],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"BS + Avg ESP (Interface)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"9c65d03e-6a30-58f3-947a-f174342be0c3","flowchartId":"fd622b5c-5c02-594e-b582-b245c17ca9a4","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Find ESP Values (Interface)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7","flowchartId":"ad3b1e4c-5965-5605-a067-dd0c59907c4b","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"BS + Avg ESP (interface left)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","flowchartId":"8d5b4734-edfd-55cc-ad80-aaa72487398d","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Find ESP Value (Interface left)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","flowchartId":"102ec582-5b75-52f5-8b39-19ca725ed47a","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"BS + Avg ESP (interface right)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","flowchartId":"603c45db-93aa-54ce-a7fe-6e9b65b0037d","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Find ESP Value (Interface right)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"736295e8-2ee0-5974-83bc-362061ac0688","flowchartId":"e3444d35-cc41-59f5-8481-78d0c383b84e","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Calculate VBO","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","flowchartId":"0e0b141a-39ca-52bc-9094-e5f96dc72f39","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","valence_band_offset"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/variable_cell_relaxation.json":{"_id":"c45dcef1-d16b-59d1-9318-cedd0b1acf08","name":"Variable-cell Relaxation","subworkflows":[{"systemName":"espresso-variable-cell-relaxation","_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","name":"Variable-cell Relaxation","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_vc-relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Variable-cell Relaxation","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","flowchartId":"8f6e9590-6a87-584b-abd7-1fb98253054c","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"tags":["variable-cell_relaxation"],"application":{"name":"espresso"}},"espresso/wavefunction_amplitude.json":{"_id":"196d364a-5a30-549b-a898-8b9704b50ff1","name":"Wavefunction Amplitude","subworkflows":[{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","name":"Wavefunction Amplitude","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"band_structure"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"pw-scf","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"extract-band-energies","schemaVersion":"2022.8.16","isDefault":false},{"name":"Extract Band Energies","type":"assignment","operand":"band_energies","value":"[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]","input":[{"name":"band_structure","scope":"pw-scf"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"extract-band-energies","head":false,"next":"indices-below-fermi","schemaVersion":"2022.8.16","isDefault":false},{"name":"Find Indices Below Fermi","type":"assignment","operand":"indices_below_fermi","value":"[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]","input":[{"name":"fermi_energy","scope":"pw-scf"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"indices-below-fermi","head":false,"next":"8771dc7f-878e-5f13-a840-a3a416854f1e","schemaVersion":"2022.8.16","isDefault":false},{"name":"Store Band Below EF","type":"assignment","operand":"KBAND_VALUE_BELOW_EF","value":"indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8771dc7f-878e-5f13-a840-a3a416854f1e","head":false,"next":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select Band","type":"assignment","operand":"KBAND_VALUE","value":"KBAND_VALUE_BELOW_EF","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","head":false,"next":"pp-wfn","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pp_wfn","head":false,"results":[{"name":"wavefunction_amplitude"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pp-wfn","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"wavefunction_amplitude"}],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"monitors":[{"name":"standard_output"}],"name":"pp_wfn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_wfn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","name":"Plot Wavefunction","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"plot WFN","head":true,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"57fca898-8e8b-5ef2-81a5-9d2b612bc18d","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"file_content"}],"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"monitors":[{"name":"standard_output"}],"name":"plot_wavefunction","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Wavefunction Amplitude","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","flowchartId":"36467db9-279f-52a3-a6ef-ffdc26d875ed","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Plot Wavefunction","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"e4ec581f-1cb3-5036-b698-999a96711559","flowchartId":"4ce49281-e731-550e-af66-6d2408db8237","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude","file_content"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"tags":["wfn","wfn_plot"],"application":{"name":"espresso"}},"espresso/zero_point_energy.json":{"_id":"3158c78d-58bb-5675-8c7f-6f2337061015","name":"Zero Point Energy","subworkflows":[{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","name":"Zero Point Energy","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"107595d1-490f-53a2-8432-7f8a12f14d96","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_zpe","head":false,"results":[{"name":"zero_point_energy"}],"monitors":[{"name":"standard_output"}],"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"zero_point_energy"}],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"monitors":[{"name":"standard_output"}],"name":"ph_gamma","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Zero Point Energy","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"151538cc-9e71-5269-8b9e-cb5977151227","flowchartId":"d906bd20-eb92-5a01-a0e2-c81a2d9b2a41","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"nwchem/total_energy.json":{"_id":"937fbac8-2dec-5fb1-a46f-b8a0cc3d3d05","name":"Total Energy","subworkflows":[{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","name":"Total Energy","application":{"name":"nwchem","shortName":"nwchem","summary":"NWChem","build":"GNU","isDefault":true,"version":"7.0.2","schemaVersion":"2022.8.16"},"properties":["total_energy","total_energy_contributions"],"model":{"type":"dft","subtype":"gga","method":{"type":"localorbital","subtype":"pople","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"nwchem_total_energy","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"nwchem","shortName":"nwchem","summary":"NWChem","build":"GNU","isDefault":true,"version":"7.0.2","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"}],"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Total Energy","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","flowchartId":"6059d61a-6a92-5657-9130-02208639aff8","schemaVersion":"2022.8.16","isDefault":false}],"properties":["total_energy","total_energy_contributions"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"nwchem"}},"python/ml/classification_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","name":"Python ML Train Classification","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"flowchartId":"head-set-predict-status","head":true,"next":"head-fetch-training-data","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Dataset","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"type":"object_storage","basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"head-branch-on-predict-status","schemaVersion":"2022.8.16","isDefault":false},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","then":"head-fetch-trained-model","head":false,"next":"head-fetch-trained-model","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["set-io-unit-filenames"],"enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"type":"object_storage","basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"end-of-ml-train-head","schemaVersion":"2022.8.16","isDefault":false},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"end-of-ml-train-head","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:model:random_forest_classification:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ROC Curve Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"file_content"}],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:roc_curve:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Set Up the Job","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Machine Learning","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","schemaVersion":"2022.8.16","isDefault":false}],"properties":["file_content","workflow:pyml_predict"],"workflows":[],"isUsingDataset":true,"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"python/ml/clustering_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","name":"Python ML Train Clustering","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"flowchartId":"head-set-predict-status","head":true,"next":"head-fetch-training-data","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Dataset","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"type":"object_storage","basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"head-branch-on-predict-status","schemaVersion":"2022.8.16","isDefault":false},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","then":"head-fetch-trained-model","head":false,"next":"head-fetch-trained-model","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["set-io-unit-filenames"],"enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"type":"object_storage","basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"end-of-ml-train-head","schemaVersion":"2022.8.16","isDefault":false},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"end-of-ml-train-head","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:model:random_forest_classification:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ROC Curve Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"file_content"}],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:roc_curve:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Set Up the Job","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Machine Learning","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","schemaVersion":"2022.8.16","isDefault":false}],"properties":["file_content","workflow:pyml_predict"],"workflows":[],"isUsingDataset":true,"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"python/ml/regression_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","name":"Python ML Train Regression","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"flowchartId":"head-set-predict-status","head":true,"next":"head-fetch-training-data","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Dataset","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"type":"object_storage","basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"head-branch-on-predict-status","schemaVersion":"2022.8.16","isDefault":false},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","then":"head-fetch-trained-model","head":false,"next":"head-fetch-trained-model","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["set-io-unit-filenames"],"enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"type":"object_storage","basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"end-of-ml-train-head","schemaVersion":"2022.8.16","isDefault":false},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"end-of-ml-train-head","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:model:multilayer_perceptron:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Parity Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"file_content"}],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:parity_plot:matplotlib","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Set Up the Job","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Machine Learning","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","schemaVersion":"2022.8.16","isDefault":false}],"properties":["file_content","workflow:pyml_predict"],"workflows":[],"isUsingDataset":true,"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"python/python_script.json":{"_id":"de816646-766b-5f97-b468-0937d4381440","name":"Python Script","subworkflows":[{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","name":"Python Script","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"python","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Python Script","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","flowchartId":"c50e28b2-a0c5-5324-8b6f-e99b5a546bd8","schemaVersion":"2022.8.16","isDefault":false}],"properties":[],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"shell/batch_espresso_pwscf.json":{"_id":"e0046fb4-37db-5732-bf81-c48e13081a4c","name":"Shell Batch Job (Espresso PWSCF)","subworkflows":[{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","name":"Shell Batch Job (Espresso PWSCF)","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"monitors":[{"name":"standard_output"}],"name":"job_espresso_pw_scf","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Shell Batch Job (Espresso PWSCF)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","flowchartId":"d884e8f7-7acf-5a03-bc9a-186903bdaa0e","schemaVersion":"2022.8.16","isDefault":false}],"properties":[],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"shell"}},"shell/hello_world.json":{"_id":"d2fd444c-06b4-5d66-baeb-449c680ae1bf","name":"Shell Script","subworkflows":[{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","name":"Shell Hello World","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Shell Hello World","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","flowchartId":"319307c2-bf22-5bf2-b4e9-a4cdf671b786","schemaVersion":"2022.8.16","isDefault":false}],"properties":[],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"shell"}},"vasp/band_gap.json":{"_id":"1a358471-0a73-5fcb-ad3c-7a8079029c86","name":"Band Gap","subworkflows":[{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","name":"Band Gap","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"f0d65517-9592-5bc8-948e-a0851a766cbb","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_nscf","head":false,"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Band Gap","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","flowchartId":"db3b83ea-0ef5-594c-89a8-bde38dbc6105","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/band_structure_dos.json":{"_id":"c8338d40-3c6e-5581-b03c-d7fb5cbb8df5","name":"Band Structure + Density of States","subworkflows":[{"_id":"d38fea11-9781-5151-8dae-d705381498be","name":"Band Structure + Density of States","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Band Structure + Density of States","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"d38fea11-9781-5151-8dae-d705381498be","flowchartId":"8a098bb9-73b1-5e84-bfc7-b783e02d0f53","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/band_structure.json":{"_id":"25b0ad08-87bb-5400-bea4-acd5fe2163c0","name":"Band Structure","subworkflows":[{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","name":"Band Structure","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Band Structure","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","flowchartId":"c573187f-a8bb-5084-9fcf-1560bf4a7786","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/dos.json":{"_id":"629a79fb-a03f-5e34-b2ce-9c735e8ef6c0","name":"Density of States","subworkflows":[{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","name":"Density of States","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Density of States","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","flowchartId":"3e64fdb4-ab5b-52a0-a1d5-51343c49481c","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/fixed_cell_relaxation.json":{"_id":"cb69418c-2f6c-551d-af81-0cf20ec1113d","name":"Fixed-cell Relaxation","subworkflows":[{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","name":"Fixed-cell Relaxation","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_relax","head":true,"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Fixed-cell Relaxation","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","flowchartId":"0de8c4c8-b722-5cd2-ae68-b484262e0a01","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/kpoint_convergence.json":{"_id":"fcf105f9-5ae7-5c32-a6b3-e3579cbdf39a","name":"K-point Convergence","subworkflows":[{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","name":"K-point Convergence","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-tolerance","head":true,"next":"init-increment","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-increment","head":false,"next":"init-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-result","head":false,"next":"init-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-parameter","head":false,"next":"vasp-kpoint-convergence","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"vasp-kpoint-convergence","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"store-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"store-result","head":false,"next":"check-convergence","schemaVersion":"2022.8.16","isDefault":false},{"name":"check convergence","type":"condition","input":[],"statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"check-convergence","then":"convergence-is-reached","else":"update-result","head":false,"next":"update-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"update-result","head":false,"next":"increment-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"increment-parameter","next":"vasp-kpoint-convergence","head":false,"schemaVersion":"2022.8.16","isDefault":false},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"convergence-is-reached","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"K-point Convergence","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","flowchartId":"a34eec2c-cdb2-537d-88c0-ed1d7b205879","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/neb.json":{"_id":"2973908e-21ae-5424-afc9-ccb3fde477d8","name":"Nudged Elastic Band (NEB)","subworkflows":[{"isMultiMaterial":true,"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","name":"Initial/Final Total Energies","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_neb_initial","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"e65a17ce-10c8-5710-ad4d-fb3d42434091","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_neb_final","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"compute":{"ppn":1,"nodes":1,"queue":"D","timeLimit":"01:00:00","notify":"n","cluster":{"fqdn":""},"timeLimitType":"per single attempt","isRestartable":true,"arguments":{"nimage":1,"npools":1,"nband":1,"ntg":1,"ndiag":1}},"schemaVersion":"2022.8.16","isDraft":false},{"isMultiMaterial":true,"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","name":"Prepare Directories","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"prepare-neb-images","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"monitors":[{"name":"standard_output"}],"name":"bash_vasp_prepare_neb_images","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_xml_get_qpt_irr.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"assignment","schemaVersion":"2022.8.16","isDefault":false},{"name":"assignment","type":"assignment","input":[{"scope":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","name":"STDOUT"}],"operand":"Q_POINTS","value":"json.loads(STDOUT)","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"assignment","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","name":"reduce","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["phonon_dispersions","phonon_dos"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"ph_grid_restart","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb206177-a4af-599a-81ba-6c88d24253b6","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid_restart.in"}],"monitors":[{"name":"standard_output"}],"name":"ph_grid_restart","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid_restart.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dos"}],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dispersions"}],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_path","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"pw-scf","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"f52b8039-83d0-5485-a1f1-0bc37cb01ed3","flowchartId":"d270b789-fb67-573c-a566-9f09fdacea23","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"ph-init-qpoints","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"2f017bcb-f4ba-55b8-b939-1f780679a88e","flowchartId":"4bb74dfb-46a6-5bf4-a477-5d374dc2e271","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"espresso-xml-get-qpt-irr","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a","flowchartId":"9894b91f-6e97-5ee6-af02-0bef26bd62c0","schemaVersion":"2022.8.16","isDefault":false},{"name":"map","type":"map","input":{"target":"MAP_DATA","scope":"global","name":"Q_POINTS","values":[],"useValues":false},"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"workflowId":"5cc1c6bd-9047-4b64-8e10-e5ae288bbacf","flowchartId":"24e3c1f0-8090-512e-9727-8770071d17c8","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"reduce","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","flowchartId":"55a9e9fb-3545-5c4b-a1bb-b64a899b78c6","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","phonon_dispersions","phonon_dos"],"workflows":[{"_id":"731d3397-3278-516a-b28e-53626ef50f0a","name":"phonon_map_workflow","subworkflows":[{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","name":"pre-processor","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_link_outdir_save.sh"}],"monitors":[{"name":"standard_output"}],"name":"espresso_link_outdir_save","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_link_outdir_save.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","name":"ph-single-irr-qpt","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"ph_single_irr_qpt","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"8db9af08-d935-57a0-a824-e7db6d936de8","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_single_irr_qpt.in"}],"monitors":[{"name":"standard_output"}],"name":"ph_single_irr_qpt","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_single_irr_qpt.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","name":"post-processor","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cd5c3e29-511b-5ef8-949d-ad884f210301","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_collect_dynmat.sh"}],"monitors":[{"name":"standard_output"}],"name":"espresso_collect_dynmat","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_collect_dynmat.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"pre-processor","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","flowchartId":"e9a790f4-dec6-52c1-b951-014f0ff01cb4"},{"type":"subworkflow","name":"ph-single-irr-qpt","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"e68db280-8636-53e3-81a0-88396ba6147d","flowchartId":"c2195045-7a5c-54d3-ab88-211c82de09f1"},{"type":"subworkflow","name":"post-processor","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"7239fc3a-b343-513f-af35-e8687e1829da","flowchartId":"e483c7fb-2a29-5e91-819a-7465ead70134"}],"properties":[],"workflows":[]}],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/recalculate_bands.json":{"_id":"42b2b964-8ccc-5b36-9e33-41a954abc2ba","name":"Recalculate Bands","subworkflows":[{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","name":"Recalculate Bands","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_bands","head":true,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Recalculate Bands","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","flowchartId":"e8b72a45-765e-565f-ab17-c91a21aec09d","schemaVersion":"2022.8.16","isDefault":false}],"properties":["band_structure"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/surface_energy.json":{"_id":"68512987-de73-5614-bab2-0f8b575cffa3","name":"Surface Energy","subworkflows":[{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","name":"Surface Energy","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"io","name":"io-slab","head":true,"results":[],"monitors":[],"flowchartId":"e463ef46-a36e-5168-87dd-e21eb980dfb8","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"subtype":"input","source":"api","input":[{"type":"api","endpoint":"materials","endpoint_options":{"params":{"query":"{'_id': MATERIAL_ID}","projection":"{}"}},"name":"DATA"}],"next":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","schemaVersion":"2022.8.16","isDefault":false},{"type":"assignment","name":"slab","head":false,"results":[],"monitors":[],"flowchartId":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"input":[{"name":"DATA","scope":"e463ef46-a36e-5168-87dd-e21eb980dfb8"}],"operand":"SLAB","value":"DATA[0]","next":"44263820-0c80-5bd1-b854-9da8d198eac1","schemaVersion":"2022.8.16","isDefault":false},{"type":"io","name":"io-bulk","head":false,"results":[],"monitors":[],"flowchartId":"44263820-0c80-5bd1-b854-9da8d198eac1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"subtype":"input","source":"api","input":[{"type":"api","endpoint":"materials","endpoint_options":{"params":{"query":"{'_id': SLAB.metadata.bulkId}","projection":"{}"}},"name":"DATA"}],"next":"b70656f1-a394-57f4-b4de-00096969df4b","schemaVersion":"2022.8.16","isDefault":false},{"type":"assignment","name":"bulk","head":false,"results":[],"monitors":[],"flowchartId":"b70656f1-a394-57f4-b4de-00096969df4b","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"input":[{"name":"DATA","scope":"44263820-0c80-5bd1-b854-9da8d198eac1"}],"operand":"BULK","value":"DATA[0] if DATA else None","next":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","schemaVersion":"2022.8.16","isDefault":false},{"type":"assertion","name":"assert-bulk","head":false,"results":[],"monitors":[],"flowchartId":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"statement":"BULK != None","errorMessage":"Bulk material does not exist!","next":"490635e0-c593-5809-9eb2-c794b96cfed1","schemaVersion":"2022.8.16","isDefault":false},{"type":"io","name":"io-e-bulk","head":false,"results":[],"monitors":[],"flowchartId":"490635e0-c593-5809-9eb2-c794b96cfed1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"subtype":"input","source":"api","input":[{"type":"api","endpoint":"refined-properties","endpoint_options":{"params":{"query":"{ 'exabyteId': BULK.exabyteId, 'data.name': 'total_energy', 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} }","projection":"{'sort': {'precision.value': -1}, 'limit': 1}"}},"name":"DATA"}],"next":"bbe13b97-4243-5a85-8f61-a279d0b797aa","schemaVersion":"2022.8.16","isDefault":false},{"type":"assignment","name":"e-bulk","head":false,"results":[],"monitors":[],"flowchartId":"bbe13b97-4243-5a85-8f61-a279d0b797aa","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"input":[{"name":"DATA","scope":"490635e0-c593-5809-9eb2-c794b96cfed1"}],"operand":"E_BULK","value":"DATA[0].data.value if DATA else None","next":"a06c9f43-7670-5fd0-ac42-7028a472235a","schemaVersion":"2022.8.16","isDefault":false},{"type":"assertion","name":"assert-e-bulk","head":false,"results":[],"monitors":[],"flowchartId":"a06c9f43-7670-5fd0-ac42-7028a472235a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"statement":"E_BULK != None","errorMessage":"E_BULK does not exist!","next":"cdf210be-26ed-585a-b4ac-d55795ba2975","schemaVersion":"2022.8.16","isDefault":false},{"type":"assignment","name":"surface","head":false,"results":[],"monitors":[],"flowchartId":"cdf210be-26ed-585a-b4ac-d55795ba2975","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"input":[],"operand":"A","value":"np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))","next":"ffa8e43d-096a-555b-b8d0-6d283365ef47","schemaVersion":"2022.8.16","isDefault":false},{"type":"assignment","name":"n-bulk","head":false,"results":[],"monitors":[],"flowchartId":"ffa8e43d-096a-555b-b8d0-6d283365ef47","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"input":[],"operand":"N_BULK","value":"len(BULK.basis.elements)","next":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","schemaVersion":"2022.8.16","isDefault":false},{"type":"assignment","name":"n-slab","head":false,"results":[],"monitors":[],"flowchartId":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"input":[],"operand":"N_SLAB","value":"len(SLAB.basis.elements)","next":"9fc7a088-5533-5f70-bb33-f676ec65f565","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"fcd88119-817c-5ac1-a430-ba892ac743eb","schemaVersion":"2022.8.16","isDefault":false},{"type":"assignment","name":"e-slab","head":false,"results":[],"monitors":[],"flowchartId":"fcd88119-817c-5ac1-a430-ba892ac743eb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"input":[{"name":"total_energy","scope":"9fc7a088-5533-5f70-bb33-f676ec65f565"}],"operand":"E_SLAB","value":"total_energy","next":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","schemaVersion":"2022.8.16","isDefault":false},{"type":"assignment","name":"surface-energy","head":false,"results":[{"name":"surface_energy"}],"monitors":[],"flowchartId":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"input":[],"operand":"SURFACE_ENERGY","value":"1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))","schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Surface Energy","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","flowchartId":"d81dc9ce-bb50-5bc6-af1d-e5ede03bb0a6","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/total_energy.json":{"_id":"4e36ca25-fa46-5628-a227-27d22dea8553","name":"Total Energy","subworkflows":[{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","name":"Total Energy","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Total Energy","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","flowchartId":"6059d61a-6a92-5657-9130-02208639aff8","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"tags":["default"],"application":{"name":"espresso"}},"espresso/valence_band_offset.json":{"_id":"d8e08cac-7747-50aa-b925-41f214d722c6","name":"Valence Band Offset (2D)","subworkflows":[{"isMultiMaterial":true,"_id":"9c65d03e-6a30-58f3-947a-f174342be0c3","name":"BS + Avg ESP (Interface)","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"name":"Set Material Index (Interface)","type":"assignment","operand":"MATERIAL_INDEX","value":"0","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"0f21d8c4-ab32-53ba-b40d-fc9b6608e1b9","head":true,"next":"9fc7a088-5533-5f70-bb33-f676ec65f565","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"pw-bands-calculate-band-gap","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a667d9fd-35d5-5897-be0e-fa0247233649","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"average-electrostatic-potential","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"average_potential_profile"}],"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"name":"average_potential","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7","name":"Find ESP Values (Interface)","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Find Extrema","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"python-find-extrema","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"generic:processing:find_extrema:scipy","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP_INTERFACE","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"isMultiMaterial":true,"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","name":"BS + Avg ESP (interface left)","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"name":"Set Material Index (Interface left)","type":"assignment","operand":"MATERIAL_INDEX","value":"1","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"0bd31760-f6e4-5826-b282-882c06c97f94","head":true,"next":"3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"pw-bands-calculate-band-gap-left","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap-left","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a667d9fd-35d5-5897-be0e-fa0247233649","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-left"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM_LEFT","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"next":"dfc4f1c5-5856-588a-99df-6d5fb46bb429","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"dfc4f1c5-5856-588a-99df-6d5fb46bb429","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"b1bb2b3e-3197-5bcd-85b0-959cc357c8d3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"b1bb2b3e-3197-5bcd-85b0-959cc357c8d3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"average-electrostatic-potential-left","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential-left","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"average_potential_profile"}],"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"name":"average_potential","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-left"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","name":"Find ESP Value (Interface left)","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Find Extrema","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"python-find-extrema-left","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"generic:processing:find_extrema:scipy","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP_LEFT","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema-left"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"isMultiMaterial":true,"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","name":"BS + Avg ESP (interface right)","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"name":"Set Material Index (Interface right)","type":"assignment","operand":"MATERIAL_INDEX","value":"2","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"a05809d1-cc0d-5a0b-bf5e-d43b90a6ac4b","head":true,"next":"b89d6348-3915-5c24-9fbb-350bc98ac708","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"b89d6348-3915-5c24-9fbb-350bc98ac708","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"pw-bands-calculate-band-gap-right","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap-right","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a667d9fd-35d5-5897-be0e-fa0247233649","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-right"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM_RIGHT","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"next":"bc3f514c-4bed-521b-85a3-4e0edfdc3585","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"bc3f514c-4bed-521b-85a3-4e0edfdc3585","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"28bb682d-d287-5beb-8a67-826449c474ee","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"28bb682d-d287-5beb-8a67-826449c474ee","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"average-electrostatic-potential-right","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential-right","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"average_potential_profile"}],"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"name":"average_potential","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-right"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"736295e8-2ee0-5974-83bc-362061ac0688","name":"Find ESP Value (Interface right)","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Find Extrema","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"python-find-extrema-right","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"generic:processing:find_extrema:scipy","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP_RIGHT","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema-right"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","name":"Calculate VBO","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["valence_band_offset"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Difference of valence band maxima","type":"assignment","operand":"VBM_DIFF","value":"VBM_LEFT - VBM_RIGHT","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","head":true,"next":"2626f7bb-d392-5fd4-ab71-329b508de347","schemaVersion":"2022.8.16","isDefault":false},{"name":"Difference of macroscopically averaged ESP in bulk","type":"assignment","operand":"AVG_ESP_DIFF","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","head":false,"next":"b7307787-53e2-599b-ad12-d627b04074b4","schemaVersion":"2022.8.16","isDefault":false},{"name":"Lineup of macroscopically averaged ESP in interface","type":"assignment","operand":"ESP_LINEUP","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","head":false,"next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","schemaVersion":"2022.8.16","isDefault":false},{"name":"Valence Band Offset","type":"assignment","operand":"VALENCE_BAND_OFFSET","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))","input":[],"results":[{"name":"valence_band_offset"}],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"BS + Avg ESP (Interface)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"9c65d03e-6a30-58f3-947a-f174342be0c3","flowchartId":"fd622b5c-5c02-594e-b582-b245c17ca9a4","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Find ESP Values (Interface)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7","flowchartId":"ad3b1e4c-5965-5605-a067-dd0c59907c4b","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"BS + Avg ESP (interface left)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","flowchartId":"8d5b4734-edfd-55cc-ad80-aaa72487398d","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Find ESP Value (Interface left)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","flowchartId":"102ec582-5b75-52f5-8b39-19ca725ed47a","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"BS + Avg ESP (interface right)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","flowchartId":"603c45db-93aa-54ce-a7fe-6e9b65b0037d","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Find ESP Value (Interface right)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"736295e8-2ee0-5974-83bc-362061ac0688","flowchartId":"e3444d35-cc41-59f5-8481-78d0c383b84e","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Calculate VBO","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","flowchartId":"0e0b141a-39ca-52bc-9094-e5f96dc72f39","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","valence_band_offset"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"espresso/variable_cell_relaxation.json":{"_id":"c45dcef1-d16b-59d1-9318-cedd0b1acf08","name":"Variable-cell Relaxation","subworkflows":[{"systemName":"espresso-variable-cell-relaxation","_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","name":"Variable-cell Relaxation","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_vc-relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Variable-cell Relaxation","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","flowchartId":"8f6e9590-6a87-584b-abd7-1fb98253054c","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"tags":["variable-cell_relaxation"],"application":{"name":"espresso"}},"espresso/wavefunction_amplitude.json":{"_id":"196d364a-5a30-549b-a898-8b9704b50ff1","name":"Wavefunction Amplitude","subworkflows":[{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","name":"Wavefunction Amplitude","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"band_structure"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"pw-scf","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"extract-band-energies","schemaVersion":"2022.8.16","isDefault":false},{"name":"Extract Band Energies","type":"assignment","operand":"band_energies","value":"[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]","input":[{"name":"band_structure","scope":"pw-scf"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"extract-band-energies","head":false,"next":"indices-below-fermi","schemaVersion":"2022.8.16","isDefault":false},{"name":"Find Indices Below Fermi","type":"assignment","operand":"indices_below_fermi","value":"[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]","input":[{"name":"fermi_energy","scope":"pw-scf"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"indices-below-fermi","head":false,"next":"8771dc7f-878e-5f13-a840-a3a416854f1e","schemaVersion":"2022.8.16","isDefault":false},{"name":"Store Band Below EF","type":"assignment","operand":"KBAND_VALUE_BELOW_EF","value":"indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8771dc7f-878e-5f13-a840-a3a416854f1e","head":false,"next":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select Band","type":"assignment","operand":"KBAND_VALUE","value":"KBAND_VALUE_BELOW_EF","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","head":false,"next":"pp-wfn","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pp_wfn","head":false,"results":[{"name":"wavefunction_amplitude"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pp-wfn","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"wavefunction_amplitude"}],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"monitors":[{"name":"standard_output"}],"name":"pp_wfn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_wfn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","name":"Plot Wavefunction","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"plot WFN","head":true,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"57fca898-8e8b-5ef2-81a5-9d2b612bc18d","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"file_content"}],"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"monitors":[{"name":"standard_output"}],"name":"plot_wavefunction","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Wavefunction Amplitude","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","flowchartId":"36467db9-279f-52a3-a6ef-ffdc26d875ed","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Plot Wavefunction","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"e4ec581f-1cb3-5036-b698-999a96711559","flowchartId":"4ce49281-e731-550e-af66-6d2408db8237","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude","file_content"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"tags":["wfn","wfn_plot"],"application":{"name":"espresso"}},"espresso/zero_point_energy.json":{"_id":"3158c78d-58bb-5675-8c7f-6f2337061015","name":"Zero Point Energy","subworkflows":[{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","name":"Zero Point Energy","application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"107595d1-490f-53a2-8432-7f8a12f14d96","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_zpe","head":false,"results":[{"name":"zero_point_energy"}],"monitors":[{"name":"standard_output"}],"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"zero_point_energy"}],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"monitors":[{"name":"standard_output"}],"name":"ph_gamma","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Zero Point Energy","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"151538cc-9e71-5269-8b9e-cb5977151227","flowchartId":"d906bd20-eb92-5a01-a0e2-c81a2d9b2a41","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"espresso"}},"nwchem/total_energy.json":{"_id":"937fbac8-2dec-5fb1-a46f-b8a0cc3d3d05","name":"Total Energy","subworkflows":[{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","name":"Total Energy","application":{"name":"nwchem","shortName":"nwchem","summary":"NWChem","build":"GNU","isDefault":true,"version":"7.0.2","schemaVersion":"2022.8.16"},"properties":["total_energy","total_energy_contributions"],"model":{"type":"dft","subtype":"gga","method":{"type":"localorbital","subtype":"pople","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"nwchem_total_energy","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"nwchem","shortName":"nwchem","summary":"NWChem","build":"GNU","isDefault":true,"version":"7.0.2","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"}],"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Total Energy","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","flowchartId":"6059d61a-6a92-5657-9130-02208639aff8","schemaVersion":"2022.8.16","isDefault":false}],"properties":["total_energy","total_energy_contributions"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"nwchem"}},"python/ml/classification_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","name":"Python ML Train Classification","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"flowchartId":"head-set-predict-status","head":true,"next":"head-fetch-training-data","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Dataset","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"type":"object_storage","basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"head-branch-on-predict-status","schemaVersion":"2022.8.16","isDefault":false},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","then":"head-fetch-trained-model","head":false,"next":"head-fetch-trained-model","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["set-io-unit-filenames"],"enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"type":"object_storage","basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"end-of-ml-train-head","schemaVersion":"2022.8.16","isDefault":false},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"end-of-ml-train-head","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:model:random_forest_classification:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ROC Curve Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"file_content"}],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:roc_curve:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Set Up the Job","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Machine Learning","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","schemaVersion":"2022.8.16","isDefault":false}],"properties":["file_content","workflow:pyml_predict"],"workflows":[],"isUsingDataset":true,"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"python/ml/clustering_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","name":"Python ML Train Clustering","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"flowchartId":"head-set-predict-status","head":true,"next":"head-fetch-training-data","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Dataset","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"type":"object_storage","basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"head-branch-on-predict-status","schemaVersion":"2022.8.16","isDefault":false},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","then":"head-fetch-trained-model","head":false,"next":"head-fetch-trained-model","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["set-io-unit-filenames"],"enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"type":"object_storage","basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"end-of-ml-train-head","schemaVersion":"2022.8.16","isDefault":false},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"end-of-ml-train-head","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:model:random_forest_classification:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ROC Curve Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"file_content"}],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:roc_curve:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Set Up the Job","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Machine Learning","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","schemaVersion":"2022.8.16","isDefault":false}],"properties":["file_content","workflow:pyml_predict"],"workflows":[],"isUsingDataset":true,"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"python/ml/regression_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","name":"Python ML Train Regression","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","name":"Set Up the Job","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"name":"Set Workflow Mode","type":"assignment","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","value":"False","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"flowchartId":"head-set-predict-status","head":true,"next":"head-fetch-training-data","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Dataset","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"type":"object_storage","basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"head-branch-on-predict-status","schemaVersion":"2022.8.16","isDefault":false},{"name":"Train or Predict?","type":"condition","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","maxOccurrences":100,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","then":"head-fetch-trained-model","head":false,"next":"head-fetch-trained-model","schemaVersion":"2022.8.16","isDefault":false},{"name":"Fetch Trained Model as file","type":"io","subtype":"input","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["set-io-unit-filenames"],"enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"type":"object_storage","basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"source":"object_storage","head":false,"next":"end-of-ml-train-head","schemaVersion":"2022.8.16","isDefault":false},{"name":"End Setup","type":"assignment","operand":"IS_SETUP_COMPLETE","value":"True","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"end-of-ml-train-head","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:model:multilayer_perceptron:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Parity Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"file_content"}],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:parity_plot:matplotlib","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Set Up the Job","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","schemaVersion":"2022.8.16","isDefault":false},{"type":"subworkflow","name":"Machine Learning","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","schemaVersion":"2022.8.16","isDefault":false}],"properties":["file_content","workflow:pyml_predict"],"workflows":[],"isUsingDataset":true,"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"python/python_script.json":{"_id":"de816646-766b-5f97-b468-0937d4381440","name":"Python Script","subworkflows":[{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","name":"Python Script","application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"python","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Python Script","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","flowchartId":"c50e28b2-a0c5-5324-8b6f-e99b5a546bd8","schemaVersion":"2022.8.16","isDefault":false}],"properties":[],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"python"}},"shell/batch_espresso_pwscf.json":{"_id":"e0046fb4-37db-5732-bf81-c48e13081a4c","name":"Shell Batch Job (Espresso PWSCF)","subworkflows":[{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","name":"Shell Batch Job (Espresso PWSCF)","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"monitors":[{"name":"standard_output"}],"name":"job_espresso_pw_scf","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Shell Batch Job (Espresso PWSCF)","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","flowchartId":"d884e8f7-7acf-5a03-bc9a-186903bdaa0e","schemaVersion":"2022.8.16","isDefault":false}],"properties":[],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"shell"}},"shell/hello_world.json":{"_id":"d2fd444c-06b4-5d66-baeb-449c680ae1bf","name":"Shell Script","subworkflows":[{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","name":"Shell Hello World","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Shell Hello World","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","flowchartId":"319307c2-bf22-5bf2-b4e9-a4cdf671b786","schemaVersion":"2022.8.16","isDefault":false}],"properties":[],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"shell"}},"vasp/band_gap.json":{"_id":"1a358471-0a73-5fcb-ad3c-7a8079029c86","name":"Band Gap","subworkflows":[{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","name":"Band Gap","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"f0d65517-9592-5bc8-948e-a0851a766cbb","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_nscf","head":false,"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Band Gap","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","flowchartId":"db3b83ea-0ef5-594c-89a8-bde38dbc6105","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/band_structure_dos.json":{"_id":"c8338d40-3c6e-5581-b03c-d7fb5cbb8df5","name":"Band Structure + Density of States","subworkflows":[{"_id":"d38fea11-9781-5151-8dae-d705381498be","name":"Band Structure + Density of States","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Band Structure + Density of States","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"d38fea11-9781-5151-8dae-d705381498be","flowchartId":"8a098bb9-73b1-5e84-bfc7-b783e02d0f53","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/band_structure.json":{"_id":"25b0ad08-87bb-5400-bea4-acd5fe2163c0","name":"Band Structure","subworkflows":[{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","name":"Band Structure","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Band Structure","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","flowchartId":"c573187f-a8bb-5084-9fcf-1560bf4a7786","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/dos.json":{"_id":"629a79fb-a03f-5e34-b2ce-9c735e8ef6c0","name":"Density of States","subworkflows":[{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","name":"Density of States","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Density of States","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","flowchartId":"3e64fdb4-ab5b-52a0-a1d5-51343c49481c","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/fixed_cell_relaxation.json":{"_id":"cb69418c-2f6c-551d-af81-0cf20ec1113d","name":"Fixed-cell Relaxation","subworkflows":[{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","name":"Fixed-cell Relaxation","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_relax","head":true,"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"Fixed-cell Relaxation","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","flowchartId":"0de8c4c8-b722-5cd2-ae68-b484262e0a01","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/kpoint_convergence.json":{"_id":"fcf105f9-5ae7-5c32-a6b3-e3579cbdf39a","name":"K-point Convergence","subworkflows":[{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","name":"K-point Convergence","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-tolerance","head":true,"next":"init-increment","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-increment","head":false,"next":"init-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-result","head":false,"next":"init-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-parameter","head":false,"next":"vasp-kpoint-convergence","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"vasp-kpoint-convergence","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"store-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"store-result","head":false,"next":"check-convergence","schemaVersion":"2022.8.16","isDefault":false},{"name":"check convergence","type":"condition","input":[],"statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"check-convergence","then":"convergence-is-reached","else":"update-result","head":false,"next":"update-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"update-result","head":false,"next":"increment-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"increment-parameter","next":"vasp-kpoint-convergence","head":false,"schemaVersion":"2022.8.16","isDefault":false},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"convergence-is-reached","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false}],"units":[{"type":"subworkflow","name":"K-point Convergence","results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","flowchartId":"a34eec2c-cdb2-537d-88c0-ed1d7b205879","schemaVersion":"2022.8.16","isDefault":false}],"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"workflows":[],"schemaVersion":"2022.8.16","isDefault":false,"application":{"name":"vasp"}},"vasp/neb.json":{"_id":"2973908e-21ae-5424-afc9-ccb3fde477d8","name":"Nudged Elastic Band (NEB)","subworkflows":[{"isMultiMaterial":true,"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","name":"Initial/Final Total Energies","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_neb_initial","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"e65a17ce-10c8-5710-ad4d-fb3d42434091","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_neb_final","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"compute":{"ppn":1,"nodes":1,"queue":"D","timeLimit":"01:00:00","notify":"n","cluster":{"fqdn":""},"timeLimitType":"per single attempt","isRestartable":true,"arguments":{"nimage":1,"npools":1,"nband":1,"ntg":1,"ndiag":1}},"schemaVersion":"2022.8.16","isDraft":false},{"isMultiMaterial":true,"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","name":"Prepare Directories","application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"prepare-neb-images","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"monitors":[{"name":"standard_output"}],"name":"bash_vasp_prepare_neb_images","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < Date: Mon, 23 Mar 2026 14:39:14 +0200 Subject: [PATCH 07/14] chore: change getExecutableByName --- src/js/application.ts | 94 ++++++++---------------------------- tests/js/application.test.ts | 31 ++---------- 2 files changed, 24 insertions(+), 101 deletions(-) diff --git a/src/js/application.ts b/src/js/application.ts index 61a10712..a1f85a01 100644 --- a/src/js/application.ts +++ b/src/js/application.ts @@ -12,7 +12,6 @@ import APPLICATION_VERSIONS_MAP from "./runtime_data/applications/applicationVer import EXECUTABLE_FLAVOR_MAP from "./runtime_data/applications/executableFlavorMapByApplication.json"; import TEMPLATES_LIST_RAW from "./runtime_data/applications/templatesList.json"; import { - type FlavorConfig, ApplicationExecutableTree, ApplicationVersionsMapByApplicationType, } from "./types/application"; @@ -60,15 +59,6 @@ export class ApplicationStandata extends Standata { > > = {}; - private getAppDataForApplication(appName: string) { - const applicationVersionsMap = APP_VERSIONS[appName]; - - if (!applicationVersionsMap) { - throw new Error(`Application ${appName} not found`); - } - return applicationVersionsMap; - } - private getApplicationExecutablesTree(appName: string) { if (appName in this.appCache) { return this.appCache[appName]; @@ -156,10 +146,6 @@ export class ApplicationStandata extends Standata { return allEntities.filter((entity) => entity.name === appName); } - static getDefaultVersionForApplication(appName: string) { - return APP_VERSIONS[appName].defaultVersion; - } - static getDefaultBuildForApplicationAndVersion(appName: string, version: string) { const versionConfig = APP_VERSIONS[appName].versions.find((config) => { return config.version === version && config.isDefault; @@ -167,30 +153,6 @@ export class ApplicationStandata extends Standata { return versionConfig?.build ?? null; } - // TODO: move to parent class Standata, name and generic parameters - getDefaultConfigByNameAndVersion(appName: string, version?: string) { - const tags = [TAGS.DEFAULT_BUILD]; - let versionToUse = version; - if (!versionToUse) { - tags.push(TAGS.DEFAULT_VERSION); - versionToUse = ApplicationStandata.getDefaultVersionForApplication(appName); - } - const allEntriesWithTags = this.findEntitiesByTags(...tags); - const allEntriesWithTagsForNameAndVersion = allEntriesWithTags.filter((entity) => { - return entity.name === appName && entity.version === versionToUse; - }); - if (allEntriesWithTagsForNameAndVersion.length > 1) { - throw new Error( - `Multiple default version entries found for ${appName} with version ${versionToUse}`, - ); - } else if (allEntriesWithTagsForNameAndVersion.length === 0) { - throw new Error( - `No default version entry found for ${appName} with version ${versionToUse}`, - ); - } - return allEntriesWithTagsForNameAndVersion[0]; - } - getDefaultConfig() { const fullConfig = this.findEntitiesByTags(TAGS.DEFAULT)[0]; const { name, shortName, version, summary, build } = fullConfig; @@ -199,17 +161,17 @@ export class ApplicationStandata extends Standata { private applicationsTree?: ApplicationTree; - private applications?: ApplicationSchema[]; + private buildApplicationsTree() { + const applicationNames = this.getAllApplicationNames(); - public getApplicationsTree() { - if (this.applicationsTree) { - return this.applicationsTree; - } + return applicationNames.reduce((tree, appName) => { + const application = APP_VERSIONS[appName]; - const applicationNames = this.getAllApplicationNames(); + if (!application) { + throw new Error(`Application ${appName} not found`); + } - this.applicationsTree = applicationNames.reduce((tree, appName) => { - const { versions, defaultVersion, ...appData } = this.getAppDataForApplication(appName); + const { versions, defaultVersion, ...appData } = application; return { ...tree, @@ -233,24 +195,16 @@ export class ApplicationStandata extends Standata { }, }; }, {}); - - return this.applicationsTree; } - public getApplications() { - if (this.applications) { - return this.applications; + public getApplicationsTree() { + if (this.applicationsTree) { + return this.applicationsTree; } - const tree = this.getApplicationsTree(); - - this.applications = Object.values(tree).flatMap((appTreeItem) => { - return Object.values(appTreeItem.versions).flatMap((version) => { - return Object.values(version).flat(); - }); - }); + this.applicationsTree = this.buildApplicationsTree(); - return this.applications; + return this.applicationsTree; } public getApplicationTreeItem(appName: string) { @@ -290,10 +244,12 @@ export class ApplicationStandata extends Standata { Object.values(appTree).find((exec) => exec.executable.isDefault); if (!config) { - throw new Error(`Executable ${execName} not found for application ${appName}`); + throw new Error( + `Executable ${execName || "default"} not found for application ${appName}`, + ); } - return config.executable; + return config; } getExecutableAndFlavorByName( @@ -304,16 +260,7 @@ export class ApplicationStandata extends Standata { executable: ExecutableSchema; flavor: FlavorSchema; } { - const appTree = this.getApplicationExecutablesTree(appName); - const config = - (execName && appTree[execName]) || - Object.values(appTree).find((exec) => exec.executable.isDefault); - - if (!config) { - throw new Error(`Executable ${execName} not found for application ${appName}`); - } - - const { executable, flavors } = config; + const { executable, flavors } = this.getExecutableByName(appName, execName); const flavor = flavors.find((value) => { return flavorName ? value.name === flavorName : value.isDefault; @@ -321,7 +268,9 @@ export class ApplicationStandata extends Standata { if (!flavor) { throw new Error( - `Flavor ${flavorName} not found for executable ${execName} in application ${appName}`, + `Flavor ${ + flavorName || "default" + } not found for executable ${execName} in application ${appName}`, ); } @@ -337,7 +286,6 @@ export class ApplicationStandata extends Standata { return flavor.input.map((input): TemplateSchema => { const inputName = input.templateName || input.name; - const filtered = this.getTemplatesByName(appName, execName, inputName); if (filtered.length !== 1) { diff --git a/tests/js/application.test.ts b/tests/js/application.test.ts index 9e9fd80b..b8bd25a1 100644 --- a/tests/js/application.test.ts +++ b/tests/js/application.test.ts @@ -59,17 +59,6 @@ describe("Application Standata", () => { expect(gnu63).to.have.property("shortName", "qe"); }); - it("getApplications - flattens every version/build from the applications tree", () => { - const apps = standata.getApplications(); - expect(apps).to.be.an("array"); - expect(apps.length).to.be.greaterThan(0); - const espressoGnu = apps.find( - (a) => a.name === "espresso" && a.version === "6.3" && a.build === "GNU", - ); - expect(espressoGnu).to.not.equal(undefined); - expect(espressoGnu).to.have.property("shortName", "qe"); - }); - it("getApplicationTreeItem - returns defaultVersion and versions for a known app", () => { const item = standata.getApplicationTreeItem("espresso"); expect(item.defaultVersion).to.equal("6.3"); @@ -91,9 +80,9 @@ describe("Application Standata", () => { }); it("getExecutableByName - should resolve executable config for valid app", () => { - const exec = standata.getExecutableByName("espresso", "pw.x"); - expect(exec).to.be.an("object"); - expect(exec).to.have.property("name", "pw.x"); + const { executable } = standata.getExecutableByName("espresso", "pw.x"); + expect(executable).to.be.an("object"); + expect(executable).to.have.property("name", "pw.x"); }); it("getExecutableByName - should throw for app without executable tree", () => { @@ -160,20 +149,6 @@ describe("Application Standata", () => { }); }); - it("returns default version config when no version specified", () => { - const defaultVersionConfig = standata.getDefaultConfigByNameAndVersion("espresso"); - expect(defaultVersionConfig).to.be.an("object"); - expect(defaultVersionConfig).to.have.property("name", "espresso"); - expect(defaultVersionConfig).to.have.property("version", "6.3"); - }); - - it("returns default build config when version specified", () => { - const defaultBuildConfig = standata.getDefaultConfigByNameAndVersion("espresso", "6.3"); - expect(defaultBuildConfig).to.be.an("object"); - expect(defaultBuildConfig).to.have.property("name", "espresso"); - expect(defaultBuildConfig).to.have.property("version", "6.3"); - }); - it("returns default config", () => { const defaultConfig = standata.getDefaultConfig(); expect(defaultConfig).to.be.an("object"); From 5877c78c6f0489f3ffb9b50158b0b65c651faee2 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Mon, 23 Mar 2026 15:04:44 +0200 Subject: [PATCH 08/14] chore: transpile --- dist/js/application.d.ts | 11 ++- dist/js/application.js | 73 ++++--------------- dist/js/runtime_data/applications.json | 2 +- .../applicationVersionsMapByApplication.json | 2 +- .../executableFlavorMapByApplication.json | 2 +- .../modelMethodMapByApplication.json | 2 +- .../applications/templatesList.json | 2 +- dist/js/runtime_data/materials.json | 2 +- dist/js/runtime_data/methods.json | 2 +- dist/js/runtime_data/models.json | 2 +- .../runtime_data/models/modelMethodMap.json | 2 +- dist/js/runtime_data/models/modelTree.json | 2 +- .../models/modelsTreeConfigByApplication.json | 2 +- dist/js/runtime_data/properties.json | 2 +- dist/js/runtime_data/subworkflows.json | 2 +- .../average_electrostatic_potential.json | 2 +- ...e_electrostatic_potential_find_minima.json | 2 +- ...rostatic_potential_via_band_structure.json | 2 +- .../subworkflows/espresso/band_gap.json | 2 +- .../espresso/band_gap_hse_dos.json | 2 +- .../subworkflows/espresso/band_structure.json | 2 +- .../espresso/band_structure_dos.json | 2 +- .../espresso/band_structure_hse.json | 2 +- .../espresso/band_structure_magn.json | 2 +- .../espresso/band_structure_soc.json | 2 +- .../espresso/dielectric_tensor.json | 2 +- .../subworkflows/espresso/dos.json | 2 +- .../espresso/electronic_density_mesh.json | 2 +- .../subworkflows/espresso/esm.json | 2 +- .../subworkflows/espresso/esm_relax.json | 2 +- .../espresso/espresso_extract_kpoints.json | 2 +- .../espresso/espresso_xml_get_qpt_irr.json | 2 +- .../espresso/fixed_cell_relaxation.json | 2 +- ...and_structure_band_gap_full_frequency.json | 2 +- ..._band_structure_band_gap_plasmon_pole.json | 2 +- .../espresso/kpoint_convergence.json | 2 +- .../subworkflows/espresso/neb.json | 2 +- .../espresso/ph_init_qpoints.json | 2 +- .../espresso/ph_single_irr_qpt.json | 2 +- .../espresso/phonon_dispersions.json | 2 +- .../subworkflows/espresso/phonon_dos.json | 2 +- .../espresso/phonon_dos_dispersion.json | 2 +- .../subworkflows/espresso/phonon_reduce.json | 2 +- .../espresso/plot_wavefunction.json | 2 +- .../subworkflows/espresso/post_processor.json | 2 +- .../subworkflows/espresso/pre_processor.json | 2 +- .../subworkflows/espresso/pw_scf.json | 2 +- .../espresso/recalculate_bands.json | 2 +- .../subworkflows/espresso/surface_energy.json | 2 +- .../subworkflows/espresso/total_energy.json | 2 +- .../espresso/variable_cell_relaxation.json | 2 +- .../espresso/wavefunction_amplitude.json | 2 +- .../espresso/zero_point_energy.json | 2 +- .../subworkflows/nwchem/total_energy.json | 2 +- .../python/ml/classification_tail.json | 2 +- .../python/ml/clustering_tail.json | 2 +- .../python/ml/regression_tail.json | 2 +- .../subworkflows/python/python_script.json | 2 +- .../shell/batch_espresso_pwscf.json | 2 +- .../subworkflows/shell/hello_world.json | 2 +- .../subworkflows/vasp/band_gap.json | 2 +- .../subworkflows/vasp/band_structure.json | 2 +- .../subworkflows/vasp/band_structure_dos.json | 2 +- .../runtime_data/subworkflows/vasp/dos.json | 2 +- .../vasp/fixed_cell_relaxation.json | 2 +- .../vasp/initial_final_total_energies.json | 2 +- .../subworkflows/vasp/kpoint_convergence.json | 2 +- .../subworkflows/vasp/neb_subworkflow.json | 2 +- .../subworkflows/vasp/prepare_images.json | 2 +- .../subworkflows/vasp/recalculate_bands.json | 2 +- .../subworkflows/vasp/surface_energy.json | 2 +- .../subworkflows/vasp/total_energy.json | 2 +- .../vasp/variable_cell_relaxation.json | 2 +- .../subworkflows/vasp/zero_point_energy.json | 2 +- dist/js/runtime_data/workflows.json | 2 +- .../workflowSubworkflowMapByApplication.json | 2 +- dist/js/ui/methodTree.json | 2 +- dist/js/ui/modelTree.json | 2 +- dist/js/ui/schemas.json | 2 +- 79 files changed, 98 insertions(+), 140 deletions(-) diff --git a/dist/js/application.d.ts b/dist/js/application.d.ts index 2d6a45b5..557eb7a0 100644 --- a/dist/js/application.d.ts +++ b/dist/js/application.d.ts @@ -80,7 +80,6 @@ export declare class ApplicationStandata extends Standata { }; }; private appCache; - private getAppDataForApplication; private getApplicationExecutablesTree; getAllAppTemplates(): TemplateSchema[]; getAllAppTree(): { @@ -1974,9 +1973,7 @@ export declare class ApplicationStandata extends Standata { getAllAppData(): ApplicationSchema[]; getTemplatesByName(appName: string, execName: string, templateName?: string): TemplateSchema[]; getByApplicationName(appName: string): ApplicationSchema[]; - static getDefaultVersionForApplication(appName: string): string; static getDefaultBuildForApplicationAndVersion(appName: string, version: string): string | null; - getDefaultConfigByNameAndVersion(appName: string, version?: string): ApplicationSchema; getDefaultConfig(): { name: string; shortName: string; @@ -1985,12 +1982,14 @@ export declare class ApplicationStandata extends Standata { build: string; }; private applicationsTree?; - private applications?; + private buildApplicationsTree; getApplicationsTree(): ApplicationTree; - getApplications(): ApplicationSchema[]; getApplicationTreeItem(appName: string): ApplicationTreeItem; getApplication({ name, version, build }: ApplicationConfig): ApplicationSchema; - getExecutableByName(appName: string, execName?: string): ExecutableSchema; + getExecutableByName(appName: string, execName?: string): { + executable: ExecutableSchema; + flavors: FlavorSchema[]; + }; getExecutableAndFlavorByName(appName: string, execName?: string, flavorName?: string): { executable: ExecutableSchema; flavor: FlavorSchema; diff --git a/dist/js/application.js b/dist/js/application.js index 689b142a..15cd9396 100644 --- a/dist/js/application.js +++ b/dist/js/application.js @@ -23,13 +23,6 @@ class ApplicationStandata extends base_1.Standata { super(...arguments); this.appCache = {}; } - getAppDataForApplication(appName) { - const applicationVersionsMap = APP_VERSIONS[appName]; - if (!applicationVersionsMap) { - throw new Error(`Application ${appName} not found`); - } - return applicationVersionsMap; - } getApplicationExecutablesTree(appName) { if (appName in this.appCache) { return this.appCache[appName]; @@ -101,9 +94,6 @@ class ApplicationStandata extends base_1.Standata { const allEntities = this.getAll(); return allEntities.filter((entity) => entity.name === appName); } - static getDefaultVersionForApplication(appName) { - return APP_VERSIONS[appName].defaultVersion; - } static getDefaultBuildForApplicationAndVersion(appName, version) { var _a; const versionConfig = APP_VERSIONS[appName].versions.find((config) => { @@ -111,38 +101,19 @@ class ApplicationStandata extends base_1.Standata { }); return (_a = versionConfig === null || versionConfig === void 0 ? void 0 : versionConfig.build) !== null && _a !== void 0 ? _a : null; } - // TODO: move to parent class Standata, name and generic parameters - getDefaultConfigByNameAndVersion(appName, version) { - const tags = [TAGS.DEFAULT_BUILD]; - let versionToUse = version; - if (!versionToUse) { - tags.push(TAGS.DEFAULT_VERSION); - versionToUse = ApplicationStandata.getDefaultVersionForApplication(appName); - } - const allEntriesWithTags = this.findEntitiesByTags(...tags); - const allEntriesWithTagsForNameAndVersion = allEntriesWithTags.filter((entity) => { - return entity.name === appName && entity.version === versionToUse; - }); - if (allEntriesWithTagsForNameAndVersion.length > 1) { - throw new Error(`Multiple default version entries found for ${appName} with version ${versionToUse}`); - } - else if (allEntriesWithTagsForNameAndVersion.length === 0) { - throw new Error(`No default version entry found for ${appName} with version ${versionToUse}`); - } - return allEntriesWithTagsForNameAndVersion[0]; - } getDefaultConfig() { const fullConfig = this.findEntitiesByTags(TAGS.DEFAULT)[0]; const { name, shortName, version, summary, build } = fullConfig; return { name, shortName, version, summary, build }; } - getApplicationsTree() { - if (this.applicationsTree) { - return this.applicationsTree; - } + buildApplicationsTree() { const applicationNames = this.getAllApplicationNames(); - this.applicationsTree = applicationNames.reduce((tree, appName) => { - const { versions, defaultVersion, ...appData } = this.getAppDataForApplication(appName); + return applicationNames.reduce((tree, appName) => { + const application = APP_VERSIONS[appName]; + if (!application) { + throw new Error(`Application ${appName} not found`); + } + const { versions, defaultVersion, ...appData } = application; return { ...tree, [appName]: { @@ -162,19 +133,13 @@ class ApplicationStandata extends base_1.Standata { }, }; }, {}); - return this.applicationsTree; } - getApplications() { - if (this.applications) { - return this.applications; + getApplicationsTree() { + if (this.applicationsTree) { + return this.applicationsTree; } - const tree = this.getApplicationsTree(); - this.applications = Object.values(tree).flatMap((appTreeItem) => { - return Object.values(appTreeItem.versions).flatMap((version) => { - return Object.values(version).flat(); - }); - }); - return this.applications; + this.applicationsTree = this.buildApplicationsTree(); + return this.applicationsTree; } getApplicationTreeItem(appName) { const tree = this.getApplicationsTree(); @@ -201,23 +166,17 @@ class ApplicationStandata extends base_1.Standata { const config = (execName && appTree[execName]) || Object.values(appTree).find((exec) => exec.executable.isDefault); if (!config) { - throw new Error(`Executable ${execName} not found for application ${appName}`); + throw new Error(`Executable ${execName || "default"} not found for application ${appName}`); } - return config.executable; + return config; } getExecutableAndFlavorByName(appName, execName, flavorName) { - const appTree = this.getApplicationExecutablesTree(appName); - const config = (execName && appTree[execName]) || - Object.values(appTree).find((exec) => exec.executable.isDefault); - if (!config) { - throw new Error(`Executable ${execName} not found for application ${appName}`); - } - const { executable, flavors } = config; + const { executable, flavors } = this.getExecutableByName(appName, execName); const flavor = flavors.find((value) => { return flavorName ? value.name === flavorName : value.isDefault; }); if (!flavor) { - throw new Error(`Flavor ${flavorName} not found for executable ${execName} in application ${appName}`); + throw new Error(`Flavor ${flavorName || "default"} not found for executable ${execName} in application ${appName}`); } return { executable, diff --git a/dist/js/runtime_data/applications.json b/dist/js/runtime_data/applications.json index a4540716..a01c314a 100644 --- a/dist/js/runtime_data/applications.json +++ b/dist/js/runtime_data/applications.json @@ -1 +1 @@ -{"filesMapByName":{"espresso/espresso_gnu_6.3.json":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"nwchem/nwchem_gnu_7.0.2.json":{"build":"GNU","isDefault":true,"name":"nwchem","shortName":"nwchem","summary":"NWChem","version":"7.0.2"},"python/python_gnu_3.10.13.json":{"build":"GNU","isDefault":true,"name":"python","shortName":"py","summary":"Python Script","version":"3.10.13"},"shell/shell_gnu_5.1.8.json":{"build":"GNU","isDefault":true,"name":"shell","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"vasp/vasp_gnu_5.4.4.json":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"}},"standataConfig":{"categories":{"defaults":["default_version","default_build","default"],"language_type":["scripting","compiled"],"model":["atomistic","macroscopic","mesoscopic","quantum-mechanical","statistical"],"purpose":["modeling","programming_language"]},"entities":[{"categories":["quantum-mechanical","modeling","compiled","default_version","default_build","default"],"filename":"espresso/espresso_gnu_6.3.json"},{"categories":["quantum-mechanical","modeling","compiled","default_version","default_build","default"],"filename":"vasp/vasp_gnu_5.4.4.json"},{"categories":["quantum-mechanical","modeling","compiled","default_version","default_build","default"],"filename":"nwchem/nwchem_gnu_7.0.2.json"},{"categories":["programming_language","scripting","default_version","default"],"filename":"python/python_gnu_3.10.13.json"},{"categories":["programming_language","scripting","default_version","default"],"filename":"shell/shell_gnu_5.1.8.json"}]}} +{ "filesMapByName": { "espresso/espresso_gnu_6.3.json": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "nwchem/nwchem_gnu_7.0.2.json": { "build": "GNU", "isDefault": true, "name": "nwchem", "shortName": "nwchem", "summary": "NWChem", "version": "7.0.2" }, "python/python_gnu_3.10.13.json": { "build": "GNU", "isDefault": true, "name": "python", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "shell/shell_gnu_5.1.8.json": { "build": "GNU", "isDefault": true, "name": "shell", "shortName": "sh", "summary": "Shell Script", "version": "5.1.8" }, "vasp/vasp_gnu_5.4.4.json": { "build": "GNU", "isDefault": true, "isLicensed": true, "name": "vasp", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "version": "5.4.4" } }, "standataConfig": { "categories": { "defaults": ["default_version", "default_build", "default"], "language_type": ["scripting", "compiled"], "model": ["atomistic", "macroscopic", "mesoscopic", "quantum-mechanical", "statistical"], "purpose": ["modeling", "programming_language"] }, "entities": [{ "categories": ["quantum-mechanical", "modeling", "compiled", "default_version", "default_build", "default"], "filename": "espresso/espresso_gnu_6.3.json" }, { "categories": ["quantum-mechanical", "modeling", "compiled", "default_version", "default_build", "default"], "filename": "vasp/vasp_gnu_5.4.4.json" }, { "categories": ["quantum-mechanical", "modeling", "compiled", "default_version", "default_build", "default"], "filename": "nwchem/nwchem_gnu_7.0.2.json" }, { "categories": ["programming_language", "scripting", "default_version", "default"], "filename": "python/python_gnu_3.10.13.json" }, { "categories": ["programming_language", "scripting", "default_version", "default"], "filename": "shell/shell_gnu_5.1.8.json" }] } } diff --git a/dist/js/runtime_data/applications/applicationVersionsMapByApplication.json b/dist/js/runtime_data/applications/applicationVersionsMapByApplication.json index 7fddd66c..5ee3264d 100644 --- a/dist/js/runtime_data/applications/applicationVersionsMapByApplication.json +++ b/dist/js/runtime_data/applications/applicationVersionsMapByApplication.json @@ -1 +1 @@ -{"espresso":{"defaultVersion":"6.3","name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","versions":[{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3"}]},"nwchem":{"defaultVersion":"7.0.2","name":"nwchem","shortName":"nwchem","summary":"NWChem","versions":[{"build":"GNU","isDefault":true,"version":"7.0.2"}]},"python":{"defaultVersion":"3.10.13","name":"python","shortName":"py","summary":"Python Script","versions":[{"build":"GNU","isDefault":true,"version":"3.10.13"}]},"shell":{"defaultVersion":"5.1.8","name":"shell","shortName":"sh","summary":"Shell Script","versions":[{"build":"GNU","isDefault":true,"version":"5.1.8"}]},"vasp":{"defaultVersion":"5.4.4","isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","versions":[{"build":"GNU","isDefault":true,"version":"5.4.4"}]}} +{"espresso":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","defaultVersion":"6.3","versions":[{"version":"6.3","isDefault":true,"build":"GNU","hasAdvancedComputeOptions":true}]},"nwchem":{"name":"nwchem","shortName":"nwchem","summary":"NWChem","defaultVersion":"7.0.2","versions":[{"version":"7.0.2","isDefault":true,"build":"GNU"}]},"python":{"name":"python","shortName":"py","summary":"Python Script","defaultVersion":"3.10.13","versions":[{"version":"3.10.13","isDefault":true,"build":"GNU"}]},"shell":{"name":"shell","shortName":"sh","summary":"Shell Script","defaultVersion":"5.1.8","versions":[{"version":"5.1.8","isDefault":true,"build":"GNU"}]},"vasp":{"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","defaultVersion":"5.4.4","isLicensed":true,"versions":[{"version":"5.4.4","isDefault":true,"build":"GNU"}]}} diff --git a/dist/js/runtime_data/applications/executableFlavorMapByApplication.json b/dist/js/runtime_data/applications/executableFlavorMapByApplication.json index 29aed155..71d40b81 100644 --- a/dist/js/runtime_data/applications/executableFlavorMapByApplication.json +++ b/dist/js/runtime_data/applications/executableFlavorMapByApplication.json @@ -1 +1 @@ -{"espresso":{"abcoeff_to_eps.x":{"flavors":{"abcoeff_to_eps_simple":{"applicationName":"espresso","executableName":"abcoeff_to_eps.x","input":[{"name":"abcoeff_to_eps_simple.in"}],"monitors":[{"name":"standard_output"}],"results":[]}},"monitors":[{"name":"standard_output"}],"results":[]},"average.x":{"flavors":{"average":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"results":[]},"average_potential":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"average_potential_profile"}]}},"monitors":[{"name":"standard_output"}],"results":[{"name":"average_potential_profile"}]},"bands.x":{"flavors":{"bands":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}]},"bands_spin_dn":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_dn.in"}],"monitors":[{"name":"standard_output"}]},"bands_spin_up":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_up.in"}],"monitors":[{"name":"standard_output"}]}},"monitors":[{"name":"standard_output"}],"results":[{"name":"band_structure"}]},"cp.x":{"flavors":{"cp":{"applicationName":"espresso","executableName":"cp.x","input":[{"name":"cp.in"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"results":[]},"cp_wf":{"applicationName":"espresso","executableName":"cp.x","input":[{"name":"cp_wf.in"}],"monitors":[{"name":"standard_output"}],"results":[]}},"monitors":[{"name":"standard_output"}],"results":[]},"dos.x":{"flavors":{"dos":{"applicationName":"espresso","executableName":"dos.x","input":[{"name":"dos.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"density_of_states"}]}},"monitors":[{"name":"standard_output"}],"results":[{"name":"density_of_states"}]},"dynmat.x":{"flavors":{"dynmat":{"applicationName":"espresso","executableName":"dynmat.x","input":[{"name":"dynmat_grid.in"}],"monitors":[{"name":"standard_output"}],"results":[]}},"monitors":[{"name":"standard_output"}],"results":[]},"epsilon.x":{"flavors":{"dielectric_tensor":{"applicationName":"espresso","executableName":"epsilon.x","input":[{"name":"epsilon.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"dielectric_tensor"}]}},"monitors":[{"name":"standard_output"}],"results":[{"name":"dielectric_tensor"}]},"gw.x":{"flavors":{"gw_bands_full_frequency":{"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_full_frequency.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}]},"gw_bands_plasmon_pole":{"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_plasmon_pole.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}]}},"monitors":[{"name":"standard_output"}],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}]},"gww.x":{"flavors":{"gww_simple":{"applicationName":"espresso","executableName":"gww.x","input":[{"name":"gww_simple.in"}],"monitors":[{"name":"standard_output"}],"results":[]}},"monitors":[{"name":"standard_output"}],"results":[]},"head.x":{"flavors":{"head_simple":{"applicationName":"espresso","executableName":"head.x","input":[{"name":"head_simple.in"}],"monitors":[{"name":"standard_output"}],"results":[]}},"monitors":[{"name":"standard_output"}],"results":[]},"hp.x":{"flavors":{"hp":{"applicationName":"espresso","executableName":"hp.x","input":[{"name":"hp.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"hubbard_u"},{"name":"hubbard_v_nn"},{"name":"hubbard_v"}]}},"monitors":[{"name":"standard_output"}],"results":[{"name":"hubbard_u"},{"name":"hubbard_v_nn"},{"name":"hubbard_v"}],"supportedApplicationVersions":["7.0","7.2","7.3"]},"matdyn.x":{"flavors":{"matdyn_grid":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"phonon_dos"}]},"matdyn_path":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"phonon_dispersions"}]}},"monitors":[{"name":"standard_output"}],"results":[{"name":"phonon_dos"},{"name":"phonon_dispersions"}]},"neb.x":{"flavors":{"neb":{"applicationName":"espresso","executableName":"neb.x","input":[{"name":"neb.in"}],"isMultiMaterial":true,"monitors":[{"name":"standard_output"}],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}]}},"monitors":[{"name":"standard_output"}],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}]},"ph.x":{"flavors":{"ph_gamma":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"zero_point_energy"}]},"ph_grid":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"phonon_dos"}]},"ph_grid_restart":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid_restart.in"}],"monitors":[{"name":"standard_output"}],"results":[]},"ph_init_qpoints":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_init_qpoints.in"}],"monitors":[{"name":"standard_output"}],"results":[]},"ph_path":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_path.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"phonon_dispersions"}]},"ph_single_irr_qpt":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_single_irr_qpt.in"}],"monitors":[{"name":"standard_output"}],"results":[]}},"monitors":[{"name":"standard_output"}],"results":[{"name":"phonon_dos"},{"name":"phonon_dispersions"},{"name":"zero_point_energy"}]},"pp.x":{"flavors":{"pp_density":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_density.in"}],"monitors":[{"name":"standard_output"}],"results":[]},"pp_electrostatic_potential":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":[{"name":"standard_output"}],"results":[]},"pp_wfn":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"wavefunction_amplitude"}]}},"monitors":[{"name":"standard_output"}],"results":[]},"projwfc.x":{"flavors":{"projwfc":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"density_of_states"}]}},"monitors":[{"name":"standard_output"}],"results":[{"name":"density_of_states"}]},"pw.x":{"flavors":{"pw_bands":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"band_structure"}]},"pw_bands_dft_u+j_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_dft_j_magn.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"band_structure"}],"supportedApplicationVersions":["7.2","7.3"]},"pw_bands_dft_u+v_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_dft_v_magn.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"band_structure"}],"supportedApplicationVersions":["7.2","7.3"]},"pw_bands_dft_u_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_dft_u_magn.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"band_structure"}],"supportedApplicationVersions":["7.2","7.3"]},"pw_bands_dft_u_magn_legacy":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_dft_u_magn_legacy.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"band_structure"}],"supportedApplicationVersions":["6.3","6.4.1","6.5.0","6.6.0","6.7.0","6.8.0","7.0"]},"pw_bands_dft_u_soc":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_dft_u_soc.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"band_structure"}],"supportedApplicationVersions":["7.2","7.3"]},"pw_bands_dft_u_soc_legacy":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_dft_u_soc_legacy.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"band_structure"}],"supportedApplicationVersions":["6.3","6.4.1","6.5.0","6.6.0","6.7.0","6.8.0","7.0"]},"pw_bands_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_magn.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"band_structure"}]},"pw_bands_soc":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_soc.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"band_structure"}]},"pw_esm":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}]},"pw_esm_relax":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}]},"pw_md":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_md.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}]},"pw_nscf":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}]},"pw_nscf_dft_u+j_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf_dft_j_magn.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"supportedApplicationVersions":["7.2","7.3"]},"pw_nscf_dft_u+v_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf_dft_v_magn.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"supportedApplicationVersions":["7.2","7.3"]},"pw_nscf_dft_u_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf_dft_u_magn.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"supportedApplicationVersions":["7.2","7.3"]},"pw_nscf_dft_u_magn_legacy":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf_dft_u_magn_legacy.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"supportedApplicationVersions":["6.3","6.4.1","6.5.0","6.6.0","6.7.0","6.8.0","7.0"]},"pw_nscf_dft_u_soc":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf_dft_u_soc.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"supportedApplicationVersions":["7.2","7.3"]},"pw_nscf_dft_u_soc_legacy":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf_dft_u_soc_legacy.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"supportedApplicationVersions":["6.3","6.4.1","6.5.0","6.6.0","6.7.0","6.8.0","7.0"]},"pw_nscf_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf_magn.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}]},"pw_nscf_soc":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf_soc.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}]},"pw_relax":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}]},"pw_scf":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}]},"pw_scf_bands_hse":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_bands_hse.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}]},"pw_scf_dft_u":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_dft_u.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"supportedApplicationVersions":["7.2","7.3"]},"pw_scf_dft_u+j":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_dft_j.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"supportedApplicationVersions":["7.2","7.3"]},"pw_scf_dft_u+j_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_dft_j_magn.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"supportedApplicationVersions":["7.2","7.3"]},"pw_scf_dft_u+v":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_dft_v.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"supportedApplicationVersions":["7.2","7.3"]},"pw_scf_dft_u+v_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_dft_v_magn.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"supportedApplicationVersions":["7.2","7.3"]},"pw_scf_dft_u_legacy":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_dft_u_legacy.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"supportedApplicationVersions":["6.3","6.4.1","6.5.0","6.6.0","6.7.0","6.8.0","7.0"]},"pw_scf_dft_u_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_dft_u_magn.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"supportedApplicationVersions":["7.2","7.3"]},"pw_scf_dft_u_magn_legacy":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_dft_u_magn_legacy.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"supportedApplicationVersions":["6.3","6.4.1","6.5.0","6.6.0","6.7.0","6.8.0","7.0"]},"pw_scf_dft_u_soc":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_dft_u_soc.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"supportedApplicationVersions":["7.2","7.3"]},"pw_scf_dft_u_soc_legacy":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_dft_u_soc_legacy.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"supportedApplicationVersions":["6.3","6.4.1","6.5.0","6.6.0","6.7.0","6.8.0","7.0"]},"pw_scf_hse":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_hse.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}]},"pw_scf_kpt_conv":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_kpt_conv.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}]},"pw_scf_magn":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_magn.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}]},"pw_scf_soc":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_soc.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}]},"pw_vc-relax":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}]}},"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"band_structure"},{"name":"charge_density_profile"},{"name":"density_of_states"},{"name":"fermi_energy"},{"name":"final_structure"},{"name":"magnetic_moments"},{"name":"potential_profile"},{"name":"pressure"},{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}]},"pw4gww.x":{"flavors":{"pw4gww_simple":{"applicationName":"espresso","executableName":"pw4gww.x","input":[{"name":"pw4gww_simple.in"}],"monitors":[{"name":"standard_output"}],"results":[]}},"monitors":[{"name":"standard_output"}],"results":[]},"q2r.x":{"flavors":{"q2r":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"results":[]}},"monitors":[{"name":"standard_output"}],"results":[]},"simple.x":{"flavors":{"simple":{"applicationName":"espresso","executableName":"simple.x","input":[{"name":"simple.in"}],"monitors":[{"name":"standard_output"}],"results":[]}},"monitors":[{"name":"standard_output"}],"results":[]},"simple_bse.x":{"flavors":{"simple_bse":{"applicationName":"espresso","executableName":"simple_bse.x","input":[{"name":"simple_bse.in"}],"monitors":[{"name":"standard_output"}],"results":[]}},"monitors":[{"name":"standard_output"}],"results":[]},"simple_ip.x":{"flavors":{"simple_ip":{"applicationName":"espresso","executableName":"simple_ip.x","input":[{"name":"simple_ip.in"}],"monitors":[{"name":"standard_output"}],"results":[]}},"monitors":[{"name":"standard_output"}],"results":[]}},"nwchem":{"nwchem":{"flavors":{"nwchem_total_energy":{"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}]}},"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":[{"name":"standard_output"}],"postProcessors":[{"name":"error_handler"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}]}},"python":{"python":{"flavors":{"espresso_extract_kpoints":{"applicationName":"python","executableName":"python","input":[{"name":"espresso_extract_kpoints.py"},{"name":"requirements.txt","templateName":"requirements_empty.txt"}],"monitors":[{"name":"standard_output"}]},"espresso_xml_get_qpt_irr":{"applicationName":"python","executableName":"python","input":[{"name":"espresso_xml_get_qpt_irr.py"}],"monitors":[{"name":"standard_output"}]},"generic:post_processing:plot:matplotlib":{"applicationName":"python","executableName":"python","input":[{"name":"plot.py","templateName":"matplotlib_basic.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":[{"name":"standard_output"}]},"generic:processing:find_extrema:scipy":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":[{"name":"standard_output"}]},"hello_world":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":[{"name":"standard_output"}]},"plot_wavefunction":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"basename":"wf_r.png","filetype":"image","name":"file_content"}]},"pyml:custom":{"applicationName":"python","executableName":"python","input":[{"name":"pyml_custom.py","templateName":"pyml_custom.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}]},"pyml:data_input:read_csv:pandas":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}]},"pyml:data_input:train_test_split:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}]},"pyml:model:adaboosted_trees_regression:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_adaboosted_trees_regression_sklearn.py","templateName":"model_adaboosted_trees_regression_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"workflow:pyml_predict"}]},"pyml:model:bagged_trees_regression:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_bagged_trees_regression_sklearn.py","templateName":"model_bagged_trees_regression_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"workflow:pyml_predict"}]},"pyml:model:extreme_gradboosted_trees_classification:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_extreme_gradboosted_trees_classification_sklearn.py","templateName":"model_extreme_gradboosted_trees_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"workflow:pyml_predict"}]},"pyml:model:extreme_gradboosted_trees_regression:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_extreme_gradboosted_trees_regression_sklearn.py","templateName":"model_extreme_gradboosted_trees_regression_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"workflow:pyml_predict"}]},"pyml:model:gradboosted_trees_classification:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_gradboosted_trees_classification_sklearn.py","templateName":"model_gradboosted_trees_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"workflow:pyml_predict"}]},"pyml:model:gradboosted_trees_regression:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_gradboosted_trees_regression_sklearn.py","templateName":"model_gradboosted_trees_regression_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"workflow:pyml_predict"}]},"pyml:model:k_means_clustering:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_k_means_clustering_sklearn.py","templateName":"model_k_means_clustering_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"workflow:pyml_predict"}]},"pyml:model:kernel_ridge_regression:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_kernel_ridge_regression_sklearn.py","templateName":"model_kernel_ridge_regression_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"workflow:pyml_predict"}]},"pyml:model:lasso_regression:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_lasso_regression_sklearn.py","templateName":"model_lasso_regression_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"workflow:pyml_predict"}]},"pyml:model:multilayer_perceptron:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"workflow:pyml_predict"}]},"pyml:model:random_forest_classification:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"workflow:pyml_predict"}]},"pyml:model:random_forest_regression:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_regression_sklearn.py","templateName":"model_random_forest_regression_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"workflow:pyml_predict"}]},"pyml:model:ridge_regression:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"model_ridge_regression_sklearn.py","templateName":"model_ridge_regression_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"workflow:pyml_predict"}]},"pyml:post_processing:parity_plot:matplotlib":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"file_content"}]},"pyml:post_processing:pca_2d_clusters:matplotlib":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_pca_2d_clusters_matplotlib.py","templateName":"post_processing_pca_2d_clusters_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"file_content"}]},"pyml:post_processing:roc_curve:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"file_content"}]},"pyml:pre_processing:min_max_scaler:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_min_max_sklearn.py","templateName":"pre_processing_min_max_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}]},"pyml:pre_processing:remove_duplicates:pandas":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_remove_duplicates_pandas.py","templateName":"pre_processing_remove_duplicates_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}]},"pyml:pre_processing:remove_missing:pandas":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_remove_missing_pandas.py","templateName":"pre_processing_remove_missing_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}]},"pyml:pre_processing:standardization:sklearn":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}]},"pyml:setup_variables_packages":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}]}},"isDefault":true,"monitors":[{"name":"standard_output"}],"results":[{"name":"file_content"},{"name":"workflow:pyml_predict"}]}},"shell":{"sh":{"flavors":{"bash_vasp_prepare_neb_images":{"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"isMultiMaterial":true,"monitors":[{"name":"standard_output"}]},"espresso_collect_dynmat":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_collect_dynmat.sh"}],"monitors":[{"name":"standard_output"}]},"espresso_link_outdir_save":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_link_outdir_save.sh"}],"monitors":[{"name":"standard_output"}]},"hello_world":{"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":[{"name":"standard_output"}]},"job_espresso_pw_scf":{"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"monitors":[{"name":"standard_output"}]}},"isDefault":true,"monitors":[{"name":"standard_output"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"band_structure"},{"name":"density_of_states"},{"name":"fermi_energy"},{"name":"phonon_dispersions"},{"name":"phonon_dos"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"},{"name":"zero_point_energy"},{"name":"final_structure"},{"name":"magnetic_moments"},{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"},{"name":"potential_profile"},{"name":"charge_density_profile"}]}},"vasp":{"vasp":{"flavors":{"vasp":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}]},"vasp_bands":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"band_structure"}]},"vasp_bands_hse":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS_HSE"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"band_structure"}]},"vasp_hse":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_HSE"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}]},"vasp_kpt_conv":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}]},"vasp_neb":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB"},{"name":"KPOINTS","templateName":"KPOINTS"}],"isMultiMaterial":true,"monitors":[{"name":"standard_output"}],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}]},"vasp_neb_final":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"isMultiMaterial":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}]},"vasp_neb_initial":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"isMultiMaterial":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}]},"vasp_nscf":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}]},"vasp_nscf_hse":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS_HSE"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}]},"vasp_relax":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"postProcessors":[{"name":"prepare_restart"}],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}]},"vasp_symprec":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_SYMPREC"},{"name":"KPOINTS"},{"name":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}]},"vasp_vc_relax":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_VC_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"postProcessors":[{"name":"prepare_restart"}],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}]},"vasp_vc_relax_conv":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_VC_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}]},"vasp_zpe":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_ZPE"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"zero_point_energy"}]}},"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"band_structure"},{"name":"density_of_states"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"},{"name":"zero_point_energy"},{"name":"final_structure"},{"name":"magnetic_moments"},{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"},{"name":"potential_profile"},{"name":"charge_density_profile"}]}}} +{"espresso":{"abcoeff_to_eps.x":{"monitors":[{"name":"standard_output"}],"results":[],"flavors":{"abcoeff_to_eps_simple":{"input":[{"name":"abcoeff_to_eps_simple.in"}],"results":[],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"abcoeff_to_eps.x"}}},"average.x":{"monitors":[{"name":"standard_output"}],"results":[{"name":"average_potential_profile"}],"flavors":{"average":{"input":[{"name":"average.in"}],"results":[],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"average.x"},"average_potential":{"input":[{"name":"average.in"}],"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"average.x"}}},"bands.x":{"monitors":[{"name":"standard_output"}],"results":[{"name":"band_structure"}],"flavors":{"bands":{"input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"bands.x"},"bands_spin_up":{"input":[{"name":"bands_spin_up.in"}],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"bands.x"},"bands_spin_dn":{"input":[{"name":"bands_spin_dn.in"}],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"bands.x"}}},"cp.x":{"monitors":[{"name":"standard_output"}],"results":[],"flavors":{"cp":{"isDefault":true,"input":[{"name":"cp.in"}],"results":[],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"cp.x"},"cp_wf":{"input":[{"name":"cp_wf.in"}],"results":[],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"cp.x"}}},"dos.x":{"monitors":[{"name":"standard_output"}],"results":[{"name":"density_of_states"}],"flavors":{"dos":{"input":[{"name":"dos.in"}],"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"dos.x"}}},"dynmat.x":{"monitors":[{"name":"standard_output"}],"results":[],"flavors":{"dynmat":{"input":[{"name":"dynmat_grid.in"}],"results":[],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"dynmat.x"}}},"epsilon.x":{"monitors":[{"name":"standard_output"}],"results":[{"name":"dielectric_tensor"}],"flavors":{"dielectric_tensor":{"input":[{"name":"epsilon.in"}],"results":[{"name":"dielectric_tensor"}],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"epsilon.x"}}},"gw.x":{"monitors":[{"name":"standard_output"}],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"flavors":{"gw_bands_plasmon_pole":{"input":[{"name":"gw_bands_plasmon_pole.in"}],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"gw.x"},"gw_bands_full_frequency":{"input":[{"name":"gw_bands_full_frequency.in"}],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"gw.x"}}},"gww.x":{"monitors":[{"name":"standard_output"}],"results":[],"flavors":{"gww_simple":{"input":[{"name":"gww_simple.in"}],"results":[],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"gww.x"}}},"head.x":{"monitors":[{"name":"standard_output"}],"results":[],"flavors":{"head_simple":{"input":[{"name":"head_simple.in"}],"results":[],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"head.x"}}},"hp.x":{"monitors":[{"name":"standard_output"}],"results":[{"name":"hubbard_u"},{"name":"hubbard_v_nn"},{"name":"hubbard_v"}],"flavors":{"hp":{"input":[{"name":"hp.in"}],"results":[{"name":"hubbard_u"},{"name":"hubbard_v_nn"},{"name":"hubbard_v"}],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"hp.x"}},"supportedApplicationVersions":["7.0","7.2","7.3"]},"matdyn.x":{"monitors":[{"name":"standard_output"}],"results":[{"name":"phonon_dos"},{"name":"phonon_dispersions"}],"flavors":{"matdyn_grid":{"input":[{"name":"matdyn_grid.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"phonon_dos"}],"applicationName":"espresso","executableName":"matdyn.x"},"matdyn_path":{"input":[{"name":"matdyn_path.in"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"phonon_dispersions"}],"applicationName":"espresso","executableName":"matdyn.x"}}},"neb.x":{"monitors":[{"name":"standard_output"}],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"flavors":{"neb":{"isMultiMaterial":true,"input":[{"name":"neb.in"}],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"neb.x"}}},"ph.x":{"monitors":[{"name":"standard_output"}],"results":[{"name":"phonon_dos"},{"name":"phonon_dispersions"},{"name":"zero_point_energy"}],"flavors":{"ph_path":{"input":[{"name":"ph_path.in"}],"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"ph.x"},"ph_grid":{"input":[{"name":"ph_grid.in"}],"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"ph.x"},"ph_gamma":{"input":[{"name":"ph_gamma.in"}],"results":[{"name":"zero_point_energy"}],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"ph.x"},"ph_init_qpoints":{"input":[{"name":"ph_init_qpoints.in"}],"results":[],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"ph.x"},"ph_grid_restart":{"input":[{"name":"ph_grid_restart.in"}],"results":[],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"ph.x"},"ph_single_irr_qpt":{"input":[{"name":"ph_single_irr_qpt.in"}],"results":[],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"ph.x"}}},"pp.x":{"monitors":[{"name":"standard_output"}],"results":[],"flavors":{"pp_density":{"input":[{"name":"pp_density.in"}],"results":[],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"pp.x"},"pp_electrostatic_potential":{"input":[{"name":"pp_electrostatic_potential.in"}],"results":[],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"pp.x"},"pp_wfn":{"input":[{"name":"pp_wfn.in"}],"results":[{"name":"wavefunction_amplitude"}],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"pp.x"}}},"projwfc.x":{"monitors":[{"name":"standard_output"}],"results":[{"name":"density_of_states"}],"flavors":{"projwfc":{"input":[{"name":"projwfc.in"}],"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"projwfc.x"}}},"pw.x":{"isDefault":true,"hasAdvancedComputeOptions":true,"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"band_structure"},{"name":"charge_density_profile"},{"name":"density_of_states"},{"name":"fermi_energy"},{"name":"final_structure"},{"name":"magnetic_moments"},{"name":"potential_profile"},{"name":"pressure"},{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"flavors":{"pw_scf":{"isDefault":true,"input":[{"name":"pw_scf.in"}],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"applicationName":"espresso","executableName":"pw.x"},"pw_scf_bands_hse":{"input":[{"name":"pw_scf_bands_hse.in"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"applicationName":"espresso","executableName":"pw.x"},"pw_scf_hse":{"input":[{"name":"pw_scf_hse.in"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"applicationName":"espresso","executableName":"pw.x"},"pw_scf_kpt_conv":{"input":[{"name":"pw_scf_kpt_conv.in"}],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"applicationName":"espresso","executableName":"pw.x"},"pw_scf_dft_u":{"input":[{"name":"pw_scf_dft_u.in"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"applicationName":"espresso","executableName":"pw.x","supportedApplicationVersions":["7.2","7.3"]},"pw_scf_dft_u+v":{"input":[{"name":"pw_scf_dft_v.in"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"applicationName":"espresso","executableName":"pw.x","supportedApplicationVersions":["7.2","7.3"]},"pw_scf_dft_u+j":{"input":[{"name":"pw_scf_dft_j.in"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"applicationName":"espresso","executableName":"pw.x","supportedApplicationVersions":["7.2","7.3"]},"pw_scf_dft_u_legacy":{"input":[{"name":"pw_scf_dft_u_legacy.in"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"applicationName":"espresso","executableName":"pw.x","supportedApplicationVersions":["6.3","6.4.1","6.5.0","6.6.0","6.7.0","6.8.0","7.0"]},"pw_scf_magn":{"input":[{"name":"pw_scf_magn.in"}],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"applicationName":"espresso","executableName":"pw.x"},"pw_scf_soc":{"input":[{"name":"pw_scf_soc.in"}],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"applicationName":"espresso","executableName":"pw.x"},"pw_scf_dft_u_magn":{"input":[{"name":"pw_scf_dft_u_magn.in"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"applicationName":"espresso","executableName":"pw.x","supportedApplicationVersions":["7.2","7.3"]},"pw_scf_dft_u_soc":{"input":[{"name":"pw_scf_dft_u_soc.in"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"applicationName":"espresso","executableName":"pw.x","supportedApplicationVersions":["7.2","7.3"]},"pw_scf_dft_u+v_magn":{"input":[{"name":"pw_scf_dft_v_magn.in"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"applicationName":"espresso","executableName":"pw.x","supportedApplicationVersions":["7.2","7.3"]},"pw_scf_dft_u+j_magn":{"input":[{"name":"pw_scf_dft_j_magn.in"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"applicationName":"espresso","executableName":"pw.x","supportedApplicationVersions":["7.2","7.3"]},"pw_scf_dft_u_magn_legacy":{"input":[{"name":"pw_scf_dft_u_magn_legacy.in"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"applicationName":"espresso","executableName":"pw.x","supportedApplicationVersions":["6.3","6.4.1","6.5.0","6.6.0","6.7.0","6.8.0","7.0"]},"pw_scf_dft_u_soc_legacy":{"input":[{"name":"pw_scf_dft_u_soc_legacy.in"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"applicationName":"espresso","executableName":"pw.x","supportedApplicationVersions":["6.3","6.4.1","6.5.0","6.6.0","6.7.0","6.8.0","7.0"]},"pw_esm":{"input":[{"name":"pw_esm.in"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"applicationName":"espresso","executableName":"pw.x"},"pw_esm_relax":{"input":[{"name":"pw_esm_relax.in"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"applicationName":"espresso","executableName":"pw.x"},"pw_nscf":{"input":[{"name":"pw_nscf.in"}],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"pw.x"},"pw_nscf_magn":{"input":[{"name":"pw_nscf_magn.in"}],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"pw.x"},"pw_nscf_soc":{"input":[{"name":"pw_nscf_soc.in"}],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"pw.x"},"pw_nscf_dft_u_magn":{"input":[{"name":"pw_nscf_dft_u_magn.in"}],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"pw.x","supportedApplicationVersions":["7.2","7.3"]},"pw_nscf_dft_u+v_magn":{"input":[{"name":"pw_nscf_dft_v_magn.in"}],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"pw.x","supportedApplicationVersions":["7.2","7.3"]},"pw_nscf_dft_u+j_magn":{"input":[{"name":"pw_nscf_dft_j_magn.in"}],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"pw.x","supportedApplicationVersions":["7.2","7.3"]},"pw_nscf_dft_u_magn_legacy":{"input":[{"name":"pw_nscf_dft_u_magn_legacy.in"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"applicationName":"espresso","executableName":"pw.x","supportedApplicationVersions":["6.3","6.4.1","6.5.0","6.6.0","6.7.0","6.8.0","7.0"]},"pw_nscf_dft_u_soc":{"input":[{"name":"pw_nscf_dft_u_soc.in"}],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"pw.x","supportedApplicationVersions":["7.2","7.3"]},"pw_nscf_dft_u_soc_legacy":{"input":[{"name":"pw_nscf_dft_u_soc_legacy.in"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"applicationName":"espresso","executableName":"pw.x","supportedApplicationVersions":["6.3","6.4.1","6.5.0","6.6.0","6.7.0","6.8.0","7.0"]},"pw_bands":{"input":[{"name":"pw_bands.in"}],"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"pw.x"},"pw_bands_magn":{"input":[{"name":"pw_bands_magn.in"}],"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"pw.x"},"pw_bands_soc":{"input":[{"name":"pw_bands_soc.in"}],"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"pw.x"},"pw_bands_dft_u_magn":{"input":[{"name":"pw_bands_dft_u_magn.in"}],"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"pw.x","supportedApplicationVersions":["7.2","7.3"]},"pw_bands_dft_u+v_magn":{"input":[{"name":"pw_bands_dft_v_magn.in"}],"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"pw.x","supportedApplicationVersions":["7.2","7.3"]},"pw_bands_dft_u+j_magn":{"input":[{"name":"pw_bands_dft_j_magn.in"}],"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"pw.x","supportedApplicationVersions":["7.2","7.3"]},"pw_bands_dft_u_magn_legacy":{"input":[{"name":"pw_bands_dft_u_magn_legacy.in"}],"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"pw.x","supportedApplicationVersions":["6.3","6.4.1","6.5.0","6.6.0","6.7.0","6.8.0","7.0"]},"pw_bands_dft_u_soc":{"input":[{"name":"pw_bands_dft_u_soc.in"}],"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"pw.x","supportedApplicationVersions":["7.2","7.3"]},"pw_bands_dft_u_soc_legacy":{"input":[{"name":"pw_bands_dft_u_soc_legacy.in"}],"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"pw.x","supportedApplicationVersions":["6.3","6.4.1","6.5.0","6.6.0","6.7.0","6.8.0","7.0"]},"pw_relax":{"input":[{"name":"pw_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"applicationName":"espresso","executableName":"pw.x"},"pw_vc-relax":{"input":[{"name":"pw_vc_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"applicationName":"espresso","executableName":"pw.x"},"pw_md":{"input":[{"name":"pw_md.in"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"applicationName":"espresso","executableName":"pw.x"}}},"pw4gww.x":{"monitors":[{"name":"standard_output"}],"results":[],"flavors":{"pw4gww_simple":{"input":[{"name":"pw4gww_simple.in"}],"results":[],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"pw4gww.x"}}},"q2r.x":{"monitors":[{"name":"standard_output"}],"results":[],"flavors":{"q2r":{"input":[{"name":"q2r.in"}],"results":[],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"q2r.x"}}},"simple.x":{"monitors":[{"name":"standard_output"}],"results":[],"flavors":{"simple":{"input":[{"name":"simple.in"}],"results":[],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"simple.x"}}},"simple_bse.x":{"monitors":[{"name":"standard_output"}],"results":[],"flavors":{"simple_bse":{"input":[{"name":"simple_bse.in"}],"results":[],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"simple_bse.x"}}},"simple_ip.x":{"monitors":[{"name":"standard_output"}],"results":[],"flavors":{"simple_ip":{"input":[{"name":"simple_ip.in"}],"results":[],"monitors":[{"name":"standard_output"}],"applicationName":"espresso","executableName":"simple_ip.x"}}}},"nwchem":{"nwchem":{"isDefault":true,"hasAdvancedComputeOptions":false,"postProcessors":[{"name":"error_handler"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"flavors":{"nwchem_total_energy":{"isDefault":true,"input":[{"name":"nwchem_total_energy.inp"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"monitors":[{"name":"standard_output"}],"applicationName":"nwchem","executableName":"nwchem"}}}},"python":{"python":{"isDefault":true,"monitors":[{"name":"standard_output"}],"results":[{"name":"file_content"},{"name":"workflow:pyml_predict"}],"flavors":{"hello_world":{"isDefault":true,"input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"monitors":[{"name":"standard_output"}],"applicationName":"python","executableName":"python"},"espresso_xml_get_qpt_irr":{"input":[{"name":"espresso_xml_get_qpt_irr.py"}],"monitors":[{"name":"standard_output"}],"applicationName":"python","executableName":"python"},"espresso_extract_kpoints":{"input":[{"name":"espresso_extract_kpoints.py"},{"name":"requirements.txt","templateName":"requirements_empty.txt"}],"monitors":[{"name":"standard_output"}],"applicationName":"python","executableName":"python"},"plot_wavefunction":{"input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"results":[{"name":"file_content","filetype":"image","basename":"wf_r.png"}],"monitors":[{"name":"standard_output"}],"applicationName":"python","executableName":"python"},"generic:post_processing:plot:matplotlib":{"input":[{"name":"plot.py","templateName":"matplotlib_basic.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":[{"name":"standard_output"}],"applicationName":"python","executableName":"python"},"generic:processing:find_extrema:scipy":{"input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":[{"name":"standard_output"}],"applicationName":"python","executableName":"python"},"pyml:setup_variables_packages":{"input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"applicationName":"python","executableName":"python"},"pyml:custom":{"input":[{"name":"pyml_custom.py","templateName":"pyml_custom.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"applicationName":"python","executableName":"python"},"pyml:data_input:read_csv:pandas":{"input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"applicationName":"python","executableName":"python"},"pyml:data_input:train_test_split:sklearn":{"input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"applicationName":"python","executableName":"python"},"pyml:pre_processing:min_max_scaler:sklearn":{"input":[{"name":"pre_processing_min_max_sklearn.py","templateName":"pre_processing_min_max_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"applicationName":"python","executableName":"python"},"pyml:pre_processing:remove_duplicates:pandas":{"input":[{"name":"pre_processing_remove_duplicates_pandas.py","templateName":"pre_processing_remove_duplicates_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"applicationName":"python","executableName":"python"},"pyml:pre_processing:remove_missing:pandas":{"input":[{"name":"pre_processing_remove_missing_pandas.py","templateName":"pre_processing_remove_missing_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"applicationName":"python","executableName":"python"},"pyml:pre_processing:standardization:sklearn":{"input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"applicationName":"python","executableName":"python"},"pyml:model:adaboosted_trees_regression:sklearn":{"input":[{"name":"model_adaboosted_trees_regression_sklearn.py","templateName":"model_adaboosted_trees_regression_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"results":[{"name":"workflow:pyml_predict"}],"applicationName":"python","executableName":"python"},"pyml:model:bagged_trees_regression:sklearn":{"input":[{"name":"model_bagged_trees_regression_sklearn.py","templateName":"model_bagged_trees_regression_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"applicationName":"python","executableName":"python"},"pyml:model:gradboosted_trees_regression:sklearn":{"input":[{"name":"model_gradboosted_trees_regression_sklearn.py","templateName":"model_gradboosted_trees_regression_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"applicationName":"python","executableName":"python"},"pyml:model:extreme_gradboosted_trees_regression:sklearn":{"input":[{"name":"model_extreme_gradboosted_trees_regression_sklearn.py","templateName":"model_extreme_gradboosted_trees_regression_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"applicationName":"python","executableName":"python"},"pyml:model:k_means_clustering:sklearn":{"input":[{"name":"model_k_means_clustering_sklearn.py","templateName":"model_k_means_clustering_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"applicationName":"python","executableName":"python"},"pyml:model:kernel_ridge_regression:sklearn":{"input":[{"name":"model_kernel_ridge_regression_sklearn.py","templateName":"model_kernel_ridge_regression_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"applicationName":"python","executableName":"python"},"pyml:model:lasso_regression:sklearn":{"input":[{"name":"model_lasso_regression_sklearn.py","templateName":"model_lasso_regression_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"applicationName":"python","executableName":"python"},"pyml:model:multilayer_perceptron:sklearn":{"input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"applicationName":"python","executableName":"python"},"pyml:model:random_forest_classification:sklearn":{"input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"applicationName":"python","executableName":"python"},"pyml:model:gradboosted_trees_classification:sklearn":{"input":[{"name":"model_gradboosted_trees_classification_sklearn.py","templateName":"model_gradboosted_trees_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"applicationName":"python","executableName":"python"},"pyml:model:extreme_gradboosted_trees_classification:sklearn":{"input":[{"name":"model_extreme_gradboosted_trees_classification_sklearn.py","templateName":"model_extreme_gradboosted_trees_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"applicationName":"python","executableName":"python"},"pyml:model:random_forest_regression:sklearn":{"input":[{"name":"model_random_forest_regression_sklearn.py","templateName":"model_random_forest_regression_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"applicationName":"python","executableName":"python"},"pyml:model:ridge_regression:sklearn":{"input":[{"name":"model_ridge_regression_sklearn.py","templateName":"model_ridge_regression_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"applicationName":"python","executableName":"python"},"pyml:post_processing:parity_plot:matplotlib":{"input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"applicationName":"python","executableName":"python"},"pyml:post_processing:pca_2d_clusters:matplotlib":{"input":[{"name":"post_processing_pca_2d_clusters_matplotlib.py","templateName":"post_processing_pca_2d_clusters_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"applicationName":"python","executableName":"python"},"pyml:post_processing:roc_curve:sklearn":{"input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"applicationName":"python","executableName":"python"}}}},"shell":{"sh":{"isDefault":true,"monitors":[{"name":"standard_output"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"band_structure"},{"name":"density_of_states"},{"name":"fermi_energy"},{"name":"phonon_dispersions"},{"name":"phonon_dos"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"},{"name":"zero_point_energy"},{"name":"final_structure"},{"name":"magnetic_moments"},{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"flavors":{"hello_world":{"isDefault":true,"input":[{"name":"hello_world.sh"}],"monitors":[{"name":"standard_output"}],"applicationName":"shell","executableName":"sh"},"job_espresso_pw_scf":{"input":[{"name":"job_espresso_pw_scf.sh"}],"monitors":[{"name":"standard_output"}],"applicationName":"shell","executableName":"sh"},"espresso_link_outdir_save":{"input":[{"name":"espresso_link_outdir_save.sh"}],"monitors":[{"name":"standard_output"}],"applicationName":"shell","executableName":"sh"},"espresso_collect_dynmat":{"input":[{"name":"espresso_collect_dynmat.sh"}],"monitors":[{"name":"standard_output"}],"applicationName":"shell","executableName":"sh"},"bash_vasp_prepare_neb_images":{"isMultiMaterial":true,"input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"monitors":[{"name":"standard_output"}],"applicationName":"shell","executableName":"sh"}}}},"vasp":{"vasp":{"isDefault":true,"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"band_structure"},{"name":"density_of_states"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"},{"name":"zero_point_energy"},{"name":"final_structure"},{"name":"magnetic_moments"},{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"flavors":{"vasp":{"isDefault":true,"input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"applicationName":"vasp","executableName":"vasp"},"vasp_symprec":{"input":[{"name":"INCAR","templateName":"INCAR_SYMPREC"},{"name":"KPOINTS"},{"name":"POSCAR"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"applicationName":"vasp","executableName":"vasp"},"vasp_bands":{"input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"applicationName":"vasp","executableName":"vasp"},"vasp_nscf":{"input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"applicationName":"vasp","executableName":"vasp"},"vasp_hse":{"isDefault":false,"input":[{"name":"INCAR","templateName":"INCAR_HSE"},{"name":"KPOINTS"},{"name":"POSCAR"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"applicationName":"vasp","executableName":"vasp"},"vasp_bands_hse":{"isDefault":false,"input":[{"name":"INCAR","templateName":"INCAR_BANDS_HSE"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"applicationName":"vasp","executableName":"vasp"},"vasp_nscf_hse":{"isDefault":false,"input":[{"name":"INCAR","templateName":"INCAR_BANDS_HSE"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"applicationName":"vasp","executableName":"vasp"},"vasp_relax":{"input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"postProcessors":[{"name":"prepare_restart"}],"applicationName":"vasp","executableName":"vasp"},"vasp_vc_relax":{"input":[{"name":"INCAR","templateName":"INCAR_VC_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"postProcessors":[{"name":"prepare_restart"}],"applicationName":"vasp","executableName":"vasp"},"vasp_zpe":{"input":[{"name":"INCAR","templateName":"INCAR_ZPE"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"zero_point_energy"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"applicationName":"vasp","executableName":"vasp"},"vasp_kpt_conv":{"input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"applicationName":"vasp","executableName":"vasp"},"vasp_vc_relax_conv":{"input":[{"name":"INCAR","templateName":"INCAR_VC_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"applicationName":"vasp","executableName":"vasp"},"vasp_neb":{"isMultiMaterial":true,"input":[{"name":"INCAR","templateName":"INCAR_NEB"},{"name":"KPOINTS","templateName":"KPOINTS"}],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"monitors":[{"name":"standard_output"}],"applicationName":"vasp","executableName":"vasp"},"vasp_neb_initial":{"isMultiMaterial":true,"input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"applicationName":"vasp","executableName":"vasp"},"vasp_neb_final":{"isMultiMaterial":true,"input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"applicationName":"vasp","executableName":"vasp"}}}}} diff --git a/dist/js/runtime_data/applications/modelMethodMapByApplication.json b/dist/js/runtime_data/applications/modelMethodMapByApplication.json index 62cd193a..7fc179da 100644 --- a/dist/js/runtime_data/applications/modelMethodMapByApplication.json +++ b/dist/js/runtime_data/applications/modelMethodMapByApplication.json @@ -1 +1 @@ -{"methods":{"espresso":{"6.3":{"GNU":{"pw.x":{"pw_scf":[{"path":"/qm/wf/none/pw/none"},{"path":"/qm/wf/none/smearing/gaussian"},{"defaultPath":"/qm/wf/none/psp/us","regex":"\\/qm\\/wf\\/none\\/psp\\/(nc|nc-fr|us|paw)"},{"path":"/linalg/diag/none/davidson/none"}],"pw_scf_bands_hse":[{"path":"/qm/wf/none/pw/none"},{"path":"/qm/wf/none/smearing/gaussian"},{"defaultPath":"/qm/wf/none/psp/us","regex":"\\/qm\\/wf\\/none\\/psp\\/(nc|nc-fr|us|paw)"},{"path":"/linalg/diag/none/davidson/none"}]}}}},"nwchem":{"7.0.2":{"GNU":{"nwchem":{"nwchem_total_energy":[{"path":"/qm/wf/none/ao/pople?basisSlug=6-31G"}]}}}},"vasp":{"5.4.4":{"GNU":{"vasp":{"vasp":[{"path":"/qm/wf/none/pw/none"},{"path":"/qm/wf/none/psp/paw"},{"path":"/linalg/diag/none/davidson/none"},{"defaultPath":"/qm/wf/none/smearing/gaussian","regex":"\\/qm\\/wf\\/none\\/smearing\\/(fermi-dirac|gaussian|methfessel-paxton)"}]}}}}},"models":{"espresso":{"6.3":{"GNU":{"pw.x":{"pw_esm":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbesol"}],"pw_esm_relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbesol"}],"pw_nscf":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbesol"}],"pw_relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbesol"}],"pw_scf":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbesol"}],"pw_scf_bands_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"pw_vc-relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbesol"}]}}}},"nwchem":{"7.0.2":{"GNU":{"nwchem":{"nwchem_total_energy":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=b3lyp"}]}}}},"vasp":{"5.4.4":{"GNU":{"vasp":{"vasp":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_bands":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_bands_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_kpt_conv":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_ncsf":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb_final":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb_initial":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_nscf_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_vc_relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_vc_relax_conv":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_zpe":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}]}},"Non-collinear":{"vasp":{"vasp":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_bands":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_bands_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_kpt_conv":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_ncsf":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb_final":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb_initial":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_nscf_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_vc_relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_vc_relax_conv":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_zpe":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}]}},"VTST":{"vasp":{"vasp":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_bands":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_bands_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_kpt_conv":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_ncsf":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb_final":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb_initial":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_nscf_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_vc_relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_vc_relax_conv":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_zpe":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}]}}}}}} +{"models":{"espresso":{"6.3":{"GNU":{"pw.x":{"pw_scf":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbesol"}],"pw_scf_bands_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"pw_esm":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbesol"}],"pw_esm_relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbesol"}],"pw_nscf":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbesol"}],"pw_relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbesol"}],"pw_vc-relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbesol"}]}}}},"nwchem":{"7.0.2":{"GNU":{"nwchem":{"nwchem_total_energy":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=b3lyp"}]}}}},"vasp":{"5.4.4":{"GNU":{"vasp":{"vasp":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_bands":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_ncsf":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_bands_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_nscf_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_vc_relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_zpe":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_kpt_conv":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_vc_relax_conv":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb_initial":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb_final":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}]}},"Non-collinear":{"vasp":{"vasp":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_bands":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_ncsf":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_bands_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_nscf_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_vc_relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_zpe":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_kpt_conv":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_vc_relax_conv":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb_initial":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb_final":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}]}},"VTST":{"vasp":{"vasp":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_bands":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_ncsf":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_bands_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_nscf_hse":[{"path":"/pb/qm/dft/ksdft/hybrid?functional=hse06"}],"vasp_relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_vc_relax":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_zpe":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_kpt_conv":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_vc_relax_conv":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb_initial":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}],"vasp_neb_final":[{"path":"/pb/qm/dft/ksdft/lda?functional=pz"},{"path":"/pb/qm/dft/ksdft/gga?functional=pbe"}]}}}}},"methods":{"espresso":{"6.3":{"GNU":{"pw.x":{"pw_scf":[{"path":"/qm/wf/none/pw/none"},{"path":"/qm/wf/none/smearing/gaussian"},{"regex":"\\/qm\\/wf\\/none\\/psp\\/(nc|nc-fr|us|paw)","defaultPath":"/qm/wf/none/psp/us"},{"path":"/linalg/diag/none/davidson/none"}],"pw_scf_bands_hse":[{"path":"/qm/wf/none/pw/none"},{"path":"/qm/wf/none/smearing/gaussian"},{"regex":"\\/qm\\/wf\\/none\\/psp\\/(nc|nc-fr|us|paw)","defaultPath":"/qm/wf/none/psp/us"},{"path":"/linalg/diag/none/davidson/none"}]}}}},"nwchem":{"7.0.2":{"GNU":{"nwchem":{"nwchem_total_energy":[{"path":"/qm/wf/none/ao/pople?basisSlug=6-31G"}]}}}},"vasp":{"5.4.4":{"GNU":{"vasp":{"vasp":[{"path":"/qm/wf/none/pw/none"},{"path":"/qm/wf/none/psp/paw"},{"path":"/linalg/diag/none/davidson/none"},{"regex":"\\/qm\\/wf\\/none\\/smearing\\/(fermi-dirac|gaussian|methfessel-paxton)","defaultPath":"/qm/wf/none/smearing/gaussian"}]}}}}}} diff --git a/dist/js/runtime_data/applications/templatesList.json b/dist/js/runtime_data/applications/templatesList.json index 14077163..5cdaf32e 100644 --- a/dist/js/runtime_data/applications/templatesList.json +++ b/dist/js/runtime_data/applications/templatesList.json @@ -1 +1 @@ -[{"applicationName":"espresso","content":"100 ! Total number of Lanczos steps\n100 ! Number of Lanczos steps to consider\n0. ! E_min (eV)\n5. ! E_max (eV)\n0.2 ! delta\n2000 ! number of energy steps\n1080.04 ! omega\n8 ! nk, number of k points\n2 ! nspin\n0.0 ! energy offset (eV)\n\n! Please see https://gitlab.com/QEF/q-e/-/blob/qe-7.3/GWW/util/abcoeff_to_eps.f90\n","contextProviders":[],"executableName":"abcoeff_to_eps.x","name":"abcoeff_to_eps_simple.in"},{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in"},{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in"},{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_up.dat'{% endraw %}\n spin_component = 1\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_up.in"},{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_dn.dat'{% endraw %}\n spin_component = 2\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_dn.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'cp'\n restart_mode = '{{ input.RESTART_MODE }}'\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}'{% endraw %}\n prefix = 'cp'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n nstep = {{ dynamics.numberOfSteps }}\n iprint = 1\n dt = {{ dynamics.timeStep }}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n nr1b = 20\n nr2b = 20\n nr3b = 20\n/\n&ELECTRONS\n electron_dynamics = 'verlet'\n electron_velocities = 'zero'\n emass = {{ dynamics.electronMass }}\n!! consider the below parameters if orthogonalization fails\n! orthogonalization = 'ortho'\n! ortho_eps = 1d-11\n/\n&IONS\n ion_dynamics = 'verlet'\n ion_velocities = 'zero'\n tempw = {{ dynamics.temperature }}\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"IonDynamicsContextProvider"}],"executableName":"cp.x","name":"cp.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'cp-wf'\n restart_mode = '{{ input.RESTART_MODE }}'\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}'{% endraw %}\n prefix = 'cp_wf'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n nstep = {{ dynamics.numberOfSteps }}\n iprint = 1\n dt = {{ dynamics.timeStep }}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n! TODO: figure out the runtime error when `ecutrho` is set.\n! In the meantime, using Norm-conserving pseudopotentials works.\n! ecutrho = {{ cutoffs.density }}\n nr1b = 20\n nr2b = 20\n nr3b = 20\n/\n&ELECTRONS\n electron_dynamics = 'verlet'\n electron_velocities = 'zero'\n emass = {{ dynamics.electronMass }}\n/\n&IONS\n ion_dynamics = 'verlet'\n ion_velocities = 'zero'\n tempw = {{ dynamics.temperature }}\n/\n&CELL\n/\n&WANNIER\n nit = 60,\n calwf = 3,\n tolw = 1.D-6,\n nsteps = 50,\n adapt = .FALSE.\n wfdt = 2.0D0,\n wf_q = 500.D0,\n wf_friction = 0.3d0,\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"IonDynamicsContextProvider"}],"executableName":"cp.x","name":"cp_wf.in"},{"applicationName":"espresso","content":"&DOS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n/\n","contextProviders":[],"executableName":"dos.x","name":"dos.in"},{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"dynmat.x","name":"dynmat_grid.in"},{"applicationName":"espresso","content":"&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n","contextProviders":[],"executableName":"epsilon.x","name":"epsilon.in"},{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_plasmon_pole.in"},{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_full_frequency.in"},{"applicationName":"espresso","content":"&inputgww\n ggwin%prefix = '__prefix__'\n ggwin%outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n ggwin%n = 97,\n ggwin%n_fit = 120,\n ggwin%max_i = 32,\n ggwin%i_min = 1\n ggwin%i_max = 32\n ggwin%l_truncated_coulomb = .false.\n ggwin%grid_time = 3\n ggwin%grid_freq = 5\n ggwin%second_grid_i = 1\n ggwin%second_grid_n = 10\n ggwin%omega = 20\n ggwin%omega_fit = 20\n ggwin%n_grid_fit = 240\n ggwin%tau = 9.8\n ggwin%n_set_pola = 16\n/\n","contextProviders":[],"executableName":"gww.x","name":"gww_simple.in"},{"applicationName":"espresso","content":"calculation of head\n&inputph\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n trans = .false.\n l_head = .true.\n tr2_ph = 1.d-4\n omega_gauss = 20.0\n n_gauss = 97\n grid_type = 5\n second_grid_i = 1\n second_grid_n = 10\n niter_ph = 1\n nsteps_lanczos = 30\n/\n0.0 0.0 0.0\n","contextProviders":[],"executableName":"head.x","name":"head_simple.in"},{"applicationName":"espresso","content":"&inputhp\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n {%- for d in qgrid.dimensions %}\n nq{{ loop.index }} = {{ d }}\n {%- endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"hp.x","name":"hp.in"},{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in"},{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in"},{"applicationName":"espresso","content":"BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = {{ 2 + (input.INTERMEDIATE_IMAGES.length or neb.nImages) }},\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_first = false %}\n{%- for position in input.FIRST_IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_first = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.FIRST_IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_first %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n{%- for IMAGE in input.INTERMEDIATE_IMAGES %}\nINTERMEDIATE_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_intermediate = false %}\n{%- for position in IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_intermediate = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_intermediate %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n{%- endfor %}\nLAST_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_last = false %}\n{%- for position in input.LAST_IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_last = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.LAST_IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_last %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nEND_POSITIONS\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nEND_ENGINE_INPUT\nEND\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"NEBFormDataManager"},{"name":"QENEBInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"neb.x","name":"neb.in"},{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in"},{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n{% for point in qpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor %}\n{% endfor %}\n","contextProviders":[{"name":"QPathFormDataManager"}],"executableName":"ph.x","name":"ph_path.in"},{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in"},{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_init_qpoints.in"},{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid_restart.in"},{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_single_irr_qpt.in"},{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_density.in"},{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in"},{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_wfn.in"},{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in"},{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n {% for d in qgrid.dimensions -%}\n nqx{{loop.index}} = {{d}}\n {% endfor %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal\n{{ '{{' }} {{ explicitKPath.length }} {% raw %} + KPOINTS|length {% endraw %} {{ '}}' }}\n{% raw %}\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n{% endraw %}\n{% for point in explicitKPath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}0.0000001\n{% endfor %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPathFormDataManager"}],"executableName":"pw.x","name":"pw_scf_bands_hse.in"},{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm.in"},{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm_relax.in"},{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0{% endraw %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_kpt_conv.in"},{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in"},{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_relax.in"},{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = {% if kgrid.dimensions[0]%2 == 0 %}{{kgrid.dimensions[0]/2}}{% else %}{{(kgrid.dimensions[0]+1)/2}}{% endif %}, nqx2 = {% if kgrid.dimensions[1]%2 == 0 %}{{kgrid.dimensions[1]/2}}{% else %}{{(kgrid.dimensions[1]+1)/2}}{% endif %}, nqx3 = {% if kgrid.dimensions[2]%2 == 0 %}{{kgrid.dimensions[2]/2}}{% else %}{{(kgrid.dimensions[2]+1)/2}}{% endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{% if d%2 == 0 %}{{d}} {% else %}{{d+1}} {% endif %}{% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_hse.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'fixed'\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_u -%}\nU {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.hubbardUValue }}\n{% endfor -%}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardUContextManager"}],"executableName":"pw.x","name":"pw_scf_dft_u.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'fixed'\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_u -%}\nU {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.hubbardUValue }}\n{% endfor -%}\n{% for row in hubbard_v -%}\nV {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.atomicSpecies2 }}-{{ row.atomicOrbital2 }} {{ row.siteIndex }} {{ row.siteIndex2 }} {{ row.hubbardVValue }}\n{% endfor -%}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardUContextManager"},{"name":"HubbardVContextManager"}],"executableName":"pw.x","name":"pw_scf_dft_v.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'fixed'\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_j -%}\n{{ row.paramType }} {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.value }}\n{% endfor -%}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardJContextManager"}],"executableName":"pw.x","name":"pw_scf_dft_j.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'fixed'\n lda_plus_u = .true.\n lda_plus_u_kind = 0\n U_projection_type = 'ortho-atomic'\n {%- for row in hubbard_legacy %}\n Hubbard_U({{ row.atomicSpeciesIndex }}) = {{ row.hubbardUValue }}\n {%- endfor %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardContextManagerLegacy"}],"executableName":"pw.x","name":"pw_scf_dft_u_legacy.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_u -%}\nU {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.hubbardUValue }}\n{% endfor -%}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardUContextManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_dft_u_magn.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_u -%}\nU {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.hubbardUValue }}\n{% endfor -%}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardUContextManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_dft_u_soc.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_u -%}\nU {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.hubbardUValue }}\n{% endfor -%}\n{% for row in hubbard_v -%}\nV {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.atomicSpecies2 }}-{{ row.atomicOrbital2 }} {{ row.siteIndex }} {{ row.siteIndex2 }} {{ row.hubbardVValue }}\n{% endfor -%}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardUContextManager"},{"name":"HubbardVContextManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_dft_v_magn.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_j -%}\n{{ row.paramType }} {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.value }}\n{% endfor -%}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardJContextManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_dft_j_magn.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n lda_plus_u = .true.\n lda_plus_u_kind = 0\n U_projection_type = 'ortho-atomic'\n{%- for row in hubbard_legacy %}\n Hubbard_U({{ row.atomicSpeciesIndex }}) = {{ row.hubbardUValue }}\n{%- endfor %}\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardContextManagerLegacy"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_dft_u_magn_legacy.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n lda_plus_u = .true.\n lda_plus_u_kind = 0\n U_projection_type = 'ortho-atomic'\n{%- for row in hubbard_legacy %}\n Hubbard_U({{ row.atomicSpeciesIndex }}) = {{ row.hubbardUValue }}\n{%- endfor %}\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardContextManagerLegacy"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_dft_u_soc_legacy.in"},{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_u -%}\nU {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.hubbardUValue }}\n{% endfor -%}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardUContextManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_nscf_dft_u_magn.in"},{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_u -%}\nU {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.hubbardUValue }}\n{% endfor -%}\n{% for row in hubbard_v -%}\nV {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.atomicSpecies2 }}-{{ row.atomicOrbital2 }} {{ row.siteIndex }} {{ row.siteIndex2 }} {{ row.hubbardVValue }}\n{% endfor -%}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardUContextManager"},{"name":"HubbardVContextManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_nscf_dft_v_magn.in"},{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_j -%}\n{{ row.paramType }} {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.value }}\n{% endfor -%}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardJContextManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_nscf_dft_j_magn.in"},{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n lda_plus_u = .true.\n lda_plus_u_kind = 0\n U_projection_type = 'ortho-atomic'\n {%- for row in hubbard_legacy %}\n Hubbard_U({{ row.atomicSpeciesIndex }}) = {{ row.hubbardUValue }}\n {%- endfor %}\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardContextManagerLegacy"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_nscf_dft_u_magn_legacy.in"},{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_u -%}\nU {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.hubbardUValue }}\n{% endfor -%}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardUContextManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_nscf_dft_u_soc.in"},{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n lda_plus_u = .true.\n lda_plus_u_kind = 0\n U_projection_type = 'ortho-atomic'\n {%- for row in hubbard_legacy %}\n Hubbard_U({{ row.atomicSpeciesIndex }}) = {{ row.hubbardUValue }}\n {%- endfor %}\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardContextManagerLegacy"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_nscf_dft_u_soc_legacy.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_u -%}\nU {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.hubbardUValue }}\n{% endfor -%}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardUContextManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_dft_u_magn.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_u -%}\nU {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.hubbardUValue }}\n{% endfor -%}\n{% for row in hubbard_v -%}\nV {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.atomicSpecies2 }}-{{ row.atomicOrbital2 }} {{ row.siteIndex }} {{ row.siteIndex2 }} {{ row.hubbardVValue }}\n{% endfor -%}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardUContextManager"},{"name":"HubbardVContextManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_dft_v_magn.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_j -%}\n{{ row.paramType }} {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.value }}\n{% endfor -%}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardJContextManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_dft_j_magn.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n lda_plus_u = .true.\n lda_plus_u_kind = 0\n U_projection_type = 'ortho-atomic'\n {%- for row in hubbard_legacy %}\n Hubbard_U({{ row.atomicSpeciesIndex }}) = {{ row.hubbardUValue }}\n {%- endfor %}\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardContextManagerLegacy"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_dft_u_magn_legacy.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\nHUBBARD {ortho-atomic}\n{% for row in hubbard_u -%}\nU {{ row.atomicSpecies }}-{{ row.atomicOrbital }} {{ row.hubbardUValue }}\n{% endfor -%}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardUContextManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_dft_u_soc.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&control\n calculation = 'md'\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n! 1 a.u. = 0.048378 fs, 20 a.u. ~ 1 fs, dt unit is different in pw.x and cp.x\n dt = 20\n nstep = 100\n/\n\n&system\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n nosym = .true.\n/\n\n&electrons\n conv_thr = 1e-8\n/\n\n&ions\n pot_extrapolation = 'second-order'\n wfc_extrapolation = 'second-order'\n ion_temperature = 'initial'\n tempw = 300\n/\n\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\n\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\n\nK_POINTS gamma\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_md.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_magn.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_soc.in"},{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_nscf_magn.in"},{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_nscf_soc.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_magn.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_soc.in"},{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n lda_plus_u = .true.\n lda_plus_u_kind = 0\n U_projection_type = 'ortho-atomic'\n {%- for row in hubbard_legacy %}\n Hubbard_U({{ row.atomicSpeciesIndex }}) = {{ row.hubbardUValue }}\n {%- endfor %}\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"HubbardContextManagerLegacy"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_dft_u_soc_legacy.in"},{"applicationName":"espresso","content":"&inputpw4gww\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n num_nbndv(1) = 16\n num_nbnds = 32\n l_truncated_coulomb = .false.\n numw_prod = 100\n pmat_cutoff = 3d0\n s_self_lanczos = 1d-8\n l_simple = .true.\n/\n","contextProviders":[],"executableName":"pw4gww.x","name":"pw4gww_simple.in"},{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in"},{"applicationName":"espresso","content":"&inputsimple\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n calc_mode = 0\n num_nbndv = 16\n num_val = 16\n num_cond = 24\n s_bands = 0.1\n s_product = 1.0\n nkpoints(1) = 2\n nkpoints(2) = 2\n nkpoints(3) = 2\n w_type = 0\n l_truncated_coulomb = .false.\n numpw = 100\n/\n","contextProviders":[],"executableName":"simple.x","name":"simple.in"},{"applicationName":"espresso","content":"&inputsimple\n simple_in%prefix = '__prefix__'\n simple_in%outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n simple_in%scissor = 0.6\n simple_in%spin_state = 1\n simple_in%h_level = 3\n simple_in%task = 1\n simple_in%lanczos_step = 100\n/\n","contextProviders":[],"executableName":"simple_bse.x","name":"simple_bse.in"},{"applicationName":"espresso","content":"&inputsimpleip\n simpleip_in%prefix = '__prefix__'\n simpleip_in%outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n simpleip_in%interp_grid(1) = 20\n simpleip_in%interp_grid(2) = 20\n simpleip_in%interp_grid(3) = 20\n simpleip_in%fermi_degauss = 0.02205\n simpleip_in%fermi_ngauss = -1\n simpleip_in%drude_degauss = 0.0142\n simpleip_in%wmin = 0.0\n simpleip_in%wmax = 0.735\n simpleip_in%nw = 1000\n simpleip_in%inter_broadening = 0.0142\n simpleip_in%intra_broadening = 0.0142\n simpleip_in%nonlocal_commutator = .false.\n simpleip_in%nonlocal_interpolation = .true.\n/\n","contextProviders":[],"executableName":"simple_ip.x","name":"simple_ip.in"},{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp"},{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"hello_world.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt"},{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n","contextProviders":[],"executableName":"python","name":"requirements_empty.txt"},{"applicationName":"python","content":"# -------------------------------------------------------------------------------\n# This script contains a few helpful commands for basic plotting with matplotlib.\n# The commented out blocks are optional suggestions and included for convenience.\n# -------------------------------------------------------------------------------\nimport matplotlib.pyplot as plt\nimport matplotlib.ticker as ticker\nimport numpy as np\n\n# Plot Settings\n# -------------\nfigure_size = (6.4, 4.8) # width, height [inches]\ndpi = 100 # resolution [dots-per-inch]\nfont_size_title = 16 # font size of title\nfont_size_axis = 12 # font size of axis label\nfont_size_tick = 12 # font size of tick label\nfont_size_legend = 14 # font size of legend\nx_axis_label = None # label for x-axis\ny_axis_label = None # label for y-axis\ntitle = None # figure title\nshow_legend = False # whether to show legend\nsave_name = \"plot.pdf\" # output filename (with suffix), e.g. 'plot.pdf'\nx_view_limits = {\"left\": None, \"right\": None} # view limits for x-axis\ny_view_limits = {\"top\": None, \"bottom\": None} # view limits for y-axis\nx_tick_spacing = None # custom tick spacing for x-axis (optional)\ny_tick_spacing = None # custom tick spacing for y-axis (optional)\nx_tick_labels = None # custom tick labels for x-axis (optional)\ny_tick_labels = None # custom tick labels for y-axis (optional)\n\n\n# Figure & axes objects\n# ---------------------\nfig = plt.figure(figsize=figure_size, dpi=dpi)\nax = fig.add_subplot(111)\n\n# Example plot (REPLACE ACCORDINGLY)\n# ------------\nx = np.linspace(0, 7, num=100)\ny = np.sin(x)\nax.plot(x, y, \"g-\", zorder=3)\n\n\n# Help lines\n# ----------\n# ax.axhline(y=0, color=\"0.25\", linewidth=0.6, zorder=1)\n# ax.axvline(x=0, color=\"0.25\", linewidth=0.6, zorder=1)\n\n\n# View limits\n# -----------\nax.set_xlim(**x_view_limits)\nax.set_ylim(**y_view_limits)\n\n\n# Grid lines\n# ----------\n# grid_style = {\n# \"linestyle\" : \"dotted\",\n# \"linewidth\" : 0.6,\n# \"color\" : \"0.25\",\n# }\n# ax.grid(**grid_style)\n\n# Custom tick spacing\n# -------------------\n# ax.xaxis.set_major_locator(ticker.MultipleLocator(x_tick_spacing))\n# ax.yaxis.set_major_locator(ticker.MultipleLocator(y_tick_spacing))\n\n# Custom tick labels\n# ------------------\nif x_tick_labels is not None:\n ax.set_xticklabels(x_tick_labels, fontdict={\"fontsize\": font_size_tick}, minor=False)\nif y_tick_labels is not None:\n ax.set_yticklabels(y_tick_labels, fontdict={\"fontsize\": font_size_tick}, minor=False)\n\n# Other tick settings\n# -------------------\n# ax.tick_params(axis=\"both\", which=\"major\", labelsize=font_size_tick, direction=\"in\")\n# ax.tick_params(axis=\"x\", which=\"major\", pad=10)\n# ax.tick_params(axis=\"x\", which=\"minor\", bottom=False, top=False)\n\n\n# Axis labels\n# -----------\nif x_axis_label is not None:\n ax.set_xlabel(x_axis_label, size=font_size_axis)\nif y_axis_label is not None:\n ax.set_ylabel(y_axis_label, size=font_size_axis)\n\n# Figure title\n# ------------\nif title is not None:\n ax.set_title(title, fontsize=font_size_title)\n\n# Legend\n# ------\nif show_legend:\n ax.legend(prop={'size': font_size_legend})\n\n# Save figure\n# -----------\nif save_name is not None:\n save_format = save_name.split(\".\")[-1]\n fig.savefig(save_name, format=save_format, bbox_inches=\"tight\")\n","contextProviders":[],"executableName":"python","name":"matplotlib_basic.py"},{"applicationName":"python","content":"# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n{# JOB_WORK_DIR will be initialized at runtime => avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_xml_get_qpt_irr.py"},{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"plot_wavefunction.py"},{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements_plot_wavefunction.txt"},{"applicationName":"python","content":"import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_extract_kpoints.py"},{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"processing_requirements.txt"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"pyml_requirements.txt"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"pyml_settings.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Custom workflow unit template for the Exabyte.io platform #\n# #\n# This file imports a set of workflow-specific context variables #\n# from settings.py. It then uses a context manager to save and #\n# load Python objects. When saved, these objects can then be #\n# loaded either later in the same workflow, or by subsequent #\n# predict jobs. #\n# #\n# Any pickle-able Python object can be saved using #\n# settings.context. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport settings\n\n# The context manager exists to facilitate\n# saving and loading objects across Python units within a workflow.\n\n# To load an object, simply do to \\`context.load(\"name-of-the-saved-object\")\\`\n# To save an object, simply do \\`context.save(\"name-for-the-object\", object_here)\\`\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Do some transformations to the data here\n\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n descriptors = context.load(\"descriptors\")\n\n # Do some predictions or transformation to the data here\n","contextProviders":[],"executableName":"python","name":"pyml_custom.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn MinMax Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it is on interval #\n# [0,1]. It then saves the data for use further down #\n# the road in the workflow, for use in un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the min and max of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor MinMax Scaler\n scaler = sklearn.preprocessing.MinMaxScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_min_max_sklearn.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Pandas Remove Duplicates workflow unit #\n# #\n# This workflow unit drops all duplicate rows, if it is running #\n# in the \"train\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Drop duplicates from the training set\n df = pandas.DataFrame(train_target, columns=[\"target\"])\n df = df.join(pandas.DataFrame(train_descriptors))\n df = df.drop_duplicates()\n train_target = df.pop(\"target\").to_numpy()\n train_target = train_target.reshape(-1, 1)\n train_descriptors = df.to_numpy()\n\n # Drop duplicates from the testing set\n df = pandas.DataFrame(test_target, columns=[\"target\"])\n df = df.join(pandas.DataFrame(test_descriptors))\n df = df.drop_duplicates()\n test_target = df.pop(\"target\").to_numpy()\n test_target = test_target.reshape(-1, 1)\n test_descriptors = df.to_numpy()\n\n # Store the data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[],"executableName":"python","name":"pre_processing_remove_duplicates_pandas.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Pandas Remove Missing Workflow Unit #\n# #\n# This workflow unit allows missing rows and/or columns to be #\n# dropped from the dataset by configuring the `to_drop` #\n# parameter. #\n# #\n# Valid values for `to_drop`: #\n# - \"rows\": rows with missing values will be removed #\n# - \"columns\": columns with missing values will be removed #\n# - \"both\": rows and columns with missing values will be removed #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\n\n# `to_drop` can either be \"rows\" or \"columns\"\n# If it is set to \"rows\" (by default), then all rows with missing values will be dropped.\n# If it is set to \"columns\", then all columns with missing values will be dropped.\n# If it is set to \"both\", then all rows and columns with missing values will be dropped.\nto_drop = \"rows\"\n\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Drop missing from the training set\n df = pandas.DataFrame(train_target, columns=[\"target\"])\n df = df.join(pandas.DataFrame(train_descriptors))\n\n directions = {\n \"rows\": (\"index\",),\n \"columns\": (\"columns\",),\n \"both\": (\"index\", \"columns\"),\n }[to_drop]\n for direction in directions:\n df = df.dropna(direction)\n\n train_target = df.pop(\"target\").to_numpy()\n train_target = train_target.reshape(-1, 1)\n train_descriptors = df.to_numpy()\n\n # Drop missing from the testing set\n df = pandas.DataFrame(test_target, columns=[\"target\"])\n df = df.join(pandas.DataFrame(test_descriptors))\n df = df.dropna()\n test_target = df.pop(\"target\").to_numpy()\n test_target = test_target.reshape(-1, 1)\n test_descriptors = df.to_numpy()\n\n # Store the data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[],"executableName":"python","name":"pre_processing_remove_missing_pandas.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py"},{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a ridge-regression model in Scikit-Learn. #\n# Alpha is taken from Scikit-Learn's defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\nimport sklearn.tree\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Base Estimator\n base_estimator = sklearn.tree.DecisionTreeRegressor(\n criterion=\"mse\",\n splitter=\"best\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=None,\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n ccp_alpha=0.0,\n )\n\n # Initialize the Model\n model = sklearn.ensemble.AdaBoostRegressor(\n n_estimators=50,\n learning_rate=1,\n loss=\"linear\",\n base_estimator=base_estimator,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"adaboosted_trees\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"adaboosted_trees\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_adaboosted_trees_regression_sklearn.py"},{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a bagged trees regression model with #\n# Scikit-Learn. Parameters for the estimator and ensemble are #\n# derived from Scikit-Learn's Defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\nimport sklearn.tree\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Base Estimator\n base_estimator = sklearn.tree.DecisionTreeRegressor(\n criterion=\"mse\",\n splitter=\"best\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=None,\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n ccp_alpha=0.0,\n )\n\n # Initialize the Model\n model = sklearn.ensemble.BaggingRegressor(\n n_estimators=10,\n max_samples=1.0,\n max_features=1.0,\n bootstrap=True,\n bootstrap_features=False,\n oob_score=False,\n verbose=0,\n base_estimator=base_estimator,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"bagged_trees\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"bagged_trees\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_bagged_trees_regression_sklearn.py"},{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for gradient-boosted tree regression with #\n# Scikit-Learn. Parameters for the estimator and ensemble are #\n# derived from Scikit-Learn's Defaults. Note: In the gradient- #\n# boosted trees ensemble used, the weak learners used as #\n# estimators cannot be tuned with the same level of fidelity #\n# allowed in the adaptive-boosted trees ensemble. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.GradientBoostingRegressor(\n loss=\"ls\",\n learning_rate=0.1,\n n_estimators=100,\n subsample=1.0,\n criterion=\"friedman_mse\",\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_depth=3,\n min_impurity_decrease=0.0,\n max_features=None,\n alpha=0.9,\n verbose=0,\n max_leaf_nodes=None,\n validation_fraction=0.1,\n n_iter_no_change=None,\n tol=0.0001,\n ccp_alpha=0.0,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"gradboosted_trees\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"gradboosted_trees\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_gradboosted_trees_regression_sklearn.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow unit for eXtreme Gradient-Boosted trees regression #\n# with XGBoost's wrapper to Scikit-Learn. Parameters for the #\n# estimator and ensemble are derived from sklearn defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). #\n# #\n# When the workflow is run in Predict mode, the model is #\n# loaded, predictions are made, they are un-transformed using #\n# the trained scaler from the training run, and they are #\n# written to a filed named \"predictions.csv\" #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport xgboost\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the model\n model = xgboost.XGBRegressor(booster='gbtree',\n verbosity=1,\n learning_rate=0.3,\n min_split_loss=0,\n max_depth=6,\n min_child_weight=1,\n max_delta_step=0,\n colsample_bytree=1,\n reg_lambda=1,\n reg_alpha=0,\n scale_pos_weight=1,\n objective='reg:squarederror',\n eval_metric='rmse')\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"extreme_gradboosted_tree_regression\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"extreme_gradboosted_tree_regression\")\n\n # Make some predictions and unscale\n predictions = model.predict(descriptors)\n predictions = predictions.reshape(-1, 1)\n target_scaler = context.load(\"target_scaler\")\n\n predictions = target_scaler.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\")\n","contextProviders":[],"executableName":"python","name":"model_extreme_gradboosted_trees_regression_sklearn.py"},{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_k_means_clustering_sklearn.py"},{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a kernelized ridge-regression model with #\n# Scikit-Learn. Model parameters are derived from Scikit- #\n# Learn's defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.kernel_ridge\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.kernel_ridge.KernelRidge(\n alpha=1.0,\n kernel=\"linear\",\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"kernel_ridge\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"kernel_ridge\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_kernel_ridge_regression_sklearn.py"},{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a LASSO-regression model with Scikit- #\n# Learn. Model parameters derived from Scikit-Learn's #\n# Defaults. Alpha has been lowered from the default of 1.0, to #\n# 0.1. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.linear_model\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.linear_model.Lasso(\n alpha=0.1,\n fit_intercept=True,\n normalize=False,\n precompute=False,\n tol=0.0001,\n positive=True,\n selection=\"cyclic\",\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"LASSO\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"LASSO\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_lasso_regression_sklearn.py"},{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py"},{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow unit for a gradient boosted classification model with #\n# Scikit-Learn. Parameters derived from sklearn's defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. #\n# #\n# When the workflow is run in Predict mode, the model is #\n# loaded, predictions are made, they are un-transformed using #\n# the trained scaler from the training run, and they are #\n# written to a filed named \"predictions.csv\" #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the model\n model = sklearn.ensemble.GradientBoostingClassifier(loss='deviance',\n learning_rate=0.1,\n n_estimators=100,\n subsample=1.0,\n criterion='friedman_mse',\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_depth=3,\n min_impurity_decrease=0.0,\n min_impurity_split=None,\n init=None,\n random_state=None,\n max_features=None,\n verbose=0,\n max_leaf_nodes=None,\n warm_start=False,\n validation_fraction=0.1,\n n_iter_no_change=None,\n tol=0.0001,\n ccp_alpha=0.0)\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"gradboosted_trees_classification\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target,\n test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n # Ensure predictions have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"gradboosted_trees_classification\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_gradboosted_trees_classification_sklearn.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow unit for eXtreme Gradient-Boosted trees classification #\n# with XGBoost's wrapper to Scikit-Learn. Parameters for the #\n# estimator and ensemble are derived from sklearn defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. #\n# #\n# When the workflow is run in Predict mode, the model is #\n# loaded, predictions are made, they are un-transformed using #\n# the trained scaler from the training run, and they are #\n# written to a filed named \"predictions.csv\" #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport xgboost\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the model\n model = xgboost.XGBClassifier(booster='gbtree',\n verbosity=1,\n learning_rate=0.3,\n min_split_loss=0,\n max_depth=6,\n min_child_weight=1,\n max_delta_step=0,\n colsample_bytree=1,\n reg_lambda=1,\n reg_alpha=0,\n scale_pos_weight=1,\n objective='binary:logistic',\n eval_metric='logloss',\n use_label_encoder=False)\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"extreme_gradboosted_tree_classification\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target,\n test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n # Ensure predictions have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"extreme_gradboosted_tree_classification\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_extreme_gradboosted_trees_classification_sklearn.py"},{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow for a random forest regression model with Scikit- #\n# Learn. Parameters are derived from Scikit-Learn's defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestRegressor(\n n_estimators=100,\n criterion=\"mse\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n max_samples=None,\n oob_score=False,\n ccp_alpha=0.0,\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_regression_sklearn.py"},{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a ridge regression model with Scikit- #\n# Learn. Alpha is taken from Scikit-Learn's default #\n# parameters. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.linear_model\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.linear_model.Ridge(\n alpha=1.0,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"ridge\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"ridge\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_ridge_regression_sklearn.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_pca_2d_clusters_matplotlib.py"},{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py"},{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh"},{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh"},{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_link_outdir_save.sh"},{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_collect_dynmat.sh"},{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","name":"espresso_xml_get_qpt_irr.py","contextProviders":[],"applicationName":"python","executableName":"python"},{"content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","name":"plot_wavefunction.py","contextProviders":[],"applicationName":"python","executableName":"python"},{"content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","name":"requirements_plot_wavefunction.txt","contextProviders":[],"applicationName":"python","executableName":"python"},{"content":"import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n","name":"espresso_extract_kpoints.py","contextProviders":[],"applicationName":"python","executableName":"python"},{"content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","name":"find_extrema.py","contextProviders":[],"applicationName":"python","executableName":"python"},{"content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","name":"processing_requirements.txt","contextProviders":[],"applicationName":"python","executableName":"python"},{"content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","name":"pyml_requirements.txt","contextProviders":[],"applicationName":"python","executableName":"python"},{"content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","name":"pyml_settings.py","contextProviders":[{"name":"MLSettingsDataManager"}],"applicationName":"python","executableName":"python"},{"content":"# ----------------------------------------------------------------- #\n# #\n# Custom workflow unit template for the Exabyte.io platform #\n# #\n# This file imports a set of workflow-specific context variables #\n# from settings.py. It then uses a context manager to save and #\n# load Python objects. When saved, these objects can then be #\n# loaded either later in the same workflow, or by subsequent #\n# predict jobs. #\n# #\n# Any pickle-able Python object can be saved using #\n# settings.context. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport settings\n\n# The context manager exists to facilitate\n# saving and loading objects across Python units within a workflow.\n\n# To load an object, simply do to \\`context.load(\"name-of-the-saved-object\")\\`\n# To save an object, simply do \\`context.save(\"name-for-the-object\", object_here)\\`\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Do some transformations to the data here\n\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n descriptors = context.load(\"descriptors\")\n\n # Do some predictions or transformation to the data here\n","name":"pyml_custom.py","contextProviders":[],"applicationName":"python","executableName":"python"},{"content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","name":"data_input_read_csv_pandas.py","contextProviders":[],"applicationName":"python","executableName":"python"},{"content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","name":"data_input_train_test_split_sklearn.py","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"applicationName":"python","executableName":"python"},{"content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn MinMax Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it is on interval #\n# [0,1]. It then saves the data for use further down #\n# the road in the workflow, for use in un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the min and max of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor MinMax Scaler\n scaler = sklearn.preprocessing.MinMaxScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","name":"pre_processing_min_max_sklearn.py","contextProviders":[],"applicationName":"python","executableName":"python"},{"content":"# ----------------------------------------------------------------- #\n# #\n# Pandas Remove Duplicates workflow unit #\n# #\n# This workflow unit drops all duplicate rows, if it is running #\n# in the \"train\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Drop duplicates from the training set\n df = pandas.DataFrame(train_target, columns=[\"target\"])\n df = df.join(pandas.DataFrame(train_descriptors))\n df = df.drop_duplicates()\n train_target = df.pop(\"target\").to_numpy()\n train_target = train_target.reshape(-1, 1)\n train_descriptors = df.to_numpy()\n\n # Drop duplicates from the testing set\n df = pandas.DataFrame(test_target, columns=[\"target\"])\n df = df.join(pandas.DataFrame(test_descriptors))\n df = df.drop_duplicates()\n test_target = df.pop(\"target\").to_numpy()\n test_target = test_target.reshape(-1, 1)\n test_descriptors = df.to_numpy()\n\n # Store the data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","name":"pre_processing_remove_duplicates_pandas.py","contextProviders":[],"applicationName":"python","executableName":"python"},{"content":"# ----------------------------------------------------------------- #\n# #\n# Pandas Remove Missing Workflow Unit #\n# #\n# This workflow unit allows missing rows and/or columns to be #\n# dropped from the dataset by configuring the `to_drop` #\n# parameter. #\n# #\n# Valid values for `to_drop`: #\n# - \"rows\": rows with missing values will be removed #\n# - \"columns\": columns with missing values will be removed #\n# - \"both\": rows and columns with missing values will be removed #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\n\n# `to_drop` can either be \"rows\" or \"columns\"\n# If it is set to \"rows\" (by default), then all rows with missing values will be dropped.\n# If it is set to \"columns\", then all columns with missing values will be dropped.\n# If it is set to \"both\", then all rows and columns with missing values will be dropped.\nto_drop = \"rows\"\n\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Drop missing from the training set\n df = pandas.DataFrame(train_target, columns=[\"target\"])\n df = df.join(pandas.DataFrame(train_descriptors))\n\n directions = {\n \"rows\": (\"index\",),\n \"columns\": (\"columns\",),\n \"both\": (\"index\", \"columns\"),\n }[to_drop]\n for direction in directions:\n df = df.dropna(direction)\n\n train_target = df.pop(\"target\").to_numpy()\n train_target = train_target.reshape(-1, 1)\n train_descriptors = df.to_numpy()\n\n # Drop missing from the testing set\n df = pandas.DataFrame(test_target, columns=[\"target\"])\n df = df.join(pandas.DataFrame(test_descriptors))\n df = df.dropna()\n test_target = df.pop(\"target\").to_numpy()\n test_target = test_target.reshape(-1, 1)\n test_descriptors = df.to_numpy()\n\n # Store the data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","name":"pre_processing_remove_missing_pandas.py","contextProviders":[],"applicationName":"python","executableName":"python"},{"content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","name":"pre_processing_standardization_sklearn.py","contextProviders":[],"applicationName":"python","executableName":"python"},{"content":"# ------------------------------------------------------------ #\n# Workflow unit for a ridge-regression model in Scikit-Learn. #\n# Alpha is taken from Scikit-Learn's defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\nimport sklearn.tree\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Base Estimator\n base_estimator = sklearn.tree.DecisionTreeRegressor(\n criterion=\"mse\",\n splitter=\"best\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=None,\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n ccp_alpha=0.0,\n )\n\n # Initialize the Model\n model = sklearn.ensemble.AdaBoostRegressor(\n n_estimators=50,\n learning_rate=1,\n loss=\"linear\",\n base_estimator=base_estimator,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"adaboosted_trees\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"adaboosted_trees\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","name":"model_adaboosted_trees_regression_sklearn.py","contextProviders":[],"applicationName":"python","executableName":"python"},{"content":"# ------------------------------------------------------------ #\n# Workflow unit for a bagged trees regression model with #\n# Scikit-Learn. Parameters for the estimator and ensemble are #\n# derived from Scikit-Learn's Defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\nimport sklearn.tree\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Base Estimator\n base_estimator = sklearn.tree.DecisionTreeRegressor(\n criterion=\"mse\",\n splitter=\"best\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=None,\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n ccp_alpha=0.0,\n )\n\n # Initialize the Model\n model = sklearn.ensemble.BaggingRegressor(\n n_estimators=10,\n max_samples=1.0,\n max_features=1.0,\n bootstrap=True,\n bootstrap_features=False,\n oob_score=False,\n verbose=0,\n base_estimator=base_estimator,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"bagged_trees\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"bagged_trees\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","name":"model_bagged_trees_regression_sklearn.py","contextProviders":[],"applicationName":"python","executableName":"python"},{"content":"# ------------------------------------------------------------ #\n# Workflow unit for gradient-boosted tree regression with #\n# Scikit-Learn. Parameters for the estimator and ensemble are #\n# derived from Scikit-Learn's Defaults. Note: In the gradient- #\n# boosted trees ensemble used, the weak learners used as #\n# estimators cannot be tuned with the same level of fidelity #\n# allowed in the adaptive-boosted trees ensemble. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.GradientBoostingRegressor(\n loss=\"ls\",\n learning_rate=0.1,\n n_estimators=100,\n subsample=1.0,\n criterion=\"friedman_mse\",\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_depth=3,\n min_impurity_decrease=0.0,\n max_features=None,\n alpha=0.9,\n verbose=0,\n max_leaf_nodes=None,\n validation_fraction=0.1,\n n_iter_no_change=None,\n tol=0.0001,\n ccp_alpha=0.0,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"gradboosted_trees\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"gradboosted_trees\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","name":"model_gradboosted_trees_regression_sklearn.py","contextProviders":[],"applicationName":"python","executableName":"python"},{"content":"# ----------------------------------------------------------------- #\n# #\n# Workflow unit for eXtreme Gradient-Boosted trees regression #\n# with XGBoost's wrapper to Scikit-Learn. Parameters for the #\n# estimator and ensemble are derived from sklearn defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). #\n# #\n# When the workflow is run in Predict mode, the model is #\n# loaded, predictions are made, they are un-transformed using #\n# the trained scaler from the training run, and they are #\n# written to a filed named \"predictions.csv\" #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport xgboost\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the model\n model = xgboost.XGBRegressor(booster='gbtree',\n verbosity=1,\n learning_rate=0.3,\n min_split_loss=0,\n max_depth=6,\n min_child_weight=1,\n max_delta_step=0,\n colsample_bytree=1,\n reg_lambda=1,\n reg_alpha=0,\n scale_pos_weight=1,\n objective='reg:squarederror',\n eval_metric='rmse')\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"extreme_gradboosted_tree_regression\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"extreme_gradboosted_tree_regression\")\n\n # Make some predictions and unscale\n predictions = model.predict(descriptors)\n predictions = predictions.reshape(-1, 1)\n target_scaler = context.load(\"target_scaler\")\n\n predictions = target_scaler.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\")\n","name":"model_extreme_gradboosted_trees_regression_sklearn.py","contextProviders":[],"applicationName":"python","executableName":"python"},{"content":"# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","name":"model_k_means_clustering_sklearn.py","contextProviders":[],"applicationName":"python","executableName":"python"},{"content":"# ------------------------------------------------------------ #\n# Workflow unit for a kernelized ridge-regression model with #\n# Scikit-Learn. Model parameters are derived from Scikit- #\n# Learn's defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.kernel_ridge\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.kernel_ridge.KernelRidge(\n alpha=1.0,\n kernel=\"linear\",\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"kernel_ridge\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"kernel_ridge\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","name":"model_kernel_ridge_regression_sklearn.py","contextProviders":[],"applicationName":"python","executableName":"python"},{"content":"# ------------------------------------------------------------ #\n# Workflow unit for a LASSO-regression model with Scikit- #\n# Learn. Model parameters derived from Scikit-Learn's #\n# Defaults. Alpha has been lowered from the default of 1.0, to #\n# 0.1. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.linear_model\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.linear_model.Lasso(\n alpha=0.1,\n fit_intercept=True,\n normalize=False,\n precompute=False,\n tol=0.0001,\n positive=True,\n selection=\"cyclic\",\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"LASSO\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"LASSO\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","name":"model_lasso_regression_sklearn.py","contextProviders":[],"applicationName":"python","executableName":"python"},{"content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","name":"model_mlp_sklearn.py","contextProviders":[],"applicationName":"python","executableName":"python"},{"content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","name":"model_random_forest_classification_sklearn.py","contextProviders":[],"applicationName":"python","executableName":"python"},{"content":"# ----------------------------------------------------------------- #\n# #\n# Workflow unit for a gradient boosted classification model with #\n# Scikit-Learn. Parameters derived from sklearn's defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. #\n# #\n# When the workflow is run in Predict mode, the model is #\n# loaded, predictions are made, they are un-transformed using #\n# the trained scaler from the training run, and they are #\n# written to a filed named \"predictions.csv\" #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the model\n model = sklearn.ensemble.GradientBoostingClassifier(loss='deviance',\n learning_rate=0.1,\n n_estimators=100,\n subsample=1.0,\n criterion='friedman_mse',\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_depth=3,\n min_impurity_decrease=0.0,\n min_impurity_split=None,\n init=None,\n random_state=None,\n max_features=None,\n verbose=0,\n max_leaf_nodes=None,\n warm_start=False,\n validation_fraction=0.1,\n n_iter_no_change=None,\n tol=0.0001,\n ccp_alpha=0.0)\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"gradboosted_trees_classification\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target,\n test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n # Ensure predictions have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"gradboosted_trees_classification\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","name":"model_gradboosted_trees_classification_sklearn.py","contextProviders":[],"applicationName":"python","executableName":"python"},{"content":"# ----------------------------------------------------------------- #\n# #\n# Workflow unit for eXtreme Gradient-Boosted trees classification #\n# with XGBoost's wrapper to Scikit-Learn. Parameters for the #\n# estimator and ensemble are derived from sklearn defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. #\n# #\n# When the workflow is run in Predict mode, the model is #\n# loaded, predictions are made, they are un-transformed using #\n# the trained scaler from the training run, and they are #\n# written to a filed named \"predictions.csv\" #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport xgboost\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the model\n model = xgboost.XGBClassifier(booster='gbtree',\n verbosity=1,\n learning_rate=0.3,\n min_split_loss=0,\n max_depth=6,\n min_child_weight=1,\n max_delta_step=0,\n colsample_bytree=1,\n reg_lambda=1,\n reg_alpha=0,\n scale_pos_weight=1,\n objective='binary:logistic',\n eval_metric='logloss',\n use_label_encoder=False)\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"extreme_gradboosted_tree_classification\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target,\n test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n # Ensure predictions have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"extreme_gradboosted_tree_classification\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","name":"model_extreme_gradboosted_trees_classification_sklearn.py","contextProviders":[],"applicationName":"python","executableName":"python"},{"content":"# ------------------------------------------------------------ #\n# Workflow for a random forest regression model with Scikit- #\n# Learn. Parameters are derived from Scikit-Learn's defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestRegressor(\n n_estimators=100,\n criterion=\"mse\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n max_samples=None,\n oob_score=False,\n ccp_alpha=0.0,\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","name":"model_random_forest_regression_sklearn.py","contextProviders":[],"applicationName":"python","executableName":"python"},{"content":"# ------------------------------------------------------------ #\n# Workflow unit for a ridge regression model with Scikit- #\n# Learn. Alpha is taken from Scikit-Learn's default #\n# parameters. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.linear_model\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.linear_model.Ridge(\n alpha=1.0,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"ridge\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"ridge\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","name":"model_ridge_regression_sklearn.py","contextProviders":[],"applicationName":"python","executableName":"python"},{"content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","name":"post_processing_parity_plot_matplotlib.py","contextProviders":[],"applicationName":"python","executableName":"python"},{"content":"# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","name":"post_processing_pca_2d_clusters_matplotlib.py","contextProviders":[],"applicationName":"python","executableName":"python"},{"content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","name":"post_processing_roc_curve_sklearn.py","contextProviders":[],"applicationName":"python","executableName":"python"},{"content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","name":"hello_world.sh","contextProviders":[],"applicationName":"shell","executableName":"sh"},{"content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","name":"job_espresso_pw_scf.sh","contextProviders":[],"applicationName":"shell","executableName":"sh"},{"content":"{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n","name":"espresso_link_outdir_save.sh","contextProviders":[],"applicationName":"shell","executableName":"sh"},{"content":"{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n","name":"espresso_collect_dynmat.sh","contextProviders":[],"applicationName":"shell","executableName":"sh"},{"content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR <=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema"}],"isDefault":false,"monitors":[],"name":"Set Average ESP Value","operand":"AVG_ESP","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},"espresso/average_electrostatic_potential_via_band_structure.json":{"_id":"09f5f4ff-7dbd-59ae-ad27-5af1bdfc2bd0","application":{"name":"espresso"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure + average ESP","properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"2d360607-c739-54ad-97a0-8a83f0971f2c","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Material Index","next":"9fc7a088-5533-5f70-bb33-f676ec65f565","operand":"MATERIAL_INDEX","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap"}],"isDefault":false,"monitors":[],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Set Valence Band Maximum","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","operand":"VBM","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average_potential","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential"}],"isDefault":false,"monitors":[],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},"espresso/band_gap.json":{"_id":"233bb8cf-3b4a-5378-84d9-a6a95a2ab43d","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Gap","properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16"},"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_gap_hse_dos.json":{"_id":"f1341a29-777d-5ca3-8933-78a5e0d3f6f2","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"hse06","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"hybrid","type":"dft"},"name":"HSE Band Gap","properties":["atomic_forces","band_gaps","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_hse.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_hse","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"f494cdb2-304f-5da2-b979-ce3fbba3a6c4","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = {% if kgrid.dimensions[0]%2 == 0 %}{{kgrid.dimensions[0]/2}}{% else %}{{(kgrid.dimensions[0]+1)/2}}{% endif %}, nqx2 = {% if kgrid.dimensions[1]%2 == 0 %}{{kgrid.dimensions[1]/2}}{% else %}{{(kgrid.dimensions[1]+1)/2}}{% endif %}, nqx3 = {% if kgrid.dimensions[2]%2 == 0 %}{{kgrid.dimensions[2]/2}}{% else %}{{(kgrid.dimensions[2]+1)/2}}{% endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{% if d%2 == 0 %}{{d}} {% else %}{{d+1}} {% endif %}{% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_hse.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_hse","next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"schemaVersion":"2022.8.16"},"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure.json":{"_id":"26d32e68-c2b5-50e9-8933-15f684fcc039","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"d618df45-5af3-5da5-8882-d74a27e00b04","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure_dos.json":{"_id":"fa594399-6b98-5d79-986c-0713601dc06c","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure + Density of States","properties":["atomic_forces","band_gaps","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"d618df45-5af3-5da5-8882-d74a27e00b04","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16"},"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"schemaVersion":"2022.8.16"},"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure_hse.json":{"_id":"ef3089f3-7460-56f2-9aa2-172d5339d3be","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"hse06","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"hybrid","type":"dft"},"name":"Band Structure - HSE","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_bands_hse.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_bands_hse","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"08bd7e4a-2454-53b7-8cc9-9a95975f7e6f","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n {% for d in qgrid.dimensions -%}\n nqx{{loop.index}} = {{d}}\n {% endfor %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal\n{{ '{{' }} {{ explicitKPath.length }} {% raw %} + KPOINTS|length {% endraw %} {{ '}}' }}\n{% raw %}\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n{% endraw %}\n{% for point in explicitKPath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}0.0000001\n{% endfor %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPathFormDataManager"}],"executableName":"pw.x","name":"pw_scf_bands_hse.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_bands_hse","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure_magn.json":{"_id":"4a7dced1-224e-57d7-a616-cbad99062c7b","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Spin magnetic bandstructure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_magn.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_magn","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"c229d2a0-3c19-5f13-b3e0-ceb86cb9fbc1","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_magn.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_magn","next":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_magn.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands_magn","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_magn.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands_magn","next":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_up.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands_spin_up","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_up.dat'{% endraw %}\n spin_component = 1\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_up.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands_spin_up","next":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_dn.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands_spin_dn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_dn.dat'{% endraw %}\n spin_component = 2\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_dn.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands_spin_dn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/band_structure_soc.json":{"_id":"51e6fb82-538a-58ee-8d4e-991c8446f657","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{"searchText":"nc-fr"},"subtype":"nc-fr","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Spin orbit coupling bandstructure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_soc.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_soc","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"74ec024a-f247-5f15-9c21-cc169bcb62c7","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_soc.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_soc","next":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_soc.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands_soc","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_soc.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands_soc","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/dielectric_tensor.json":{"_id":"38340b52-83ad-5862-bc18-c140bdc0cb72","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"nc","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Compute Dielectric Function","properties":["atomic_forces","band_gaps","dielectric_tensor","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"3b230ec3-0791-52f7-a4db-625390b8718f","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"3b230ec3-0791-52f7-a4db-625390b8718f","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Set No-Symmetry Flag","next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","operand":"NO_SYMMETRY_NO_INVERSION","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":true},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16"},"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","next":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"epsilon.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"epsilon.x","input":[{"name":"epsilon.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"dielectric_tensor","postProcessors":[],"preProcessors":[],"results":[{"name":"dielectric_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n","contextProviders":[],"executableName":"epsilon.x","name":"epsilon.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Compute dielectric function","postProcessors":[],"preProcessors":[],"results":[{"name":"dielectric_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/dos.json":{"_id":"2cf317f3-3306-5a96-bc9b-e9103ebcd5be","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Density of States","properties":["atomic_forces","band_gaps","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16"},"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_nscf","next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","postProcessors":[],"preProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"schemaVersion":"2022.8.16"},"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"projwfc","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/electronic_density_mesh.json":{"_id":"e2749c5a-fcd9-589c-819b-8b88c5c90924","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Electronic Density Mesh","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_density.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_density","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_density.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_density","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/esm.json":{"_id":"0de669f6-a455-5dae-b331-19dc85f7090f","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Effective Screening Medium (ESM)","properties":["atomic_forces","charge_density_profile","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_esm","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"2f487bc6-c237-53e4-bad5-be60369662cb","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_esm","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/esm_relax.json":{"_id":"69728792-afeb-50aa-9b4e-6974a90f676a","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Effective Screening Medium (ESM) Relax","properties":["atomic_forces","charge_density_profile","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm_relax.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_esm_relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"a2bec506-1fdd-5125-a787-85f31cde20c1","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm_relax.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_esm_relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/espresso_extract_kpoints.json":{"_id":"a2785cc5-2427-5c7a-b30f-7077475b948c","application":{"name":"espresso"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Extract KPOINTS","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"espresso_extract_kpoints.py"},{"name":"requirements.txt","templateName":"requirements_empty.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"espresso_extract_kpoints","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"a716b133-2d04-50b5-b497-100265e3fa24","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_extract_kpoints.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Extract kpoints","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/espresso_xml_get_qpt_irr.json":{"_id":"e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a","application":{"name":"espresso"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"espresso-xml-get-qpt-irr","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"espresso_xml_get_qpt_irr.py"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"espresso_xml_get_qpt_irr","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n{# JOB_WORK_DIR will be initialized at runtime => avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_xml_get_qpt_irr.py","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"python","next":"assignment","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"assignment","head":false,"input":[{"name":"STDOUT","scope":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219"}],"isDefault":false,"monitors":[],"name":"assignment","operand":"Q_POINTS","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"assignment","value":"json.loads(STDOUT)"}]},"espresso/fixed_cell_relaxation.json":{"_id":"fb75e249-5489-5146-bd8a-786d33330d9c","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Fixed-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_relax.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"c42871f6-ab79-5987-b228-c3bd80f16ffd","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_relax.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/gw_band_structure_band_gap_full_frequency.json":{"_id":"46bcdcc8-628e-518e-b8c3-9bf38d7a2aef","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{"searchText":".*dojo-oncv.*"},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Full Frequency GW Band Structure + Band Gap","properties":["atomic_forces","band_gaps","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"gw.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_full_frequency.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"gw_bands_full_frequency","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16"},"flowchartId":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_full_frequency.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"gw_bands_full_frequency","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/gw_band_structure_band_gap_plasmon_pole.json":{"_id":"72b79a87-8eef-5fe2-9d6c-6c9c256dd56c","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{"searchText":".*dojo-oncv.*"},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Plasmon-Pole GW Band Structure + Band Gap","properties":["atomic_forces","band_gaps","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"gw.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_plasmon_pole.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"gw_bands_plasmon_pole","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16"},"flowchartId":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_plasmon_pole.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"gw_bands_plasmon_pole","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/kpoint_convergence.json":{"_id":"ff6a8fbc-2202-5786-9a26-67c843417d0b","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"K-point Convergence","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"init-tolerance","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Init tolerance","next":"init-increment","operand":"TOL","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0.00001},{"flowchartId":"init-increment","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init increment","next":"init-result","operand":"INC","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"flowchartId":"init-result","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init result","next":"init-parameter","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0},{"flowchartId":"init-parameter","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init parameter","next":"pwscf-kpoint-convergence","operand":"PARAMETER","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_kpt_conv.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_kpt_conv","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"pwscf-kpoint-convergence","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0{% endraw %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_kpt_conv.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_kpt_conv","next":"store-result","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"store-result","head":false,"input":[{"name":"total_energy","scope":"pwscf-kpoint-convergence"}],"isDefault":false,"monitors":[],"name":"store result","next":"check-convergence","operand":"RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"else":"update-result","flowchartId":"check-convergence","head":false,"input":[],"isDefault":false,"maxOccurrences":50,"monitors":[],"name":"check convergence","next":"update-result","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","status":"idle","statusTrack":[],"tags":[],"then":"convergence-is-reached","type":"condition"},{"flowchartId":"update-result","head":false,"input":[{"name":"RESULT","scope":"global"}],"isDefault":false,"monitors":[],"name":"update result","next":"increment-parameter","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"RESULT"},{"flowchartId":"increment-parameter","head":false,"input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"isDefault":false,"monitors":[],"name":"increment parameter","next":"pwscf-kpoint-convergence","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER+INC"},{"flowchartId":"convergence-is-reached","head":false,"input":[{"name":"PARAMETER","scope":"global"}],"isDefault":false,"monitors":[],"name":"exit","operand":"PARAMETER","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER"}]},"espresso/neb.json":{"_id":"c9034468-df28-5357-8912-02226f919042","application":{"name":"espresso"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Nudged Elastic Band (NEB)","properties":["reaction_energy_barrier","reaction_energy_profile"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"neb.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"neb.x","input":[{"name":"neb.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"neb","postProcessors":[],"preProcessors":[],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"9f273ca0-d240-5b1f-89a9-64dd579304ac","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = {{ 2 + (input.INTERMEDIATE_IMAGES.length or neb.nImages) }},\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_first = false %}\n{%- for position in input.FIRST_IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_first = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.FIRST_IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_first %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n{%- for IMAGE in input.INTERMEDIATE_IMAGES %}\nINTERMEDIATE_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_intermediate = false %}\n{%- for position in IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_intermediate = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_intermediate %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n{%- endfor %}\nLAST_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_last = false %}\n{%- for position in input.LAST_IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_last = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.LAST_IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_last %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nEND_POSITIONS\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nEND_ENGINE_INPUT\nEND\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"NEBFormDataManager"},{"name":"QENEBInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"neb.x","name":"neb.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"neb","postProcessors":[],"preProcessors":[],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/ph_init_qpoints.json":{"_id":"2f017bcb-f4ba-55b8-b939-1f780679a88e","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"ph-init-qpoints","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_init_qpoints.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_init_qpoints","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"b8ea6a33-38f3-5434-b17e-b5eae8fff9fc","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_init_qpoints.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_init_qpoints","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/ph_single_irr_qpt.json":{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"ph-single-irr-qpt","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_single_irr_qpt.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_single_irr_qpt","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"8db9af08-d935-57a0-a824-e7db6d936de8","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_single_irr_qpt.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_single_irr_qpt","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/phonon_dispersions.json":{"_id":"bfb69b48-8fbf-5a0d-8949-448f20754766","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Phonon Dispersions","properties":["atomic_forces","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"13bcafce-56ef-5b47-b079-317495eb6933","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16"},"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","next":"a7fded20-889b-54fc-bbb0-456e82689ab1","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"schemaVersion":"2022.8.16"},"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/phonon_dos.json":{"_id":"2232051b-9f2a-5a48-9b4d-6231eb6e8297","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Phonon Density of States","properties":["atomic_forces","fermi_energy","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"13bcafce-56ef-5b47-b079-317495eb6933","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16"},"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","next":"8fe6a24b-c994-55a2-a448-88657292e8c2","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16"},"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/phonon_dos_dispersion.json":{"_id":"291d25cd-378a-5be7-9d85-c8013a4b165b","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Phonon Density of States + Dispersions","properties":["atomic_forces","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"13bcafce-56ef-5b47-b079-317495eb6933","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16"},"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","next":"8fe6a24b-c994-55a2-a448-88657292e8c2","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16"},"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","next":"a7fded20-889b-54fc-bbb0-456e82689ab1","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"schemaVersion":"2022.8.16"},"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/phonon_reduce.json":{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"reduce","properties":["phonon_dispersions","phonon_dos"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid_restart.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid_restart","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb206177-a4af-599a-81ba-6c88d24253b6","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid_restart.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid_restart","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","next":"8fe6a24b-c994-55a2-a448-88657292e8c2","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16"},"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","next":"a7fded20-889b-54fc-bbb0-456e82689ab1","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"schemaVersion":"2022.8.16"},"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/plot_wavefunction.json":{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","application":{"name":"espresso"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Plot Wavefunction","properties":["file_content"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"plot_wavefunction","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"57fca898-8e8b-5ef2-81a5-9d2b612bc18d","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"plot WFN","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/post_processor.json":{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","application":{"name":"espresso"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"post-processor","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_collect_dynmat.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"espresso_collect_dynmat","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_collect_dynmat.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/pre_processor.json":{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","application":{"name":"espresso"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"pre-processor","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_link_outdir_save.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"espresso_link_outdir_save","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_link_outdir_save.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/pw_scf.json":{"_id":"f52b8039-83d0-5485-a1f1-0bc37cb01ed3","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"pw-scf","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/recalculate_bands.json":{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Recalculate Bands","properties":["band_structure"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/surface_energy.json":{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Surface Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"e463ef46-a36e-5168-87dd-e21eb980dfb8","head":true,"input":[{"endpoint":"materials","endpoint_options":{"params":{"projection":"{}","query":"{'_id': MATERIAL_ID}"}},"name":"DATA","type":"api"}],"isDefault":false,"monitors":[],"name":"io-slab","next":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"api","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"flowchartId":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","head":false,"input":[{"name":"DATA","scope":"e463ef46-a36e-5168-87dd-e21eb980dfb8"}],"isDefault":false,"monitors":[],"name":"slab","next":"44263820-0c80-5bd1-b854-9da8d198eac1","operand":"SLAB","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"DATA[0]"},{"flowchartId":"44263820-0c80-5bd1-b854-9da8d198eac1","head":false,"input":[{"endpoint":"materials","endpoint_options":{"params":{"projection":"{}","query":"{'_id': SLAB.metadata.bulkId}"}},"name":"DATA","type":"api"}],"isDefault":false,"monitors":[],"name":"io-bulk","next":"b70656f1-a394-57f4-b4de-00096969df4b","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"api","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"flowchartId":"b70656f1-a394-57f4-b4de-00096969df4b","head":false,"input":[{"name":"DATA","scope":"44263820-0c80-5bd1-b854-9da8d198eac1"}],"isDefault":false,"monitors":[],"name":"bulk","next":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","operand":"BULK","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"DATA[0] if DATA else None"},{"errorMessage":"Bulk material does not exist!","flowchartId":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","head":false,"isDefault":false,"monitors":[],"name":"assert-bulk","next":"490635e0-c593-5809-9eb2-c794b96cfed1","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"BULK != None","status":"idle","statusTrack":[],"tags":[],"type":"assertion"},{"flowchartId":"490635e0-c593-5809-9eb2-c794b96cfed1","head":false,"input":[{"endpoint":"refined-properties","endpoint_options":{"params":{"projection":"{'sort': {'precision.value': -1}, 'limit': 1}","query":"{ 'exabyteId': BULK.exabyteId, 'data.name': 'total_energy', 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} }"}},"name":"DATA","type":"api"}],"isDefault":false,"monitors":[],"name":"io-e-bulk","next":"bbe13b97-4243-5a85-8f61-a279d0b797aa","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"api","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"flowchartId":"bbe13b97-4243-5a85-8f61-a279d0b797aa","head":false,"input":[{"name":"DATA","scope":"490635e0-c593-5809-9eb2-c794b96cfed1"}],"isDefault":false,"monitors":[],"name":"e-bulk","next":"a06c9f43-7670-5fd0-ac42-7028a472235a","operand":"E_BULK","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"DATA[0].data.value if DATA else None"},{"errorMessage":"E_BULK does not exist!","flowchartId":"a06c9f43-7670-5fd0-ac42-7028a472235a","head":false,"isDefault":false,"monitors":[],"name":"assert-e-bulk","next":"cdf210be-26ed-585a-b4ac-d55795ba2975","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"E_BULK != None","status":"idle","statusTrack":[],"tags":[],"type":"assertion"},{"flowchartId":"cdf210be-26ed-585a-b4ac-d55795ba2975","head":false,"input":[],"isDefault":false,"monitors":[],"name":"surface","next":"ffa8e43d-096a-555b-b8d0-6d283365ef47","operand":"A","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))"},{"flowchartId":"ffa8e43d-096a-555b-b8d0-6d283365ef47","head":false,"input":[],"isDefault":false,"monitors":[],"name":"n-bulk","next":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","operand":"N_BULK","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"len(BULK.basis.elements)"},{"flowchartId":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","head":false,"input":[],"isDefault":false,"monitors":[],"name":"n-slab","next":"9fc7a088-5533-5f70-bb33-f676ec65f565","operand":"N_SLAB","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"len(SLAB.basis.elements)"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"fcd88119-817c-5ac1-a430-ba892ac743eb","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"fcd88119-817c-5ac1-a430-ba892ac743eb","head":false,"input":[{"name":"total_energy","scope":"9fc7a088-5533-5f70-bb33-f676ec65f565"}],"isDefault":false,"monitors":[],"name":"e-slab","next":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","operand":"E_SLAB","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"flowchartId":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","head":false,"input":[],"isDefault":false,"monitors":[],"name":"surface-energy","operand":"SURFACE_ENERGY","postProcessors":[],"preProcessors":[],"results":[{"name":"surface_energy"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))"}]},"espresso/total_energy.json":{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Total Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","tags":["default"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/valence_band_offset_calc_from_previous_esp_vbm.json":{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","application":{"name":"espresso"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Calculate VBO","properties":["valence_band_offset"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Difference of valence band maxima","next":"2626f7bb-d392-5fd4-ab71-329b508de347","operand":"VBM_DIFF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"VBM_LEFT - VBM_RIGHT"},{"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Difference of macroscopically averaged ESP in bulk","next":"b7307787-53e2-599b-ad12-d627b04074b4","operand":"AVG_ESP_DIFF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]"},{"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Lineup of macroscopically averaged ESP in interface","next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","operand":"ESP_LINEUP","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])"},{"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Valence Band Offset","operand":"VALENCE_BAND_OFFSET","postProcessors":[],"preProcessors":[],"results":[{"name":"valence_band_offset"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))"}]},"espresso/variable_cell_relaxation.json":{"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Variable-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","systemName":"espresso-variable-cell-relaxation","tags":["variable-cell_relaxation"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/wavefunction_amplitude.json":{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Wavefunction Amplitude","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"schemaVersion":"2022.8.16","tags":["wfn","wfn_plot"],"units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-scf","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"extract-band-energies","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"band_structure"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"extract-band-energies","head":false,"input":[{"name":"band_structure","scope":"pw-scf"}],"isDefault":false,"monitors":[],"name":"Extract Band Energies","next":"indices-below-fermi","operand":"band_energies","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]"},{"flowchartId":"indices-below-fermi","head":false,"input":[{"name":"fermi_energy","scope":"pw-scf"}],"isDefault":false,"monitors":[],"name":"Find Indices Below Fermi","next":"8771dc7f-878e-5f13-a840-a3a416854f1e","operand":"indices_below_fermi","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]"},{"flowchartId":"8771dc7f-878e-5f13-a840-a3a416854f1e","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Store Band Below EF","next":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","operand":"KBAND_VALUE_BELOW_EF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1"},{"flowchartId":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Select Band","next":"pp-wfn","operand":"KBAND_VALUE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"KBAND_VALUE_BELOW_EF"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_wfn","postProcessors":[],"preProcessors":[],"results":[{"name":"wavefunction_amplitude"}],"schemaVersion":"2022.8.16"},"flowchartId":"pp-wfn","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_wfn.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_wfn","postProcessors":[],"preProcessors":[],"results":[{"name":"wavefunction_amplitude"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"espresso/zero_point_energy.json":{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","application":{"name":"espresso"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Zero Point Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"107595d1-490f-53a2-8432-7f8a12f14d96","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_gamma","postProcessors":[],"preProcessors":[],"results":[{"name":"zero_point_energy"}],"schemaVersion":"2022.8.16"},"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_zpe","postProcessors":[],"preProcessors":[],"results":[{"name":"zero_point_energy"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"nwchem/total_energy.json":{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","application":{"name":"nwchem"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"pople","type":"localorbital"},"subtype":"gga","type":"dft"},"name":"Total Energy","properties":["total_energy","total_energy_contributions"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"nwchem","schemaVersion":"2022.8.16","shortName":"nwchem","summary":"NWChem","version":"7.0.2"},"context":[],"executable":{"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem","postProcessors":[{"name":"error_handler"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"schemaVersion":"2022.8.16"},"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"python/ml/classification_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"name":"python"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:random_forest_classification:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:roc_curve:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ROC Curve Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]},"python/ml/clustering_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"name":"python"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_k_means_clustering_sklearn.py","templateName":"model_k_means_clustering_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:k_means_clustering:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_k_means_clustering_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"9c95c27b-c8bd-5e8b-8829-d354611decef","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_pca_2d_clusters_matplotlib.py","templateName":"post_processing_pca_2d_clusters_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:pca_2d_clusters:matplotlib","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"9c95c27b-c8bd-5e8b-8829-d354611decef","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_pca_2d_clusters_matplotlib.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"2D PCA Clusters Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"},{"name":"file_content"},{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]},"python/ml/regression_tail.json":{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"name":"python"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:multilayer_perceptron:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:parity_plot:matplotlib","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Parity Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]},"python/ml/train_head.json":{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"name":"python"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"schemaVersion":"2022.8.16","units":[{"flowchartId":"head-set-predict-status","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Dataset","next":"head-branch-on-predict-status","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"isDefault":false,"maxOccurrences":100,"monitors":[],"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"flowchartId":"end-of-ml-train-head","head":false,"input":[],"isDefault":false,"monitors":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},"python/python_script.json":{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","application":{"name":"python"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Python Script","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"shell/batch_espresso_pwscf.json":{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","application":{"name":"shell"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Batch Job (Espresso PWSCF)","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"job_espresso_pw_scf","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"shell/hello_world.json":{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","application":{"name":"shell"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Hello World","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/band_gap.json":{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","application":{"name":"vasp"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Gap","properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"f0d65517-9592-5bc8-948e-a0851a766cbb","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"schemaVersion":"2022.8.16"},"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/band_structure.json":{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","application":{"name":"vasp"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/band_structure_dos.json":{"_id":"d38fea11-9781-5151-8dae-d705381498be","application":{"name":"vasp"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure + Density of States","properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/dos.json":{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","application":{"name":"vasp"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Density of States","properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/fixed_cell_relaxation.json":{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","application":{"name":"vasp"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Fixed-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","postProcessors":[{"name":"prepare_restart"}],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","postProcessors":[{"name":"prepare_restart"}],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/initial_final_total_energies.json":{"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","application":{"name":"vasp"},"compute":{"arguments":{"nband":1,"ndiag":1,"nimage":1,"npools":1,"ntg":1},"cluster":{"fqdn":""},"isRestartable":true,"nodes":1,"notify":"n","ppn":1,"queue":"D","timeLimit":"01:00:00","timeLimitType":"per single attempt"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Initial/Final Total Energies","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","next":"e65a17ce-10c8-5710-ad4d-fb3d42434091","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/kpoint_convergence.json":{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","application":{"name":"vasp"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"K-point Convergence","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"init-tolerance","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Init tolerance","next":"init-increment","operand":"TOL","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0.00001},{"flowchartId":"init-increment","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init increment","next":"init-result","operand":"INC","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"flowchartId":"init-result","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init result","next":"init-parameter","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0},{"flowchartId":"init-parameter","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init parameter","next":"vasp-kpoint-convergence","operand":"PARAMETER","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"vasp-kpoint-convergence","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","next":"store-result","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"store-result","head":false,"input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"isDefault":false,"monitors":[],"name":"store result","next":"check-convergence","operand":"RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"else":"update-result","flowchartId":"check-convergence","head":false,"input":[],"isDefault":false,"maxOccurrences":50,"monitors":[],"name":"check convergence","next":"update-result","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","status":"idle","statusTrack":[],"tags":[],"then":"convergence-is-reached","type":"condition"},{"flowchartId":"update-result","head":false,"input":[{"name":"RESULT","scope":"global"}],"isDefault":false,"monitors":[],"name":"update result","next":"increment-parameter","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"RESULT"},{"flowchartId":"increment-parameter","head":false,"input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"isDefault":false,"monitors":[],"name":"increment parameter","next":"vasp-kpoint-convergence","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER+INC"},{"flowchartId":"convergence-is-reached","head":false,"input":[{"name":"PARAMETER","scope":"global"}],"isDefault":false,"monitors":[],"name":"exit","operand":"PARAMETER","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER"}]},"vasp/neb_subworkflow.json":{"_id":"e6215fb9-e60c-541b-b73e-b077d64b3a95","application":{"name":"vasp"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Nudged Elastic Band (NEB)","properties":["reaction_energy_barrier","reaction_energy_profile"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB"},{"name":"KPOINTS","templateName":"KPOINTS"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"vasp_neb","postProcessors":[],"preProcessors":[],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"9a1660ab-8067-5fad-9fb8-7c039f634636","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISTART = 0\nIBRION = 1\nEDIFFG = -0.001\nENCUT = 500\nNELM = 100\nNSW = 100\nIMAGES = {{ input.INTERMEDIATE_IMAGES.length or neb.nImages }}\nSPRING = -5\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"vasp_neb","postProcessors":[],"preProcessors":[],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},"vasp/prepare_images.json":{"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","application":{"name":"vasp"},"isDraft":false,"isMultiMaterial":true,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Prepare Directories","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bash_vasp_prepare_neb_images","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR <=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Find Extrema", "next": "8fce780b-5555-5b73-b3d1-1bb24a4c759d", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "flowchartId": "8fce780b-5555-5b73-b3d1-1bb24a4c759d", "head": false, "input": [{ "name": "STDOUT", "scope": "python-find-extrema" }], "isDefault": false, "monitors": [], "name": "Set Average ESP Value", "operand": "AVG_ESP", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "json.loads(STDOUT)['minima']" }] }, "espresso/average_electrostatic_potential_via_band_structure.json": { "_id": "09f5f4ff-7dbd-59ae-ad27-5af1bdfc2bd0", "application": { "name": "espresso" }, "isDraft": false, "isMultiMaterial": true, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Band Structure + average ESP", "properties": ["atomic_forces", "average_potential_profile", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "flowchartId": "2d360607-c739-54ad-97a0-8a83f0971f2c", "head": true, "input": [], "isDefault": false, "monitors": [], "name": "Set Material Index", "next": "9fc7a088-5533-5f70-bb33-f676ec65f565", "operand": "MATERIAL_INDEX", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": 0 }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf.in" }], "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16" }, "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_scf.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "next": "pw-bands-calculate-band-gap", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_bands.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pw_bands", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_structure" }], "schemaVersion": "2022.8.16" }, "flowchartId": "pw-bands-calculate-band-gap", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_bands.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pw_bands", "next": "a667d9fd-35d5-5897-be0e-fa0247233649", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_gaps" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "flowchartId": "a667d9fd-35d5-5897-be0e-fa0247233649", "head": false, "input": [{ "name": "band_gaps", "scope": "pw-bands-calculate-band-gap" }], "isDefault": false, "monitors": [], "name": "Select indirect band gap", "next": "08819369-b541-5b51-8a40-0ee135039482", "operand": "BAND_GAP_INDIRECT", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]" }, { "flowchartId": "08819369-b541-5b51-8a40-0ee135039482", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "Set Valence Band Maximum", "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "operand": "VBM", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "BAND_GAP_INDIRECT['eigenvalueValence']" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "bands.x", "input": [{ "name": "bands.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", "contextProviders": [], "executableName": "bands.x", "name": "bands.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands", "next": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pp.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pp.x", "input": [{ "name": "pp_electrostatic_potential.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pp_electrostatic_potential", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", "contextProviders": [], "executableName": "pp.x", "name": "pp_electrostatic_potential.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Electrostatic Potential (ESP)", "next": "average-electrostatic-potential", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "average.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "average.x", "input": [{ "name": "average.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "average_potential", "postProcessors": [], "preProcessors": [], "results": [{ "name": "average_potential_profile" }], "schemaVersion": "2022.8.16" }, "flowchartId": "average-electrostatic-potential", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", "contextProviders": [], "executableName": "average.x", "name": "average.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "average ESP", "next": "c6c11873-91d7-5422-8302-3dcc1ce971e9", "postProcessors": [], "preProcessors": [], "results": [{ "name": "average_potential_profile" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "flowchartId": "c6c11873-91d7-5422-8302-3dcc1ce971e9", "head": false, "input": [{ "name": "average_potential_profile", "scope": "average-electrostatic-potential" }], "isDefault": false, "monitors": [], "name": "Set Macroscopically Averaged ESP Data", "operand": "array_from_context", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "average_potential_profile['yDataSeries'][1]" }] }, "espresso/band_gap.json": { "_id": "233bb8cf-3b4a-5378-84d9-a6a95a2ab43d", "application": { "name": "espresso" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Band Gap", "properties": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf.in" }], "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16" }, "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_scf.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "next": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_nscf.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pw_nscf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "fermi_energy" }, { "name": "band_gaps" }], "schemaVersion": "2022.8.16" }, "flowchartId": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_nscf.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pw_nscf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "fermi_energy" }, { "name": "band_gaps" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "espresso/band_gap_hse_dos.json": { "_id": "f1341a29-777d-5ca3-8933-78a5e0d3f6f2", "application": { "name": "espresso" }, "isDraft": false, "model": { "functional": "hse06", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "hybrid", "type": "dft" }, "name": "HSE Band Gap", "properties": ["atomic_forces", "band_gaps", "density_of_states", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_hse.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf_hse", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "band_gaps" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16" }, "flowchartId": "f494cdb2-304f-5da2-b979-ce3fbba3a6c4", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = {% if kgrid.dimensions[0]%2 == 0 %}{{kgrid.dimensions[0]/2}}{% else %}{{(kgrid.dimensions[0]+1)/2}}{% endif %}, nqx2 = {% if kgrid.dimensions[1]%2 == 0 %}{{kgrid.dimensions[1]/2}}{% else %}{{(kgrid.dimensions[1]+1)/2}}{% endif %}, nqx3 = {% if kgrid.dimensions[2]%2 == 0 %}{{kgrid.dimensions[2]/2}}{% else %}{{(kgrid.dimensions[2]+1)/2}}{% endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{% if d%2 == 0 %}{{d}} {% else %}{{d+1}} {% endif %}{% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_scf_hse.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf_hse", "next": "3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "band_gaps" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "projwfc.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "projwfc.x", "input": [{ "name": "projwfc.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "projwfc", "postProcessors": [], "preProcessors": [], "results": [{ "name": "density_of_states" }], "schemaVersion": "2022.8.16" }, "flowchartId": "3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n", "contextProviders": [], "executableName": "projwfc.x", "name": "projwfc.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "projwfc", "postProcessors": [], "preProcessors": [], "results": [{ "name": "density_of_states" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "espresso/band_structure.json": { "_id": "26d32e68-c2b5-50e9-8933-15f684fcc039", "application": { "name": "espresso" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Band Structure", "properties": ["atomic_forces", "band_structure", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf.in" }], "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16" }, "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_scf.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "next": "d618df45-5af3-5da5-8882-d74a27e00b04", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_bands.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pw_bands", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_structure" }], "schemaVersion": "2022.8.16" }, "flowchartId": "d618df45-5af3-5da5-8882-d74a27e00b04", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_bands.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pw_bands", "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_structure" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "bands.x", "input": [{ "name": "bands.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", "contextProviders": [], "executableName": "bands.x", "name": "bands.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "espresso/band_structure_dos.json": { "_id": "fa594399-6b98-5d79-986c-0713601dc06c", "application": { "name": "espresso" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Band Structure + Density of States", "properties": ["atomic_forces", "band_gaps", "band_structure", "density_of_states", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf.in" }], "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16" }, "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_scf.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "next": "d618df45-5af3-5da5-8882-d74a27e00b04", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_bands.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pw_bands", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_structure" }], "schemaVersion": "2022.8.16" }, "flowchartId": "d618df45-5af3-5da5-8882-d74a27e00b04", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_bands.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pw_bands", "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_structure" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "bands.x", "input": [{ "name": "bands.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", "contextProviders": [], "executableName": "bands.x", "name": "bands.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands", "next": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_nscf.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pw_nscf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "fermi_energy" }, { "name": "band_gaps" }], "schemaVersion": "2022.8.16" }, "flowchartId": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_nscf.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pw_nscf", "next": "3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651", "postProcessors": [], "preProcessors": [], "results": [{ "name": "fermi_energy" }, { "name": "band_gaps" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "projwfc.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "projwfc.x", "input": [{ "name": "projwfc.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "projwfc", "postProcessors": [], "preProcessors": [], "results": [{ "name": "density_of_states" }], "schemaVersion": "2022.8.16" }, "flowchartId": "3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n", "contextProviders": [], "executableName": "projwfc.x", "name": "projwfc.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "projwfc", "postProcessors": [], "preProcessors": [], "results": [{ "name": "density_of_states" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "espresso/band_structure_hse.json": { "_id": "ef3089f3-7460-56f2-9aa2-172d5339d3be", "application": { "name": "espresso" }, "isDraft": false, "model": { "functional": "hse06", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "hybrid", "type": "dft" }, "name": "Band Structure - HSE", "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_bands_hse.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf_bands_hse", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "schemaVersion": "2022.8.16" }, "flowchartId": "08bd7e4a-2454-53b7-8cc9-9a95975f7e6f", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n {% for d in qgrid.dimensions -%}\n nqx{{loop.index}} = {{d}}\n {% endfor %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal\n{{ '{{' }} {{ explicitKPath.length }} {% raw %} + KPOINTS|length {% endraw %} {{ '}}' }}\n{% raw %}\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n{% endraw %}\n{% for point in explicitKPath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}0.0000001\n{% endfor %}\n", "contextProviders": [{ "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "QGridFormDataManager" }, { "name": "ExplicitKPathFormDataManager" }], "executableName": "pw.x", "name": "pw_scf_bands_hse.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf_bands_hse", "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "bands.x", "input": [{ "name": "bands.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", "contextProviders": [], "executableName": "bands.x", "name": "bands.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "espresso/band_structure_magn.json": { "_id": "4a7dced1-224e-57d7-a616-cbad99062c7b", "application": { "name": "espresso" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Spin magnetic bandstructure", "properties": ["atomic_forces", "band_structure", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_magn.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf_magn", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16" }, "flowchartId": "c229d2a0-3c19-5f13-b3e0-ceb86cb9fbc1", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "CollinearMagnetizationDataManager" }], "executableName": "pw.x", "name": "pw_scf_magn.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf_magn", "next": "ea06c333-0cc7-51d4-bd98-cc53fa0844d1", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_bands_magn.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pw_bands_magn", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_structure" }], "schemaVersion": "2022.8.16" }, "flowchartId": "ea06c333-0cc7-51d4-bd98-cc53fa0844d1", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "CollinearMagnetizationDataManager" }], "executableName": "pw.x", "name": "pw_bands_magn.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pw_bands_magn", "next": "a8e4de4b-1f55-50e8-a712-ce0b37c04752", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_structure" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "bands.x", "input": [{ "name": "bands_spin_up.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands_spin_up", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "a8e4de4b-1f55-50e8-a712-ce0b37c04752", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_up.dat'{% endraw %}\n spin_component = 1\n no_overlap = .true.\n/\n", "contextProviders": [], "executableName": "bands.x", "name": "bands_spin_up.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands_spin_up", "next": "fd937050-a3f3-5d4d-bb50-d150a93ea5e0", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "bands.x", "input": [{ "name": "bands_spin_dn.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands_spin_dn", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "fd937050-a3f3-5d4d-bb50-d150a93ea5e0", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_dn.dat'{% endraw %}\n spin_component = 2\n no_overlap = .true.\n/\n", "contextProviders": [], "executableName": "bands.x", "name": "bands_spin_dn.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands_spin_dn", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "espresso/band_structure_soc.json": { "_id": "51e6fb82-538a-58ee-8d4e-991c8446f657", "application": { "name": "espresso" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": { "searchText": "nc-fr" }, "subtype": "nc-fr", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Spin orbit coupling bandstructure", "properties": ["atomic_forces", "band_structure", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_soc.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf_soc", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16" }, "flowchartId": "74ec024a-f247-5f15-9c21-cc169bcb62c7", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "NonCollinearMagnetizationDataManager" }], "executableName": "pw.x", "name": "pw_scf_soc.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf_soc", "next": "cee6ae30-cf34-5138-bdc5-5c57c2a6de5b", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_bands_soc.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pw_bands_soc", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_structure" }], "schemaVersion": "2022.8.16" }, "flowchartId": "cee6ae30-cf34-5138-bdc5-5c57c2a6de5b", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "NonCollinearMagnetizationDataManager" }], "executableName": "pw.x", "name": "pw_bands_soc.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pw_bands_soc", "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_structure" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "bands.x", "input": [{ "name": "bands.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", "contextProviders": [], "executableName": "bands.x", "name": "bands.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "espresso/dielectric_tensor.json": { "_id": "38340b52-83ad-5862-bc18-c140bdc0cb72", "application": { "name": "espresso" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "nc", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Compute Dielectric Function", "properties": ["atomic_forces", "band_gaps", "dielectric_tensor", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf.in" }], "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16" }, "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_scf.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "next": "3b230ec3-0791-52f7-a4db-625390b8718f", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "flowchartId": "3b230ec3-0791-52f7-a4db-625390b8718f", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "Set No-Symmetry Flag", "next": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0", "operand": "NO_SYMMETRY_NO_INVERSION", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": true }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_nscf.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pw_nscf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "fermi_energy" }, { "name": "band_gaps" }], "schemaVersion": "2022.8.16" }, "flowchartId": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_nscf.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pw_nscf", "next": "8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb", "postProcessors": [], "preProcessors": [], "results": [{ "name": "fermi_energy" }, { "name": "band_gaps" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "epsilon.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "epsilon.x", "input": [{ "name": "epsilon.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "dielectric_tensor", "postProcessors": [], "preProcessors": [], "results": [{ "name": "dielectric_tensor" }], "schemaVersion": "2022.8.16" }, "flowchartId": "8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n", "contextProviders": [], "executableName": "epsilon.x", "name": "epsilon.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Compute dielectric function", "postProcessors": [], "preProcessors": [], "results": [{ "name": "dielectric_tensor" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "espresso/dos.json": { "_id": "2cf317f3-3306-5a96-bc9b-e9103ebcd5be", "application": { "name": "espresso" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Density of States", "properties": ["atomic_forces", "band_gaps", "density_of_states", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf.in" }], "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16" }, "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_scf.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "next": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_nscf.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pw_nscf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "fermi_energy" }, { "name": "band_gaps" }], "schemaVersion": "2022.8.16" }, "flowchartId": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_nscf.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pw_nscf", "next": "3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651", "postProcessors": [], "preProcessors": [], "results": [{ "name": "fermi_energy" }, { "name": "band_gaps" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "projwfc.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "projwfc.x", "input": [{ "name": "projwfc.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "projwfc", "postProcessors": [], "preProcessors": [], "results": [{ "name": "density_of_states" }], "schemaVersion": "2022.8.16" }, "flowchartId": "3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n", "contextProviders": [], "executableName": "projwfc.x", "name": "projwfc.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "projwfc", "postProcessors": [], "preProcessors": [], "results": [{ "name": "density_of_states" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "espresso/electronic_density_mesh.json": { "_id": "e2749c5a-fcd9-589c-819b-8b88c5c90924", "application": { "name": "espresso" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Electronic Density Mesh", "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf.in" }], "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16" }, "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_scf.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "next": "e1a6e1e9-7994-5cd0-98d7-ae8909a10061", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pp.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pp.x", "input": [{ "name": "pp_density.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pp_density", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "e1a6e1e9-7994-5cd0-98d7-ae8909a10061", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n", "contextProviders": [], "executableName": "pp.x", "name": "pp_density.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pp_density", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "espresso/esm.json": { "_id": "0de669f6-a455-5dae-b331-19dc85f7090f", "application": { "name": "espresso" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Effective Screening Medium (ESM)", "properties": ["atomic_forces", "charge_density_profile", "fermi_energy", "potential_profile", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_esm.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_esm", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }, { "name": "potential_profile" }, { "name": "charge_density_profile" }], "schemaVersion": "2022.8.16" }, "flowchartId": "2f487bc6-c237-53e4-bad5-be60369662cb", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "BoundaryConditionsFormDataManager" }], "executableName": "pw.x", "name": "pw_esm.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_esm", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }, { "name": "potential_profile" }, { "name": "charge_density_profile" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "espresso/esm_relax.json": { "_id": "69728792-afeb-50aa-9b4e-6974a90f676a", "application": { "name": "espresso" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Effective Screening Medium (ESM) Relax", "properties": ["atomic_forces", "charge_density_profile", "fermi_energy", "potential_profile", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_esm_relax.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_esm_relax", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }, { "name": "potential_profile" }, { "name": "charge_density_profile" }], "schemaVersion": "2022.8.16" }, "flowchartId": "a2bec506-1fdd-5125-a787-85f31cde20c1", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }, { "name": "BoundaryConditionsFormDataManager" }], "executableName": "pw.x", "name": "pw_esm_relax.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_esm_relax", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }, { "name": "potential_profile" }, { "name": "charge_density_profile" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "espresso/espresso_extract_kpoints.json": { "_id": "a2785cc5-2427-5c7a-b30f-7077475b948c", "application": { "name": "espresso" }, "isDraft": false, "model": { "method": { "data": {}, "subtype": "unknown", "type": "unknown" }, "subtype": "unknown", "type": "unknown" }, "name": "Extract KPOINTS", "properties": [], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "espresso_extract_kpoints.py" }, { "name": "requirements.txt", "templateName": "requirements_empty.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "espresso_extract_kpoints", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "a716b133-2d04-50b5-b497-100265e3fa24", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n", "contextProviders": [], "executableName": "python", "name": "espresso_extract_kpoints.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Extract kpoints", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "espresso/espresso_xml_get_qpt_irr.json": { "_id": "e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a", "application": { "name": "espresso" }, "isDraft": false, "model": { "method": { "data": {}, "subtype": "unknown", "type": "unknown" }, "subtype": "unknown", "type": "unknown" }, "name": "espresso-xml-get-qpt-irr", "properties": [], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "espresso_xml_get_qpt_irr.py" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "espresso_xml_get_qpt_irr", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "9b8a495e-1ac1-56a7-b2e0-af1b405a1219", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n{# JOB_WORK_DIR will be initialized at runtime => avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n", "contextProviders": [], "executableName": "python", "name": "espresso_xml_get_qpt_irr.py", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "python", "next": "assignment", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "flowchartId": "assignment", "head": false, "input": [{ "name": "STDOUT", "scope": "9b8a495e-1ac1-56a7-b2e0-af1b405a1219" }], "isDefault": false, "monitors": [], "name": "assignment", "operand": "Q_POINTS", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "type": "assignment", "value": "json.loads(STDOUT)" }] }, "espresso/fixed_cell_relaxation.json": { "_id": "fb75e249-5489-5146-bd8a-786d33330d9c", "application": { "name": "espresso" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Fixed-cell Relaxation", "properties": ["atomic_forces", "fermi_energy", "final_structure", "pressure", "stress_tensor", "total_energy", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_relax.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }, { "name": "convergence_ionic" }], "name": "pw_relax", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }, { "name": "final_structure" }], "schemaVersion": "2022.8.16" }, "flowchartId": "c42871f6-ab79-5987-b228-c3bd80f16ffd", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_relax.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }, { "name": "convergence_ionic" }], "name": "pw_relax", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }, { "name": "final_structure" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "espresso/gw_band_structure_band_gap_full_frequency.json": { "_id": "46bcdcc8-628e-518e-b8c3-9bf38d7a2aef", "application": { "name": "espresso" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": { "searchText": ".*dojo-oncv.*" }, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Full Frequency GW Band Structure + Band Gap", "properties": ["atomic_forces", "band_gaps", "band_structure", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf.in" }], "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16" }, "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_scf.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "next": "d82a9858-3f20-5fcd-baeb-0f1d65e9e22e", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "gw.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "gw.x", "input": [{ "name": "gw_bands_full_frequency.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "gw_bands_full_frequency", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_structure" }, { "name": "fermi_energy" }, { "name": "band_gaps" }], "schemaVersion": "2022.8.16" }, "flowchartId": "d82a9858-3f20-5fcd-baeb-0f1d65e9e22e", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QGridFormDataManager" }, { "name": "ExplicitKPath2PIBAFormDataManager" }], "executableName": "gw.x", "name": "gw_bands_full_frequency.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "gw_bands_full_frequency", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_structure" }, { "name": "fermi_energy" }, { "name": "band_gaps" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "espresso/gw_band_structure_band_gap_plasmon_pole.json": { "_id": "72b79a87-8eef-5fe2-9d6c-6c9c256dd56c", "application": { "name": "espresso" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": { "searchText": ".*dojo-oncv.*" }, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Plasmon-Pole GW Band Structure + Band Gap", "properties": ["atomic_forces", "band_gaps", "band_structure", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf.in" }], "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16" }, "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_scf.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "next": "f9910952-eca9-5a5f-ae03-a0060ae2fc78", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "gw.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "gw.x", "input": [{ "name": "gw_bands_plasmon_pole.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "gw_bands_plasmon_pole", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_structure" }, { "name": "fermi_energy" }, { "name": "band_gaps" }], "schemaVersion": "2022.8.16" }, "flowchartId": "f9910952-eca9-5a5f-ae03-a0060ae2fc78", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QGridFormDataManager" }, { "name": "ExplicitKPath2PIBAFormDataManager" }], "executableName": "gw.x", "name": "gw_bands_plasmon_pole.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "gw_bands_plasmon_pole", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_structure" }, { "name": "fermi_energy" }, { "name": "band_gaps" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "espresso/kpoint_convergence.json": { "_id": "ff6a8fbc-2202-5786-9a26-67c843417d0b", "application": { "name": "espresso" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "K-point Convergence", "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "flowchartId": "init-tolerance", "head": true, "input": [], "isDefault": false, "monitors": [], "name": "Init tolerance", "next": "init-increment", "operand": "TOL", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": 0.00001 }, { "flowchartId": "init-increment", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "Init increment", "next": "init-result", "operand": "INC", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": 1 }, { "flowchartId": "init-result", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "Init result", "next": "init-parameter", "operand": "PREV_RESULT", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": 0 }, { "flowchartId": "init-parameter", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "Init parameter", "next": "pwscf-kpoint-convergence", "operand": "PARAMETER", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": 1 }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf_kpt_conv.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf_kpt_conv", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "schemaVersion": "2022.8.16" }, "flowchartId": "pwscf-kpoint-convergence", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0{% endraw %}\n", "contextProviders": [{ "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_scf_kpt_conv.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf_kpt_conv", "next": "store-result", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "flowchartId": "store-result", "head": false, "input": [{ "name": "total_energy", "scope": "pwscf-kpoint-convergence" }], "isDefault": false, "monitors": [], "name": "store result", "next": "check-convergence", "operand": "RESULT", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "total_energy" }, { "else": "update-result", "flowchartId": "check-convergence", "head": false, "input": [], "isDefault": false, "maxOccurrences": 50, "monitors": [], "name": "check convergence", "next": "update-result", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "statement": "abs((PREV_RESULT-RESULT)/RESULT) < TOL", "status": "idle", "statusTrack": [], "tags": [], "then": "convergence-is-reached", "type": "condition" }, { "flowchartId": "update-result", "head": false, "input": [{ "name": "RESULT", "scope": "global" }], "isDefault": false, "monitors": [], "name": "update result", "next": "increment-parameter", "operand": "PREV_RESULT", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "RESULT" }, { "flowchartId": "increment-parameter", "head": false, "input": [{ "name": "INC", "scope": "global" }, { "name": "PARAMETER", "scope": "global" }], "isDefault": false, "monitors": [], "name": "increment parameter", "next": "pwscf-kpoint-convergence", "operand": "PREV_RESULT", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "PARAMETER+INC" }, { "flowchartId": "convergence-is-reached", "head": false, "input": [{ "name": "PARAMETER", "scope": "global" }], "isDefault": false, "monitors": [], "name": "exit", "operand": "PARAMETER", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "PARAMETER" }] }, "espresso/neb.json": { "_id": "c9034468-df28-5357-8912-02226f919042", "application": { "name": "espresso" }, "isDraft": false, "isMultiMaterial": true, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Nudged Elastic Band (NEB)", "properties": ["reaction_energy_barrier", "reaction_energy_profile"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "neb.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "neb.x", "input": [{ "name": "neb.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "neb", "postProcessors": [], "preProcessors": [], "results": [{ "name": "reaction_energy_barrier" }, { "name": "reaction_energy_profile" }], "schemaVersion": "2022.8.16" }, "flowchartId": "9f273ca0-d240-5b1f-89a9-64dd579304ac", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = {{ 2 + (input.INTERMEDIATE_IMAGES.length or neb.nImages) }},\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_first = false %}\n{%- for position in input.FIRST_IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_first = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.FIRST_IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_first %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n{%- for IMAGE in input.INTERMEDIATE_IMAGES %}\nINTERMEDIATE_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_intermediate = false %}\n{%- for position in IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_intermediate = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_intermediate %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n{%- endfor %}\nLAST_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_last = false %}\n{%- for position in input.LAST_IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_last = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.LAST_IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_last %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nEND_POSITIONS\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nEND_ENGINE_INPUT\nEND\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "NEBFormDataManager" }, { "name": "QENEBInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "neb.x", "name": "neb.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "neb", "postProcessors": [], "preProcessors": [], "results": [{ "name": "reaction_energy_barrier" }, { "name": "reaction_energy_profile" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "espresso/ph_init_qpoints.json": { "_id": "2f017bcb-f4ba-55b8-b939-1f780679a88e", "application": { "name": "espresso" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "ph-init-qpoints", "properties": [], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "ph.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "ph.x", "input": [{ "name": "ph_init_qpoints.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "ph_init_qpoints", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "b8ea6a33-38f3-5434-b17e-b5eae8fff9fc", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", "contextProviders": [{ "name": "QGridFormDataManager" }], "executableName": "ph.x", "name": "ph_init_qpoints.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "ph_init_qpoints", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "espresso/ph_single_irr_qpt.json": { "_id": "e68db280-8636-53e3-81a0-88396ba6147d", "application": { "name": "espresso" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "ph-single-irr-qpt", "properties": [], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "ph.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "ph.x", "input": [{ "name": "ph_single_irr_qpt.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "ph_single_irr_qpt", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "8db9af08-d935-57a0-a824-e7db6d936de8", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", "contextProviders": [{ "name": "QGridFormDataManager" }], "executableName": "ph.x", "name": "ph_single_irr_qpt.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "ph_single_irr_qpt", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "espresso/phonon_dispersions.json": { "_id": "bfb69b48-8fbf-5a0d-8949-448f20754766", "application": { "name": "espresso" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Phonon Dispersions", "properties": ["atomic_forces", "fermi_energy", "phonon_dispersions", "phonon_dos", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf.in" }], "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16" }, "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_scf.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "next": "13bcafce-56ef-5b47-b079-317495eb6933", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "ph.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "ph.x", "input": [{ "name": "ph_grid.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "ph_grid", "postProcessors": [], "preProcessors": [], "results": [{ "name": "phonon_dos" }], "schemaVersion": "2022.8.16" }, "flowchartId": "13bcafce-56ef-5b47-b079-317495eb6933", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", "contextProviders": [{ "name": "QGridFormDataManager" }], "executableName": "ph.x", "name": "ph_grid.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "ph_grid", "next": "3b4507a7-9244-540b-abe0-66bceab700f5", "postProcessors": [], "preProcessors": [], "results": [{ "name": "phonon_dos" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "q2r.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "q2r.x", "input": [{ "name": "q2r.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "q2r", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "3b4507a7-9244-540b-abe0-66bceab700f5", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", "contextProviders": [], "executableName": "q2r.x", "name": "q2r.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "q2r", "next": "a7fded20-889b-54fc-bbb0-456e82689ab1", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "matdyn.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "matdyn.x", "input": [{ "name": "matdyn_path.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "matdyn_path", "postProcessors": [], "preProcessors": [], "results": [{ "name": "phonon_dispersions" }], "schemaVersion": "2022.8.16" }, "flowchartId": "a7fded20-889b-54fc-bbb0-456e82689ab1", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "contextProviders": [{ "name": "IPathFormDataManager" }], "executableName": "matdyn.x", "name": "matdyn_path.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "matdyn_path", "postProcessors": [], "preProcessors": [], "results": [{ "name": "phonon_dispersions" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "espresso/phonon_dos.json": { "_id": "2232051b-9f2a-5a48-9b4d-6231eb6e8297", "application": { "name": "espresso" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Phonon Density of States", "properties": ["atomic_forces", "fermi_energy", "phonon_dos", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf.in" }], "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16" }, "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_scf.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "next": "13bcafce-56ef-5b47-b079-317495eb6933", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "ph.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "ph.x", "input": [{ "name": "ph_grid.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "ph_grid", "postProcessors": [], "preProcessors": [], "results": [{ "name": "phonon_dos" }], "schemaVersion": "2022.8.16" }, "flowchartId": "13bcafce-56ef-5b47-b079-317495eb6933", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", "contextProviders": [{ "name": "QGridFormDataManager" }], "executableName": "ph.x", "name": "ph_grid.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "ph_grid", "next": "3b4507a7-9244-540b-abe0-66bceab700f5", "postProcessors": [], "preProcessors": [], "results": [{ "name": "phonon_dos" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "q2r.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "q2r.x", "input": [{ "name": "q2r.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "q2r", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "3b4507a7-9244-540b-abe0-66bceab700f5", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", "contextProviders": [], "executableName": "q2r.x", "name": "q2r.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "q2r", "next": "8fe6a24b-c994-55a2-a448-88657292e8c2", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "matdyn.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "matdyn.x", "input": [{ "name": "matdyn_grid.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "matdyn_grid", "postProcessors": [], "preProcessors": [], "results": [{ "name": "phonon_dos" }], "schemaVersion": "2022.8.16" }, "flowchartId": "8fe6a24b-c994-55a2-a448-88657292e8c2", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n", "contextProviders": [{ "name": "IGridFormDataManager" }], "executableName": "matdyn.x", "name": "matdyn_grid.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "matdyn_grid", "postProcessors": [], "preProcessors": [], "results": [{ "name": "phonon_dos" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "espresso/phonon_dos_dispersion.json": { "_id": "291d25cd-378a-5be7-9d85-c8013a4b165b", "application": { "name": "espresso" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Phonon Density of States + Dispersions", "properties": ["atomic_forces", "fermi_energy", "phonon_dispersions", "phonon_dos", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf.in" }], "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16" }, "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_scf.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "next": "13bcafce-56ef-5b47-b079-317495eb6933", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "ph.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "ph.x", "input": [{ "name": "ph_grid.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "ph_grid", "postProcessors": [], "preProcessors": [], "results": [{ "name": "phonon_dos" }], "schemaVersion": "2022.8.16" }, "flowchartId": "13bcafce-56ef-5b47-b079-317495eb6933", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", "contextProviders": [{ "name": "QGridFormDataManager" }], "executableName": "ph.x", "name": "ph_grid.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "ph_grid", "next": "3b4507a7-9244-540b-abe0-66bceab700f5", "postProcessors": [], "preProcessors": [], "results": [{ "name": "phonon_dos" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "q2r.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "q2r.x", "input": [{ "name": "q2r.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "q2r", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "3b4507a7-9244-540b-abe0-66bceab700f5", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", "contextProviders": [], "executableName": "q2r.x", "name": "q2r.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "q2r", "next": "8fe6a24b-c994-55a2-a448-88657292e8c2", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "matdyn.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "matdyn.x", "input": [{ "name": "matdyn_grid.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "matdyn_grid", "postProcessors": [], "preProcessors": [], "results": [{ "name": "phonon_dos" }], "schemaVersion": "2022.8.16" }, "flowchartId": "8fe6a24b-c994-55a2-a448-88657292e8c2", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n", "contextProviders": [{ "name": "IGridFormDataManager" }], "executableName": "matdyn.x", "name": "matdyn_grid.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "matdyn_grid", "next": "a7fded20-889b-54fc-bbb0-456e82689ab1", "postProcessors": [], "preProcessors": [], "results": [{ "name": "phonon_dos" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "matdyn.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "matdyn.x", "input": [{ "name": "matdyn_path.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "matdyn_path", "postProcessors": [], "preProcessors": [], "results": [{ "name": "phonon_dispersions" }], "schemaVersion": "2022.8.16" }, "flowchartId": "a7fded20-889b-54fc-bbb0-456e82689ab1", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "contextProviders": [{ "name": "IPathFormDataManager" }], "executableName": "matdyn.x", "name": "matdyn_path.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "matdyn_path", "postProcessors": [], "preProcessors": [], "results": [{ "name": "phonon_dispersions" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "espresso/phonon_reduce.json": { "_id": "545a66e2-dfbe-513e-acaf-d79d0d139b9c", "application": { "name": "espresso" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "reduce", "properties": ["phonon_dispersions", "phonon_dos"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "ph.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "ph.x", "input": [{ "name": "ph_grid_restart.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "ph_grid_restart", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "cb206177-a4af-599a-81ba-6c88d24253b6", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", "contextProviders": [{ "name": "QGridFormDataManager" }], "executableName": "ph.x", "name": "ph_grid_restart.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "ph_grid_restart", "next": "3b4507a7-9244-540b-abe0-66bceab700f5", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "q2r.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "q2r.x", "input": [{ "name": "q2r.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "q2r", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "3b4507a7-9244-540b-abe0-66bceab700f5", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", "contextProviders": [], "executableName": "q2r.x", "name": "q2r.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "q2r", "next": "8fe6a24b-c994-55a2-a448-88657292e8c2", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "matdyn.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "matdyn.x", "input": [{ "name": "matdyn_grid.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "matdyn_grid", "postProcessors": [], "preProcessors": [], "results": [{ "name": "phonon_dos" }], "schemaVersion": "2022.8.16" }, "flowchartId": "8fe6a24b-c994-55a2-a448-88657292e8c2", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n", "contextProviders": [{ "name": "IGridFormDataManager" }], "executableName": "matdyn.x", "name": "matdyn_grid.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "matdyn_grid", "next": "a7fded20-889b-54fc-bbb0-456e82689ab1", "postProcessors": [], "preProcessors": [], "results": [{ "name": "phonon_dos" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "matdyn.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "matdyn.x", "input": [{ "name": "matdyn_path.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "matdyn_path", "postProcessors": [], "preProcessors": [], "results": [{ "name": "phonon_dispersions" }], "schemaVersion": "2022.8.16" }, "flowchartId": "a7fded20-889b-54fc-bbb0-456e82689ab1", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "contextProviders": [{ "name": "IPathFormDataManager" }], "executableName": "matdyn.x", "name": "matdyn_path.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "matdyn_path", "postProcessors": [], "preProcessors": [], "results": [{ "name": "phonon_dispersions" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "espresso/plot_wavefunction.json": { "_id": "e4ec581f-1cb3-5036-b698-999a96711559", "application": { "name": "espresso" }, "isDraft": false, "model": { "method": { "data": {}, "subtype": "unknown", "type": "unknown" }, "subtype": "unknown", "type": "unknown" }, "name": "Plot Wavefunction", "properties": ["file_content"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "script.py", "templateName": "plot_wavefunction.py" }, { "name": "requirements.txt", "templateName": "requirements_plot_wavefunction.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "plot_wavefunction", "postProcessors": [], "preProcessors": [], "results": [{ "name": "file_content" }], "schemaVersion": "2022.8.16" }, "flowchartId": "57fca898-8e8b-5ef2-81a5-9d2b612bc18d", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n", "contextProviders": [], "executableName": "python", "name": "script.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "plot WFN", "postProcessors": [], "preProcessors": [], "results": [{ "name": "file_content" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "espresso/post_processor.json": { "_id": "7239fc3a-b343-513f-af35-e8687e1829da", "application": { "name": "espresso" }, "isDraft": false, "model": { "method": { "data": {}, "subtype": "unknown", "type": "unknown" }, "subtype": "unknown", "type": "unknown" }, "name": "post-processor", "properties": [], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "name": "shell", "schemaVersion": "2022.8.16", "shortName": "sh", "summary": "Shell Script", "version": "5.1.8" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "sh", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "shell", "executableName": "sh", "input": [{ "name": "espresso_collect_dynmat.sh" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "espresso_collect_dynmat", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "99304304-e873-5c89-ae83-91e61a7f629c", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "shell", "content": "{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n", "contextProviders": [], "executableName": "sh", "name": "espresso_collect_dynmat.sh", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "shell", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "espresso/pre_processor.json": { "_id": "03f3a8a3-1fd0-5007-925f-fba78be63a51", "application": { "name": "espresso" }, "isDraft": false, "model": { "method": { "data": {}, "subtype": "unknown", "type": "unknown" }, "subtype": "unknown", "type": "unknown" }, "name": "pre-processor", "properties": [], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "name": "shell", "schemaVersion": "2022.8.16", "shortName": "sh", "summary": "Shell Script", "version": "5.1.8" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "sh", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "shell", "executableName": "sh", "input": [{ "name": "espresso_link_outdir_save.sh" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "espresso_link_outdir_save", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "99304304-e873-5c89-ae83-91e61a7f629c", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "shell", "content": "{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n", "contextProviders": [], "executableName": "sh", "name": "espresso_link_outdir_save.sh", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "shell", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "espresso/pw_scf.json": { "_id": "f52b8039-83d0-5485-a1f1-0bc37cb01ed3", "application": { "name": "espresso" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "pw-scf", "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf.in" }], "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16" }, "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_scf.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "espresso/recalculate_bands.json": { "_id": "64551dfb-e529-5d8d-9092-ff268f4da134", "application": { "name": "espresso" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Recalculate Bands", "properties": ["band_structure"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_bands.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pw_bands", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_structure" }], "schemaVersion": "2022.8.16" }, "flowchartId": "d618df45-5af3-5da5-8882-d74a27e00b04", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_bands.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pw_bands", "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_structure" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "bands.x", "input": [{ "name": "bands.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", "contextProviders": [], "executableName": "bands.x", "name": "bands.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "espresso/surface_energy.json": { "_id": "3e05a2b5-4171-54a2-9d2d-9e46118a56bf", "application": { "name": "espresso" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Surface Energy", "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "surface_energy", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "flowchartId": "e463ef46-a36e-5168-87dd-e21eb980dfb8", "head": true, "input": [{ "endpoint": "materials", "endpoint_options": { "params": { "projection": "{}", "query": "{'_id': MATERIAL_ID}" } }, "name": "DATA", "type": "api" }], "isDefault": false, "monitors": [], "name": "io-slab", "next": "ee7abb4e-7848-5aeb-960d-0d441909e2d1", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "source": "api", "status": "idle", "statusTrack": [], "subtype": "input", "tags": [], "type": "io" }, { "flowchartId": "ee7abb4e-7848-5aeb-960d-0d441909e2d1", "head": false, "input": [{ "name": "DATA", "scope": "e463ef46-a36e-5168-87dd-e21eb980dfb8" }], "isDefault": false, "monitors": [], "name": "slab", "next": "44263820-0c80-5bd1-b854-9da8d198eac1", "operand": "SLAB", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "DATA[0]" }, { "flowchartId": "44263820-0c80-5bd1-b854-9da8d198eac1", "head": false, "input": [{ "endpoint": "materials", "endpoint_options": { "params": { "projection": "{}", "query": "{'_id': SLAB.metadata.bulkId}" } }, "name": "DATA", "type": "api" }], "isDefault": false, "monitors": [], "name": "io-bulk", "next": "b70656f1-a394-57f4-b4de-00096969df4b", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "source": "api", "status": "idle", "statusTrack": [], "subtype": "input", "tags": [], "type": "io" }, { "flowchartId": "b70656f1-a394-57f4-b4de-00096969df4b", "head": false, "input": [{ "name": "DATA", "scope": "44263820-0c80-5bd1-b854-9da8d198eac1" }], "isDefault": false, "monitors": [], "name": "bulk", "next": "6ca4006a-e3ae-56ea-91a1-06b9790b5f7e", "operand": "BULK", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "DATA[0] if DATA else None" }, { "errorMessage": "Bulk material does not exist!", "flowchartId": "6ca4006a-e3ae-56ea-91a1-06b9790b5f7e", "head": false, "isDefault": false, "monitors": [], "name": "assert-bulk", "next": "490635e0-c593-5809-9eb2-c794b96cfed1", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "statement": "BULK != None", "status": "idle", "statusTrack": [], "tags": [], "type": "assertion" }, { "flowchartId": "490635e0-c593-5809-9eb2-c794b96cfed1", "head": false, "input": [{ "endpoint": "refined-properties", "endpoint_options": { "params": { "projection": "{'sort': {'precision.value': -1}, 'limit': 1}", "query": "{ 'exabyteId': BULK.exabyteId, 'data.name': 'total_energy', 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} }" } }, "name": "DATA", "type": "api" }], "isDefault": false, "monitors": [], "name": "io-e-bulk", "next": "bbe13b97-4243-5a85-8f61-a279d0b797aa", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "source": "api", "status": "idle", "statusTrack": [], "subtype": "input", "tags": [], "type": "io" }, { "flowchartId": "bbe13b97-4243-5a85-8f61-a279d0b797aa", "head": false, "input": [{ "name": "DATA", "scope": "490635e0-c593-5809-9eb2-c794b96cfed1" }], "isDefault": false, "monitors": [], "name": "e-bulk", "next": "a06c9f43-7670-5fd0-ac42-7028a472235a", "operand": "E_BULK", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "DATA[0].data.value if DATA else None" }, { "errorMessage": "E_BULK does not exist!", "flowchartId": "a06c9f43-7670-5fd0-ac42-7028a472235a", "head": false, "isDefault": false, "monitors": [], "name": "assert-e-bulk", "next": "cdf210be-26ed-585a-b4ac-d55795ba2975", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "statement": "E_BULK != None", "status": "idle", "statusTrack": [], "tags": [], "type": "assertion" }, { "flowchartId": "cdf210be-26ed-585a-b4ac-d55795ba2975", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "surface", "next": "ffa8e43d-096a-555b-b8d0-6d283365ef47", "operand": "A", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))" }, { "flowchartId": "ffa8e43d-096a-555b-b8d0-6d283365ef47", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "n-bulk", "next": "a0336ec5-a6da-5e4c-bb48-82b70cf5245f", "operand": "N_BULK", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "len(BULK.basis.elements)" }, { "flowchartId": "a0336ec5-a6da-5e4c-bb48-82b70cf5245f", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "n-slab", "next": "9fc7a088-5533-5f70-bb33-f676ec65f565", "operand": "N_SLAB", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "len(SLAB.basis.elements)" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf.in" }], "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16" }, "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_scf.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "next": "fcd88119-817c-5ac1-a430-ba892ac743eb", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "flowchartId": "fcd88119-817c-5ac1-a430-ba892ac743eb", "head": false, "input": [{ "name": "total_energy", "scope": "9fc7a088-5533-5f70-bb33-f676ec65f565" }], "isDefault": false, "monitors": [], "name": "e-slab", "next": "542ea9ad-8a07-5a76-b233-f72fb27c4fc6", "operand": "E_SLAB", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "total_energy" }, { "flowchartId": "542ea9ad-8a07-5a76-b233-f72fb27c4fc6", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "surface-energy", "operand": "SURFACE_ENERGY", "postProcessors": [], "preProcessors": [], "results": [{ "name": "surface_energy" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))" }] }, "espresso/total_energy.json": { "_id": "a16677f9-bb5b-54b5-9f97-c2af8c073184", "application": { "name": "espresso" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Total Energy", "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "tags": ["default"], "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf.in" }], "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16" }, "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_scf.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "espresso/valence_band_offset_calc_from_previous_esp_vbm.json": { "_id": "1b70e606-a7ee-599e-89e0-91a7dc5faa4a", "application": { "name": "espresso" }, "isDraft": false, "model": { "method": { "data": {}, "subtype": "unknown", "type": "unknown" }, "subtype": "unknown", "type": "unknown" }, "name": "Calculate VBO", "properties": ["valence_band_offset"], "schemaVersion": "2022.8.16", "units": [{ "flowchartId": "bd4eaa98-b001-5694-87ef-ec77540502ab", "head": true, "input": [], "isDefault": false, "monitors": [], "name": "Difference of valence band maxima", "next": "2626f7bb-d392-5fd4-ab71-329b508de347", "operand": "VBM_DIFF", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "VBM_LEFT - VBM_RIGHT" }, { "flowchartId": "2626f7bb-d392-5fd4-ab71-329b508de347", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "Difference of macroscopically averaged ESP in bulk", "next": "b7307787-53e2-599b-ad12-d627b04074b4", "operand": "AVG_ESP_DIFF", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]" }, { "flowchartId": "b7307787-53e2-599b-ad12-d627b04074b4", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "Lineup of macroscopically averaged ESP in interface", "next": "197f4b4d-cb7b-57be-a885-d44cb1f61905", "operand": "ESP_LINEUP", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])" }, { "flowchartId": "197f4b4d-cb7b-57be-a885-d44cb1f61905", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "Valence Band Offset", "operand": "VALENCE_BAND_OFFSET", "postProcessors": [], "preProcessors": [], "results": [{ "name": "valence_band_offset" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))" }] }, "espresso/variable_cell_relaxation.json": { "_id": "58709c44-47f6-5fbf-bf2e-358b9d98f75d", "application": { "name": "espresso" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Variable-cell Relaxation", "properties": ["atomic_forces", "fermi_energy", "final_structure", "pressure", "stress_tensor", "total_energy", "total_force"], "schemaVersion": "2022.8.16", "systemName": "espresso-variable-cell-relaxation", "tags": ["variable-cell_relaxation"], "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_vc_relax.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }, { "name": "convergence_ionic" }], "name": "pw_vc-relax", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }, { "name": "final_structure" }], "schemaVersion": "2022.8.16" }, "flowchartId": "e1bd0870-6245-5fc2-a50d-48cabc356ac8", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_vc_relax.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }, { "name": "convergence_ionic" }], "name": "pw_vc-relax", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }, { "name": "final_structure" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "espresso/wavefunction_amplitude.json": { "_id": "6a670ac8-6c12-5285-a6f8-9bf579fc88ee", "application": { "name": "espresso" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Wavefunction Amplitude", "properties": ["atomic_forces", "band_structure", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "wavefunction_amplitude"], "schemaVersion": "2022.8.16", "tags": ["wfn", "wfn_plot"], "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf.in" }], "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16" }, "flowchartId": "pw-scf", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_scf.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "next": "extract-band-energies", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "band_structure" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "flowchartId": "extract-band-energies", "head": false, "input": [{ "name": "band_structure", "scope": "pw-scf" }], "isDefault": false, "monitors": [], "name": "Extract Band Energies", "next": "indices-below-fermi", "operand": "band_energies", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]" }, { "flowchartId": "indices-below-fermi", "head": false, "input": [{ "name": "fermi_energy", "scope": "pw-scf" }], "isDefault": false, "monitors": [], "name": "Find Indices Below Fermi", "next": "8771dc7f-878e-5f13-a840-a3a416854f1e", "operand": "indices_below_fermi", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]" }, { "flowchartId": "8771dc7f-878e-5f13-a840-a3a416854f1e", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "Store Band Below EF", "next": "57a07d7d-3f68-5f31-97ad-ebe8c5593cd2", "operand": "KBAND_VALUE_BELOW_EF", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1" }, { "flowchartId": "57a07d7d-3f68-5f31-97ad-ebe8c5593cd2", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "Select Band", "next": "pp-wfn", "operand": "KBAND_VALUE", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "KBAND_VALUE_BELOW_EF" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pp.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pp.x", "input": [{ "name": "pp_wfn.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pp_wfn", "postProcessors": [], "preProcessors": [], "results": [{ "name": "wavefunction_amplitude" }], "schemaVersion": "2022.8.16" }, "flowchartId": "pp-wfn", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n", "contextProviders": [], "executableName": "pp.x", "name": "pp_wfn.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pp_wfn", "postProcessors": [], "preProcessors": [], "results": [{ "name": "wavefunction_amplitude" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "espresso/zero_point_energy.json": { "_id": "151538cc-9e71-5269-8b9e-cb5977151227", "application": { "name": "espresso" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Zero Point Energy", "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "zero_point_energy"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf.in" }], "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16" }, "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_scf.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "next": "107595d1-490f-53a2-8432-7f8a12f14d96", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "ph.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "ph.x", "input": [{ "name": "ph_gamma.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "ph_gamma", "postProcessors": [], "preProcessors": [], "results": [{ "name": "zero_point_energy" }], "schemaVersion": "2022.8.16" }, "flowchartId": "107595d1-490f-53a2-8432-7f8a12f14d96", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n", "contextProviders": [], "executableName": "ph.x", "name": "ph_gamma.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "ph_zpe", "postProcessors": [], "preProcessors": [], "results": [{ "name": "zero_point_energy" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "nwchem/total_energy.json": { "_id": "9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13", "application": { "name": "nwchem" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "pople", "type": "localorbital" }, "subtype": "gga", "type": "dft" }, "name": "Total Energy", "properties": ["total_energy", "total_energy_contributions"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "name": "nwchem", "schemaVersion": "2022.8.16", "shortName": "nwchem", "summary": "NWChem", "version": "7.0.2" }, "context": [], "executable": { "hasAdvancedComputeOptions": false, "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "nwchem", "postProcessors": [{ "name": "error_handler" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "nwchem", "executableName": "nwchem", "input": [{ "name": "nwchem_total_energy.inp" }], "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "nwchem_total_energy", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }], "schemaVersion": "2022.8.16" }, "flowchartId": "6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "nwchem", "content": " start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n", "contextProviders": [{ "name": "NWChemInputDataManager" }], "executableName": "nwchem", "name": "nwchem_total_energy.inp", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "nwchem_total_energy", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "python/ml/classification_tail.json": { "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", "application": { "name": "python" }, "isDraft": false, "model": { "method": { "data": {}, "subtype": "unknown", "type": "unknown" }, "subtype": "unknown", "type": "unknown" }, "name": "Machine Learning", "properties": ["file_content", "workflow:pyml_predict"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "enableRender": true, "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "settings.py", "templateName": "pyml_settings.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:setup_variables_packages", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "c3608488-0259-5ff4-8b90-11c6e60d6c85", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", "contextProviders": [{ "name": "MLSettingsDataManager" }], "executableName": "python", "name": "settings.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Setup Variables and Packages", "next": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "data_input_read_csv_pandas.py", "templateName": "data_input_read_csv_pandas.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:data_input:read_csv:pandas", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", "contextProviders": [], "executableName": "python", "name": "data_input_read_csv_pandas.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Data Input", "next": "7fff5212-6c6d-586b-9997-4d4485e09383", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "data_input_train_test_split_sklearn.py", "templateName": "data_input_train_test_split_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:data_input:train_test_split:sklearn", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "7fff5212-6c6d-586b-9997-4d4485e09383", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "contextProviders": [{ "name": "MLTrainTestSplitDataManager" }], "executableName": "python", "name": "data_input_train_test_split_sklearn.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Train Test Split", "next": "799de7dc-9394-571b-8e0d-3ff876a3df02", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "pre_processing_standardization_sklearn.py", "templateName": "pre_processing_standardization_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:pre_processing:standardization:sklearn", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "799de7dc-9394-571b-8e0d-3ff876a3df02", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", "contextProviders": [], "executableName": "python", "name": "pre_processing_standardization_sklearn.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Data Standardize", "next": "8dfc61c3-067d-5ea8-bd26-7296628d707a", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "model_random_forest_classification_sklearn.py", "templateName": "model_random_forest_classification_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:model:random_forest_classification:sklearn", "postProcessors": [], "preProcessors": [], "results": [{ "name": "workflow:pyml_predict" }], "schemaVersion": "2022.8.16" }, "flowchartId": "8dfc61c3-067d-5ea8-bd26-7296628d707a", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "contextProviders": [], "executableName": "python", "name": "model_random_forest_classification_sklearn.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Model Train and Predict", "next": "35436b4a-cd9c-5089-ab42-665c4f9ba049", "postProcessors": [], "preProcessors": [], "results": [{ "name": "workflow:pyml_predict" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": ["remove-all-results", "creates-predictions-csv-during-predict-phase"], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "post_processing_roc_curve_sklearn.py", "templateName": "post_processing_roc_curve_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:post_processing:roc_curve:sklearn", "postProcessors": [], "preProcessors": [], "results": [{ "name": "file_content" }], "schemaVersion": "2022.8.16" }, "flowchartId": "35436b4a-cd9c-5089-ab42-665c4f9ba049", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "contextProviders": [], "executableName": "python", "name": "post_processing_roc_curve_sklearn.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "ROC Curve Plot", "postProcessors": [{ "name": "remove_virtual_environment" }], "preProcessors": [], "results": [{ "name": "file_content" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": ["remove-all-results"], "type": "execution" }] }, "python/ml/clustering_tail.json": { "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", "application": { "name": "python" }, "isDraft": false, "model": { "method": { "data": {}, "subtype": "unknown", "type": "unknown" }, "subtype": "unknown", "type": "unknown" }, "name": "Machine Learning", "properties": ["file_content", "workflow:pyml_predict"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "enableRender": true, "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "settings.py", "templateName": "pyml_settings.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:setup_variables_packages", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "c3608488-0259-5ff4-8b90-11c6e60d6c85", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", "contextProviders": [{ "name": "MLSettingsDataManager" }], "executableName": "python", "name": "settings.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Setup Variables and Packages", "next": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "data_input_read_csv_pandas.py", "templateName": "data_input_read_csv_pandas.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:data_input:read_csv:pandas", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", "contextProviders": [], "executableName": "python", "name": "data_input_read_csv_pandas.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Data Input", "next": "7fff5212-6c6d-586b-9997-4d4485e09383", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "data_input_train_test_split_sklearn.py", "templateName": "data_input_train_test_split_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:data_input:train_test_split:sklearn", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "7fff5212-6c6d-586b-9997-4d4485e09383", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "contextProviders": [{ "name": "MLTrainTestSplitDataManager" }], "executableName": "python", "name": "data_input_train_test_split_sklearn.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Train Test Split", "next": "799de7dc-9394-571b-8e0d-3ff876a3df02", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "pre_processing_standardization_sklearn.py", "templateName": "pre_processing_standardization_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:pre_processing:standardization:sklearn", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "799de7dc-9394-571b-8e0d-3ff876a3df02", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", "contextProviders": [], "executableName": "python", "name": "pre_processing_standardization_sklearn.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Data Standardize", "next": "8dfc61c3-067d-5ea8-bd26-7296628d707a", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "model_k_means_clustering_sklearn.py", "templateName": "model_k_means_clustering_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:model:k_means_clustering:sklearn", "postProcessors": [], "preProcessors": [], "results": [{ "name": "workflow:pyml_predict" }], "schemaVersion": "2022.8.16" }, "flowchartId": "8dfc61c3-067d-5ea8-bd26-7296628d707a", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "contextProviders": [], "executableName": "python", "name": "model_k_means_clustering_sklearn.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Model Train and Predict", "next": "9c95c27b-c8bd-5e8b-8829-d354611decef", "postProcessors": [], "preProcessors": [], "results": [{ "name": "workflow:pyml_predict" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": ["remove-all-results", "creates-predictions-csv-during-predict-phase"], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "post_processing_pca_2d_clusters_matplotlib.py", "templateName": "post_processing_pca_2d_clusters_matplotlib.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:post_processing:pca_2d_clusters:matplotlib", "postProcessors": [], "preProcessors": [], "results": [{ "name": "file_content" }], "schemaVersion": "2022.8.16" }, "flowchartId": "9c95c27b-c8bd-5e8b-8829-d354611decef", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "contextProviders": [], "executableName": "python", "name": "post_processing_pca_2d_clusters_matplotlib.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "2D PCA Clusters Plot", "postProcessors": [{ "name": "remove_virtual_environment" }], "preProcessors": [], "results": [{ "name": "file_content" }, { "name": "file_content" }, { "name": "file_content" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": ["remove-all-results"], "type": "execution" }] }, "python/ml/regression_tail.json": { "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", "application": { "name": "python" }, "isDraft": false, "model": { "method": { "data": {}, "subtype": "unknown", "type": "unknown" }, "subtype": "unknown", "type": "unknown" }, "name": "Machine Learning", "properties": ["file_content", "workflow:pyml_predict"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "enableRender": true, "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "settings.py", "templateName": "pyml_settings.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:setup_variables_packages", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "c3608488-0259-5ff4-8b90-11c6e60d6c85", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", "contextProviders": [{ "name": "MLSettingsDataManager" }], "executableName": "python", "name": "settings.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Setup Variables and Packages", "next": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "data_input_read_csv_pandas.py", "templateName": "data_input_read_csv_pandas.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:data_input:read_csv:pandas", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", "contextProviders": [], "executableName": "python", "name": "data_input_read_csv_pandas.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Data Input", "next": "7fff5212-6c6d-586b-9997-4d4485e09383", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "data_input_train_test_split_sklearn.py", "templateName": "data_input_train_test_split_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:data_input:train_test_split:sklearn", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "7fff5212-6c6d-586b-9997-4d4485e09383", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "contextProviders": [{ "name": "MLTrainTestSplitDataManager" }], "executableName": "python", "name": "data_input_train_test_split_sklearn.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Train Test Split", "next": "799de7dc-9394-571b-8e0d-3ff876a3df02", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "pre_processing_standardization_sklearn.py", "templateName": "pre_processing_standardization_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:pre_processing:standardization:sklearn", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "799de7dc-9394-571b-8e0d-3ff876a3df02", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", "contextProviders": [], "executableName": "python", "name": "pre_processing_standardization_sklearn.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Data Standardize", "next": "8dfc61c3-067d-5ea8-bd26-7296628d707a", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "model_mlp_sklearn.py", "templateName": "model_mlp_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:model:multilayer_perceptron:sklearn", "postProcessors": [], "preProcessors": [], "results": [{ "name": "workflow:pyml_predict" }], "schemaVersion": "2022.8.16" }, "flowchartId": "8dfc61c3-067d-5ea8-bd26-7296628d707a", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "contextProviders": [], "executableName": "python", "name": "model_mlp_sklearn.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Model Train and Predict", "next": "1ca76a49-a3c7-5fa2-b693-538b599ecd7c", "postProcessors": [], "preProcessors": [], "results": [{ "name": "workflow:pyml_predict" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": ["remove-all-results", "creates-predictions-csv-during-predict-phase"], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "post_processing_parity_plot_matplotlib.py", "templateName": "post_processing_parity_plot_matplotlib.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:post_processing:parity_plot:matplotlib", "postProcessors": [], "preProcessors": [], "results": [{ "name": "file_content" }], "schemaVersion": "2022.8.16" }, "flowchartId": "1ca76a49-a3c7-5fa2-b693-538b599ecd7c", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "contextProviders": [], "executableName": "python", "name": "post_processing_parity_plot_matplotlib.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Parity Plot", "postProcessors": [{ "name": "remove_virtual_environment" }], "preProcessors": [], "results": [{ "name": "file_content" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": ["remove-all-results"], "type": "execution" }] }, "python/ml/train_head.json": { "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", "application": { "name": "python" }, "isDraft": false, "model": { "method": { "data": {}, "subtype": "unknown", "type": "unknown" }, "subtype": "unknown", "type": "unknown" }, "name": "Set Up the Job", "properties": [], "schemaVersion": "2022.8.16", "units": [{ "flowchartId": "head-set-predict-status", "head": true, "input": [], "isDefault": false, "monitors": [], "name": "Set Workflow Mode", "next": "head-fetch-training-data", "operand": "IS_WORKFLOW_RUNNING_TO_PREDICT", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": ["pyml:workflow-type-setter"], "type": "assignment", "value": "False" }, { "enableRender": true, "flowchartId": "head-fetch-training-data", "head": false, "input": [{ "basename": "{{DATASET_BASENAME}}", "objectData": { "CONTAINER": "", "NAME": "{{DATASET_FILEPATH}}", "PROVIDER": "", "REGION": "" }, "type": "object_storage" }], "isDefault": false, "monitors": [], "name": "Fetch Dataset", "next": "head-branch-on-predict-status", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "source": "object_storage", "status": "idle", "statusTrack": [], "subtype": "input", "tags": [], "type": "io" }, { "else": "end-of-ml-train-head", "flowchartId": "head-branch-on-predict-status", "head": false, "input": [{ "name": "IS_WORKFLOW_RUNNING_TO_PREDICT", "scope": "global" }], "isDefault": false, "maxOccurrences": 100, "monitors": [], "name": "Train or Predict?", "next": "head-fetch-trained-model", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "statement": "IS_WORKFLOW_RUNNING_TO_PREDICT", "status": "idle", "statusTrack": [], "tags": [], "then": "head-fetch-trained-model", "type": "condition" }, { "enableRender": true, "flowchartId": "head-fetch-trained-model", "head": false, "input": [{ "basename": "", "objectData": { "CONTAINER": "", "NAME": "", "PROVIDER": "", "REGION": "" }, "type": "object_storage" }], "isDefault": false, "monitors": [], "name": "Fetch Trained Model as file", "next": "end-of-ml-train-head", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "source": "object_storage", "status": "idle", "statusTrack": [], "subtype": "input", "tags": ["set-io-unit-filenames"], "type": "io" }, { "flowchartId": "end-of-ml-train-head", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "End Setup", "operand": "IS_SETUP_COMPLETE", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "True" }] }, "python/python_script.json": { "_id": "64a079ba-7a12-57b7-ac06-310b2bf8d354", "application": { "name": "python" }, "isDraft": false, "model": { "method": { "data": {}, "subtype": "unknown", "type": "unknown" }, "subtype": "unknown", "type": "unknown" }, "name": "Python Script", "properties": [], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "script.py", "templateName": "hello_world.py" }, { "name": "requirements.txt" }], "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "hello_world", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "9b8a495e-1ac1-56a7-b2e0-af1b405a1219", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n", "contextProviders": [], "executableName": "python", "name": "script.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "shell/batch_espresso_pwscf.json": { "_id": "f0775c7b-214a-5245-b921-5b4eb53d15a9", "application": { "name": "shell" }, "isDraft": false, "model": { "method": { "data": {}, "subtype": "unknown", "type": "unknown" }, "subtype": "unknown", "type": "unknown" }, "name": "Shell Batch Job (Espresso PWSCF)", "properties": [], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "name": "shell", "schemaVersion": "2022.8.16", "shortName": "sh", "summary": "Shell Script", "version": "5.1.8" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "sh", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "shell", "executableName": "sh", "input": [{ "name": "job_espresso_pw_scf.sh" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "job_espresso_pw_scf", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "99304304-e873-5c89-ae83-91e61a7f629c", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "shell", "content": "#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n", "contextProviders": [], "executableName": "sh", "name": "job_espresso_pw_scf.sh", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "shell", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "shell/hello_world.json": { "_id": "ce33d4cf-e0d2-5020-854d-9ea1fe5c8512", "application": { "name": "shell" }, "isDraft": false, "model": { "method": { "data": {}, "subtype": "unknown", "type": "unknown" }, "subtype": "unknown", "type": "unknown" }, "name": "Shell Hello World", "properties": [], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "name": "shell", "schemaVersion": "2022.8.16", "shortName": "sh", "summary": "Shell Script", "version": "5.1.8" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "sh", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "shell", "executableName": "sh", "input": [{ "name": "hello_world.sh" }], "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "hello_world", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "99304304-e873-5c89-ae83-91e61a7f629c", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "shell", "content": "#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n", "contextProviders": [], "executableName": "sh", "name": "hello_world.sh", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "shell", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "vasp/band_gap.json": { "_id": "e65f2461-5f5c-5a51-8c48-88ad37bff100", "application": { "name": "vasp" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "paw", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Band Gap", "properties": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "isLicensed": true, "name": "vasp", "schemaVersion": "2022.8.16", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "version": "5.4.4" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "vasp", "postProcessors": [{ "name": "error_handler" }, { "name": "prepare_restart" }, { "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR" }, { "name": "KPOINTS" }, { "name": "POSCAR" }], "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "schemaVersion": "2022.8.16" }, "flowchartId": "9cb87769-bf20-56bf-a8b3-5a164e3bf541", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "INCAR", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "KPOINTS", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "{{ input.POSCAR }}\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "POSCAR", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp", "next": "f0d65517-9592-5bc8-948e-a0851a766cbb", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "isLicensed": true, "name": "vasp", "schemaVersion": "2022.8.16", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "version": "5.4.4" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "vasp", "postProcessors": [{ "name": "error_handler" }, { "name": "prepare_restart" }, { "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_BANDS" }, { "name": "KPOINTS", "templateName": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR" }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp_nscf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_gaps" }, { "name": "fermi_energy" }], "schemaVersion": "2022.8.16" }, "flowchartId": "f0d65517-9592-5bc8-948e-a0851a766cbb", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "INCAR", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "KPOINTS", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "{{ input.POSCAR }}\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "POSCAR", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp_nscf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_gaps" }, { "name": "fermi_energy" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "vasp/band_structure.json": { "_id": "cd6e3d59-5544-56ac-878b-fd8716a09768", "application": { "name": "vasp" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "paw", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Band Structure", "properties": ["atomic_forces", "band_structure", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "isLicensed": true, "name": "vasp", "schemaVersion": "2022.8.16", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "version": "5.4.4" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "vasp", "postProcessors": [{ "name": "error_handler" }, { "name": "prepare_restart" }, { "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR" }, { "name": "KPOINTS" }, { "name": "POSCAR" }], "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "schemaVersion": "2022.8.16" }, "flowchartId": "9cb87769-bf20-56bf-a8b3-5a164e3bf541", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "INCAR", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "KPOINTS", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "{{ input.POSCAR }}\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "POSCAR", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp", "next": "1e1de3be-f6e4-513e-afe2-c84e567a8108", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "isLicensed": true, "name": "vasp", "schemaVersion": "2022.8.16", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "version": "5.4.4" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "vasp", "postProcessors": [{ "name": "error_handler" }, { "name": "prepare_restart" }, { "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_BANDS" }, { "name": "KPOINTS", "templateName": "KPOINTS_BANDS" }, { "name": "POSCAR", "templateName": "" }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp_bands", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_structure" }], "schemaVersion": "2022.8.16" }, "flowchartId": "1e1de3be-f6e4-513e-afe2-c84e567a8108", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "INCAR", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "KPOINTS", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "{{ input.POSCAR }}\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "POSCAR", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp_bands", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_structure" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "vasp/band_structure_dos.json": { "_id": "d38fea11-9781-5151-8dae-d705381498be", "application": { "name": "vasp" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "paw", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Band Structure + Density of States", "properties": ["atomic_forces", "band_structure", "density_of_states", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "isLicensed": true, "name": "vasp", "schemaVersion": "2022.8.16", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "version": "5.4.4" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "vasp", "postProcessors": [{ "name": "error_handler" }, { "name": "prepare_restart" }, { "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR" }, { "name": "KPOINTS" }, { "name": "POSCAR" }], "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "schemaVersion": "2022.8.16" }, "flowchartId": "9cb87769-bf20-56bf-a8b3-5a164e3bf541", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "INCAR", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "KPOINTS", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "{{ input.POSCAR }}\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "POSCAR", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp", "next": "1e1de3be-f6e4-513e-afe2-c84e567a8108", "postProcessors": [], "preProcessors": [], "results": [{ "name": "density_of_states" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "isLicensed": true, "name": "vasp", "schemaVersion": "2022.8.16", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "version": "5.4.4" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "vasp", "postProcessors": [{ "name": "error_handler" }, { "name": "prepare_restart" }, { "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_BANDS" }, { "name": "KPOINTS", "templateName": "KPOINTS_BANDS" }, { "name": "POSCAR", "templateName": "" }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp_bands", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_structure" }], "schemaVersion": "2022.8.16" }, "flowchartId": "1e1de3be-f6e4-513e-afe2-c84e567a8108", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "INCAR", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "KPOINTS", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "{{ input.POSCAR }}\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "POSCAR", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp_bands", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_structure" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "vasp/dos.json": { "_id": "4897ca33-b023-5a8d-9a5d-9e74df0f00ad", "application": { "name": "vasp" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "paw", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Density of States", "properties": ["atomic_forces", "density_of_states", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "isLicensed": true, "name": "vasp", "schemaVersion": "2022.8.16", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "version": "5.4.4" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "vasp", "postProcessors": [{ "name": "error_handler" }, { "name": "prepare_restart" }, { "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR" }, { "name": "KPOINTS" }, { "name": "POSCAR" }], "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "schemaVersion": "2022.8.16" }, "flowchartId": "9cb87769-bf20-56bf-a8b3-5a164e3bf541", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "INCAR", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "KPOINTS", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "{{ input.POSCAR }}\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "POSCAR", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp", "postProcessors": [], "preProcessors": [], "results": [{ "name": "density_of_states" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "vasp/fixed_cell_relaxation.json": { "_id": "db6cc94b-2f26-5688-ba97-80b11567b549", "application": { "name": "vasp" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "paw", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Fixed-cell Relaxation", "properties": ["atomic_forces", "fermi_energy", "final_structure", "pressure", "stress_tensor", "total_energy", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "isLicensed": true, "name": "vasp", "schemaVersion": "2022.8.16", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "version": "5.4.4" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "vasp", "postProcessors": [{ "name": "error_handler" }, { "name": "prepare_restart" }, { "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_RELAX" }, { "name": "KPOINTS", "templateName": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR" }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }, { "name": "convergence_ionic" }], "name": "vasp_relax", "postProcessors": [{ "name": "prepare_restart" }], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_force" }, { "name": "final_structure" }], "schemaVersion": "2022.8.16" }, "flowchartId": "2f718a3d-5800-57e2-b707-075c1f1755c6", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "INCAR", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "KPOINTS", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "{{ input.POSCAR }}\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "POSCAR", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }, { "name": "convergence_ionic" }], "name": "vasp_relax", "postProcessors": [{ "name": "prepare_restart" }], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_force" }, { "name": "final_structure" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "vasp/initial_final_total_energies.json": { "_id": "792e8c42-86ce-5f01-812a-66378ec4f379", "application": { "name": "vasp" }, "compute": { "arguments": { "nband": 1, "ndiag": 1, "nimage": 1, "npools": 1, "ntg": 1 }, "cluster": { "fqdn": "" }, "isRestartable": true, "nodes": 1, "notify": "n", "ppn": 1, "queue": "D", "timeLimit": "01:00:00", "timeLimitType": "per single attempt" }, "isDraft": false, "isMultiMaterial": true, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "paw", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Initial/Final Total Energies", "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "isLicensed": true, "name": "vasp", "schemaVersion": "2022.8.16", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "version": "5.4.4" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "vasp", "postProcessors": [{ "name": "error_handler" }, { "name": "prepare_restart" }, { "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_NEB_INITIAL_FINAL" }, { "name": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR_NEB_INITIAL" }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp_neb_initial", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "schemaVersion": "2022.8.16" }, "flowchartId": "f969f010-9dae-5085-9ac5-86150ef78897", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "ISTART = 0\nENCUT = 500\nISPIN = 2\n", "contextProviders": [{ "name": "NEBFormDataManager" }, { "name": "VASPNEBInputDataManager" }], "executableName": "vasp", "name": "INCAR", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "KPOINTS", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "{{ input.FIRST_IMAGE }}\n", "contextProviders": [{ "name": "NEBFormDataManager" }, { "name": "VASPNEBInputDataManager" }], "executableName": "vasp", "name": "POSCAR", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp_neb_initial", "next": "e65a17ce-10c8-5710-ad4d-fb3d42434091", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "isLicensed": true, "name": "vasp", "schemaVersion": "2022.8.16", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "version": "5.4.4" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "vasp", "postProcessors": [{ "name": "error_handler" }, { "name": "prepare_restart" }, { "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_NEB_INITIAL_FINAL" }, { "name": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR_NEB_FINAL" }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp_neb_final", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "schemaVersion": "2022.8.16" }, "flowchartId": "e65a17ce-10c8-5710-ad4d-fb3d42434091", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "ISTART = 0\nENCUT = 500\nISPIN = 2\n", "contextProviders": [{ "name": "NEBFormDataManager" }, { "name": "VASPNEBInputDataManager" }], "executableName": "vasp", "name": "INCAR", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "KPOINTS", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "{{ input.LAST_IMAGE }}\n", "contextProviders": [{ "name": "NEBFormDataManager" }, { "name": "VASPNEBInputDataManager" }], "executableName": "vasp", "name": "POSCAR", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp_neb_final", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "vasp/kpoint_convergence.json": { "_id": "5d736d84-d616-538f-a09b-81a32ac0777c", "application": { "name": "vasp" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "paw", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "K-point Convergence", "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "flowchartId": "init-tolerance", "head": true, "input": [], "isDefault": false, "monitors": [], "name": "Init tolerance", "next": "init-increment", "operand": "TOL", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": 0.00001 }, { "flowchartId": "init-increment", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "Init increment", "next": "init-result", "operand": "INC", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": 1 }, { "flowchartId": "init-result", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "Init result", "next": "init-parameter", "operand": "PREV_RESULT", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": 0 }, { "flowchartId": "init-parameter", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "Init parameter", "next": "vasp-kpoint-convergence", "operand": "PARAMETER", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": 1 }, { "application": { "build": "GNU", "isDefault": true, "isLicensed": true, "name": "vasp", "schemaVersion": "2022.8.16", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "version": "5.4.4" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "vasp", "postProcessors": [{ "name": "error_handler" }, { "name": "prepare_restart" }, { "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR" }, { "name": "KPOINTS", "templateName": "KPOINTS_CONV" }, { "name": "POSCAR", "templateName": "POSCAR" }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp_kpt_conv", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "schemaVersion": "2022.8.16" }, "flowchartId": "vasp-kpoint-convergence", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "INCAR", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "KPOINTS", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "{{ input.POSCAR }}\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "POSCAR", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp_kpt_conv", "next": "store-result", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "flowchartId": "store-result", "head": false, "input": [{ "name": "total_energy", "scope": "vasp-kpoint-convergence" }], "isDefault": false, "monitors": [], "name": "store result", "next": "check-convergence", "operand": "RESULT", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "total_energy" }, { "else": "update-result", "flowchartId": "check-convergence", "head": false, "input": [], "isDefault": false, "maxOccurrences": 50, "monitors": [], "name": "check convergence", "next": "update-result", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "statement": "abs((PREV_RESULT-RESULT)/RESULT) < TOL", "status": "idle", "statusTrack": [], "tags": [], "then": "convergence-is-reached", "type": "condition" }, { "flowchartId": "update-result", "head": false, "input": [{ "name": "RESULT", "scope": "global" }], "isDefault": false, "monitors": [], "name": "update result", "next": "increment-parameter", "operand": "PREV_RESULT", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "RESULT" }, { "flowchartId": "increment-parameter", "head": false, "input": [{ "name": "INC", "scope": "global" }, { "name": "PARAMETER", "scope": "global" }], "isDefault": false, "monitors": [], "name": "increment parameter", "next": "vasp-kpoint-convergence", "operand": "PREV_RESULT", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "PARAMETER+INC" }, { "flowchartId": "convergence-is-reached", "head": false, "input": [{ "name": "PARAMETER", "scope": "global" }], "isDefault": false, "monitors": [], "name": "exit", "operand": "PARAMETER", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "PARAMETER" }] }, "vasp/neb_subworkflow.json": { "_id": "e6215fb9-e60c-541b-b73e-b077d64b3a95", "application": { "name": "vasp" }, "isDraft": false, "isMultiMaterial": true, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "paw", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Nudged Elastic Band (NEB)", "properties": ["reaction_energy_barrier", "reaction_energy_profile"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "isLicensed": true, "name": "vasp", "schemaVersion": "2022.8.16", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "version": "5.4.4" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "vasp", "postProcessors": [{ "name": "error_handler" }, { "name": "prepare_restart" }, { "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_NEB" }, { "name": "KPOINTS", "templateName": "KPOINTS" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "vasp_neb", "postProcessors": [], "preProcessors": [], "results": [{ "name": "reaction_energy_barrier" }, { "name": "reaction_energy_profile" }], "schemaVersion": "2022.8.16" }, "flowchartId": "9a1660ab-8067-5fad-9fb8-7c039f634636", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "ISTART = 0\nIBRION = 1\nEDIFFG = -0.001\nENCUT = 500\nNELM = 100\nNSW = 100\nIMAGES = {{ input.INTERMEDIATE_IMAGES.length or neb.nImages }}\nSPRING = -5\nISPIN = 2\n", "contextProviders": [{ "name": "NEBFormDataManager" }, { "name": "VASPNEBInputDataManager" }], "executableName": "vasp", "name": "INCAR", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "KPOINTS", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "vasp_neb", "postProcessors": [], "preProcessors": [], "results": [{ "name": "reaction_energy_barrier" }, { "name": "reaction_energy_profile" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, "vasp/prepare_images.json": { "_id": "c9b7ad2a-5207-5e41-9b66-28474a8921f8", "application": { "name": "vasp" }, "isDraft": false, "isMultiMaterial": true, "model": { "method": { "data": {}, "subtype": "unknown", "type": "unknown" }, "subtype": "unknown", "type": "unknown" }, "name": "Prepare Directories", "properties": [], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "name": "shell", "schemaVersion": "2022.8.16", "shortName": "sh", "summary": "Shell Script", "version": "5.1.8" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "sh", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "shell", "executableName": "sh", "input": [{ "name": "bash_vasp_prepare_neb_images.sh" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bash_vasp_prepare_neb_images", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "dc397ead-54ad-513b-992e-aedd54576409", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "shell", "content": "#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR <=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"e5bee93f-2b6b-5d91-9a53-5ed309a918d3","name":"Find ESP Value","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Find Extrema","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"python-find-extrema","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"generic:processing:find_extrema:scipy","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Average ESP Value","type":"assignment","operand":"AVG_ESP","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/average_electrostatic_potential_via_band_structure.json b/dist/js/runtime_data/subworkflows/espresso/average_electrostatic_potential_via_band_structure.json index 67a886c1..ca8377cb 100644 --- a/dist/js/runtime_data/subworkflows/espresso/average_electrostatic_potential_via_band_structure.json +++ b/dist/js/runtime_data/subworkflows/espresso/average_electrostatic_potential_via_band_structure.json @@ -1 +1 @@ -{"isMultiMaterial":true,"_id":"09f5f4ff-7dbd-59ae-ad27-5af1bdfc2bd0","name":"Band Structure + average ESP","application":{"name":"espresso"},"properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"name":"Set Material Index","type":"assignment","operand":"MATERIAL_INDEX","value":0,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"2d360607-c739-54ad-97a0-8a83f0971f2c","head":true,"next":"9fc7a088-5533-5f70-bb33-f676ec65f565","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"pw-bands-calculate-band-gap","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a667d9fd-35d5-5897-be0e-fa0247233649","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"pp_electrostatic_potential","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"average-electrostatic-potential","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"average_potential","results":[{"name":"average_potential_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"isMultiMaterial":true,"_id":"09f5f4ff-7dbd-59ae-ad27-5af1bdfc2bd0","name":"Band Structure + average ESP","application":{"name":"espresso"},"properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"name":"Set Material Index","type":"assignment","operand":"MATERIAL_INDEX","value":0,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"2d360607-c739-54ad-97a0-8a83f0971f2c","head":true,"next":"9fc7a088-5533-5f70-bb33-f676ec65f565","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"pw-bands-calculate-band-gap","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pw-bands-calculate-band-gap","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a667d9fd-35d5-5897-be0e-fa0247233649","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select indirect band gap","type":"assignment","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"next":"08819369-b541-5b51-8a40-0ee135039482","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Valence Band Maximum","type":"assignment","operand":"VBM","value":"BAND_GAP_INDIRECT['eigenvalueValence']","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Electrostatic Potential (ESP)","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"average-electrostatic-potential","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"average ESP","head":false,"results":[{"name":"average_potential_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"average-electrostatic-potential","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"average.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"average_potential_profile"}],"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"monitors":[{"name":"standard_output"}],"name":"average_potential","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set Macroscopically Averaged ESP Data","type":"assignment","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/band_gap.json b/dist/js/runtime_data/subworkflows/espresso/band_gap.json index 5e08d5ac..335c7d3a 100644 --- a/dist/js/runtime_data/subworkflows/espresso/band_gap.json +++ b/dist/js/runtime_data/subworkflows/espresso/band_gap.json @@ -1 +1 @@ -{"_id":"233bb8cf-3b4a-5378-84d9-a6a95a2ab43d","name":"Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_nscf","results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"233bb8cf-3b4a-5378-84d9-a6a95a2ab43d","name":"Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_nscf","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/band_gap_hse_dos.json b/dist/js/runtime_data/subworkflows/espresso/band_gap_hse_dos.json index c9f8edd3..30753c19 100644 --- a/dist/js/runtime_data/subworkflows/espresso/band_gap_hse_dos.json +++ b/dist/js/runtime_data/subworkflows/espresso/band_gap_hse_dos.json @@ -1 +1 @@ -{"_id":"f1341a29-777d-5ca3-8933-78a5e0d3f6f2","name":"HSE Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"hybrid","functional":"hse06","method":{"type":"pseudopotential","subtype":"us","data":{}}},"units":[{"type":"execution","name":"pw_scf_hse","head":true,"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f494cdb2-304f-5da2-b979-ce3fbba3a6c4","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf_hse","results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_hse.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = {% if kgrid.dimensions[0]%2 == 0 %}{{kgrid.dimensions[0]/2}}{% else %}{{(kgrid.dimensions[0]+1)/2}}{% endif %}, nqx2 = {% if kgrid.dimensions[1]%2 == 0 %}{{kgrid.dimensions[1]/2}}{% else %}{{(kgrid.dimensions[1]+1)/2}}{% endif %}, nqx3 = {% if kgrid.dimensions[2]%2 == 0 %}{{kgrid.dimensions[2]/2}}{% else %}{{(kgrid.dimensions[2]+1)/2}}{% endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{% if d%2 == 0 %}{{d}} {% else %}{{d+1}} {% endif %}{% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_hse.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"projwfc","results":[{"name":"density_of_states"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"f1341a29-777d-5ca3-8933-78a5e0d3f6f2","name":"HSE Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"hybrid","functional":"hse06","method":{"type":"pseudopotential","subtype":"us","data":{}}},"units":[{"type":"execution","name":"pw_scf_hse","head":true,"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f494cdb2-304f-5da2-b979-ce3fbba3a6c4","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"band_gaps"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_hse.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_hse","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n ecutfock = 100\n occupations = 'smearing'\n degauss = 0.005\n input_dft='hse',\n nqx1 = {% if kgrid.dimensions[0]%2 == 0 %}{{kgrid.dimensions[0]/2}}{% else %}{{(kgrid.dimensions[0]+1)/2}}{% endif %}, nqx2 = {% if kgrid.dimensions[1]%2 == 0 %}{{kgrid.dimensions[1]/2}}{% else %}{{(kgrid.dimensions[1]+1)/2}}{% endif %}, nqx3 = {% if kgrid.dimensions[2]%2 == 0 %}{{kgrid.dimensions[2]/2}}{% else %}{{(kgrid.dimensions[2]+1)/2}}{% endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{% if d%2 == 0 %}{{d}} {% else %}{{d+1}} {% endif %}{% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_hse.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"density_of_states"}],"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":[{"name":"standard_output"}],"name":"projwfc","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/band_structure.json b/dist/js/runtime_data/subworkflows/espresso/band_structure.json index f12c9b75..36d640cd 100644 --- a/dist/js/runtime_data/subworkflows/espresso/band_structure.json +++ b/dist/js/runtime_data/subworkflows/espresso/band_structure.json @@ -1 +1 @@ -{"_id":"26d32e68-c2b5-50e9-8933-15f684fcc039","name":"Band Structure","application":{"name":"espresso"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"d618df45-5af3-5da5-8882-d74a27e00b04","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"26d32e68-c2b5-50e9-8933-15f684fcc039","name":"Band Structure","application":{"name":"espresso"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"d618df45-5af3-5da5-8882-d74a27e00b04","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/band_structure_dos.json b/dist/js/runtime_data/subworkflows/espresso/band_structure_dos.json index c8153eba..e2f0b20d 100644 --- a/dist/js/runtime_data/subworkflows/espresso/band_structure_dos.json +++ b/dist/js/runtime_data/subworkflows/espresso/band_structure_dos.json @@ -1 +1 @@ -{"_id":"fa594399-6b98-5d79-986c-0713601dc06c","name":"Band Structure + Density of States","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"d618df45-5af3-5da5-8882-d74a27e00b04","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_nscf","results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"projwfc","results":[{"name":"density_of_states"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"fa594399-6b98-5d79-986c-0713601dc06c","name":"Band Structure + Density of States","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"d618df45-5af3-5da5-8882-d74a27e00b04","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_nscf","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"density_of_states"}],"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":[{"name":"standard_output"}],"name":"projwfc","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/band_structure_hse.json b/dist/js/runtime_data/subworkflows/espresso/band_structure_hse.json index a552b514..2e9e3bd4 100644 --- a/dist/js/runtime_data/subworkflows/espresso/band_structure_hse.json +++ b/dist/js/runtime_data/subworkflows/espresso/band_structure_hse.json @@ -1 +1 @@ -{"_id":"ef3089f3-7460-56f2-9aa2-172d5339d3be","name":"Band Structure - HSE","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"hybrid","functional":"hse06","method":{"type":"pseudopotential","subtype":"us","data":{}}},"units":[{"type":"execution","name":"pw_scf_bands_hse","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"08bd7e4a-2454-53b7-8cc9-9a95975f7e6f","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf_bands_hse","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_bands_hse.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n {% for d in qgrid.dimensions -%}\n nqx{{loop.index}} = {{d}}\n {% endfor %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal\n{{ '{{' }} {{ explicitKPath.length }} {% raw %} + KPOINTS|length {% endraw %} {{ '}}' }}\n{% raw %}\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n{% endraw %}\n{% for point in explicitKPath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}0.0000001\n{% endfor %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPathFormDataManager"}],"executableName":"pw.x","name":"pw_scf_bands_hse.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"ef3089f3-7460-56f2-9aa2-172d5339d3be","name":"Band Structure - HSE","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"hybrid","functional":"hse06","method":{"type":"pseudopotential","subtype":"us","data":{}}},"units":[{"type":"execution","name":"pw_scf_bands_hse","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"08bd7e4a-2454-53b7-8cc9-9a95975f7e6f","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_bands_hse.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_bands_hse","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n input_dft = 'hse',\n {% for d in qgrid.dimensions -%}\n nqx{{loop.index}} = {{d}}\n {% endfor %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal\n{{ '{{' }} {{ explicitKPath.length }} {% raw %} + KPOINTS|length {% endraw %} {{ '}}' }}\n{% raw %}\n{% for point in KPOINTS -%}\n {% for d in point.coordinates %}{{ \"%14.9f\"|format(d) }} {% endfor -%}{{ point.weight }}\n{% endfor %}\n{% endraw %}\n{% for point in explicitKPath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}0.0000001\n{% endfor %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPathFormDataManager"}],"executableName":"pw.x","name":"pw_scf_bands_hse.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/band_structure_magn.json b/dist/js/runtime_data/subworkflows/espresso/band_structure_magn.json index f3bbf528..dda60c11 100644 --- a/dist/js/runtime_data/subworkflows/espresso/band_structure_magn.json +++ b/dist/js/runtime_data/subworkflows/espresso/band_structure_magn.json @@ -1 +1 @@ -{"_id":"4a7dced1-224e-57d7-a616-cbad99062c7b","name":"Spin magnetic bandstructure","application":{"name":"espresso"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf_magn","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"c229d2a0-3c19-5f13-b3e0-ceb86cb9fbc1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf_magn","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_magn.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_magn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands_magn","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands_magn","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_magn.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_magn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands_spin_up","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands_spin_up","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_up.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_up.dat'{% endraw %}\n spin_component = 1\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_up.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands_spin_dn","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands_spin_dn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_dn.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_dn.dat'{% endraw %}\n spin_component = 2\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_dn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"4a7dced1-224e-57d7-a616-cbad99062c7b","name":"Spin magnetic bandstructure","application":{"name":"espresso"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf_magn","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"c229d2a0-3c19-5f13-b3e0-ceb86cb9fbc1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_magn.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_magn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_magn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands_magn","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"ea06c333-0cc7-51d4-bd98-cc53fa0844d1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_magn.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands_magn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n nspin = 2\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if collinearMagnetization.isTotalMagnetization %}\n tot_magnetization = {{ collinearMagnetization.totalMagnetization }}\n{%- else %}\n{%- for item in collinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"CollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_magn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands_spin_up","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"a8e4de4b-1f55-50e8-a712-ce0b37c04752","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_up.in"}],"monitors":[{"name":"standard_output"}],"name":"bands_spin_up","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_up.dat'{% endraw %}\n spin_component = 1\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_up.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands_spin_dn","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"fd937050-a3f3-5d4d-bb50-d150a93ea5e0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands_spin_dn.in"}],"monitors":[{"name":"standard_output"}],"name":"bands_spin_dn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands_dn.dat'{% endraw %}\n spin_component = 2\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands_spin_dn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/band_structure_soc.json b/dist/js/runtime_data/subworkflows/espresso/band_structure_soc.json index 675a2665..77f8c558 100644 --- a/dist/js/runtime_data/subworkflows/espresso/band_structure_soc.json +++ b/dist/js/runtime_data/subworkflows/espresso/band_structure_soc.json @@ -1 +1 @@ -{"_id":"51e6fb82-538a-58ee-8d4e-991c8446f657","name":"Spin orbit coupling bandstructure","application":{"name":"espresso"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"nc-fr","data":{"searchText":"nc-fr"}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf_soc","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"74ec024a-f247-5f15-9c21-cc169bcb62c7","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf_soc","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_soc.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_soc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands_soc","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands_soc","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_soc.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_soc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"51e6fb82-538a-58ee-8d4e-991c8446f657","name":"Spin orbit coupling bandstructure","application":{"name":"espresso"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"nc-fr","data":{"searchText":"nc-fr"}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf_soc","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"74ec024a-f247-5f15-9c21-cc169bcb62c7","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_soc.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_soc","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n{%- if nonCollinearMagnetization.isExistingChargeDensity %}\n startingpot = 'file'\n{%- endif %}\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_scf_soc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_bands_soc","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"cee6ae30-cf34-5138-bdc5-5c57c2a6de5b","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands_soc.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands_soc","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP_WITH_LABELS }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n noncolin = .true.\n lspinorb = .true.\n{%- if nonCollinearMagnetization.isStartingMagnetization %}\n{%- for item in nonCollinearMagnetization.startingMagnetization %}\n starting_magnetization({{ item.index }}) = {{ item.value }} {% endfor -%}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization %}\n constrained_magnetization = '{{ nonCollinearMagnetization.constrainedMagnetization.constrainType }}'\n lambda = {{ nonCollinearMagnetization.constrainedMagnetization.lambda }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isConstrainedMagnetization and nonCollinearMagnetization.isFixedMagnetization %}\n fixed_magnetization(1) = {{ nonCollinearMagnetization.fixedMagnetization.x }}\n fixed_magnetization(2) = {{ nonCollinearMagnetization.fixedMagnetization.y }}\n fixed_magnetization(3) = {{ nonCollinearMagnetization.fixedMagnetization.z }}\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and nonCollinearMagnetization.lforcet %}\n lforcet = .true.\n{%- endif %}\n{%- if nonCollinearMagnetization.isExistingChargeDensity and not nonCollinearMagnetization.lforcet %}\n lforcet = .false.\n{%- endif %}\n{%- if nonCollinearMagnetization.isArbitrarySpinDirection %}\n{%- for item in nonCollinearMagnetization.spinAngles %}\n angle1({{ item.index }}) = {{ item.angle1 }}\n angle2({{ item.index }}) = {{ item.angle2 }} {% endfor %}\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES_WITH_LABELS -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"NonCollinearMagnetizationDataManager"}],"executableName":"pw.x","name":"pw_bands_soc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/dielectric_tensor.json b/dist/js/runtime_data/subworkflows/espresso/dielectric_tensor.json index 053d11a5..2d6a8acb 100644 --- a/dist/js/runtime_data/subworkflows/espresso/dielectric_tensor.json +++ b/dist/js/runtime_data/subworkflows/espresso/dielectric_tensor.json @@ -1 +1 @@ -{"_id":"38340b52-83ad-5862-bc18-c140bdc0cb72","name":"Compute Dielectric Function","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","dielectric_tensor","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"nc","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b230ec3-0791-52f7-a4db-625390b8718f","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set No-Symmetry Flag","type":"assignment","operand":"NO_SYMMETRY_NO_INVERSION","value":true,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"3b230ec3-0791-52f7-a4db-625390b8718f","head":false,"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_nscf","results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Compute dielectric function","head":false,"results":[{"name":"dielectric_tensor"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"epsilon.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"dielectric_tensor","results":[{"name":"dielectric_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"epsilon.x","input":[{"name":"epsilon.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n","contextProviders":[],"executableName":"epsilon.x","name":"epsilon.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"38340b52-83ad-5862-bc18-c140bdc0cb72","name":"Compute Dielectric Function","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","dielectric_tensor","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"nc","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b230ec3-0791-52f7-a4db-625390b8718f","schemaVersion":"2022.8.16","isDefault":false},{"name":"Set No-Symmetry Flag","type":"assignment","operand":"NO_SYMMETRY_NO_INVERSION","value":true,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"3b230ec3-0791-52f7-a4db-625390b8718f","head":false,"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_nscf","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Compute dielectric function","head":false,"results":[{"name":"dielectric_tensor"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"epsilon.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"dielectric_tensor"}],"applicationName":"espresso","executableName":"epsilon.x","input":[{"name":"epsilon.in"}],"monitors":[{"name":"standard_output"}],"name":"dielectric_tensor","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&inputpp\n calculation = \"eps\"\n prefix = \"__prefix__\"\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n\n&energy_grid\n smeartype = \"gauss\"\n intersmear = 0.2\n intrasmear = 0.0\n wmin = 0.0\n wmax = 30.0\n nw = 500\n shift = 0.0\n/\n","contextProviders":[],"executableName":"epsilon.x","name":"epsilon.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/dos.json b/dist/js/runtime_data/subworkflows/espresso/dos.json index 289bfc41..da9087cd 100644 --- a/dist/js/runtime_data/subworkflows/espresso/dos.json +++ b/dist/js/runtime_data/subworkflows/espresso/dos.json @@ -1 +1 @@ -{"_id":"2cf317f3-3306-5a96-bc9b-e9103ebcd5be","name":"Density of States","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_nscf","results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"projwfc","results":[{"name":"density_of_states"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"2cf317f3-3306-5a96-bc9b-e9103ebcd5be","name":"Density of States","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_nscf","head":false,"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"7b4c726e-3c46-501a-9a3a-ca19e06de5f0","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"fermi_energy"},{"name":"band_gaps"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_nscf.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_nscf","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'nscf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n{%- if subworkflowContext.NO_SYMMETRY_NO_INVERSION %}\n nosym = .true.\n noinv = .true.\n{%- endif %}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_nscf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"projwfc","head":false,"results":[{"name":"density_of_states"}],"monitors":[{"name":"standard_output"}],"flowchartId":"3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"projwfc.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"density_of_states"}],"applicationName":"espresso","executableName":"projwfc.x","input":[{"name":"projwfc.in"}],"monitors":[{"name":"standard_output"}],"name":"projwfc","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&PROJWFC\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n degauss = 0.01\n deltaE = 0.05\n/\n","contextProviders":[],"executableName":"projwfc.x","name":"projwfc.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/electronic_density_mesh.json b/dist/js/runtime_data/subworkflows/espresso/electronic_density_mesh.json index f79d505c..675dda1c 100644 --- a/dist/js/runtime_data/subworkflows/espresso/electronic_density_mesh.json +++ b/dist/js/runtime_data/subworkflows/espresso/electronic_density_mesh.json @@ -1 +1 @@ -{"_id":"e2749c5a-fcd9-589c-819b-8b88c5c90924","name":"Electronic Density Mesh","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pp_density","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"pp_density","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_density.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_density.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"e2749c5a-fcd9-589c-819b-8b88c5c90924","name":"Electronic Density Mesh","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pp_density","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"e1a6e1e9-7994-5cd0-98d7-ae8909a10061","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_density.in"}],"monitors":[{"name":"standard_output"}],"name":"pp_density","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 0\n/\n&PLOT\n iflag = 3\n output_format = 5\n fileout ='density.xsf'\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_density.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/esm.json b/dist/js/runtime_data/subworkflows/espresso/esm.json index 67754820..857dce20 100644 --- a/dist/js/runtime_data/subworkflows/espresso/esm.json +++ b/dist/js/runtime_data/subworkflows/espresso/esm.json @@ -1 +1 @@ -{"_id":"0de669f6-a455-5dae-b331-19dc85f7090f","name":"Effective Screening Medium (ESM)","application":{"name":"espresso"},"properties":["atomic_forces","charge_density_profile","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_esm","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"2f487bc6-c237-53e4-bad5-be60369662cb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_esm","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"0de669f6-a455-5dae-b331-19dc85f7090f","name":"Effective Screening Medium (ESM)","application":{"name":"espresso"},"properties":["atomic_forces","charge_density_profile","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_esm","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"2f487bc6-c237-53e4-bad5-be60369662cb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_esm","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/esm_relax.json b/dist/js/runtime_data/subworkflows/espresso/esm_relax.json index 31c42df5..bb6d87ac 100644 --- a/dist/js/runtime_data/subworkflows/espresso/esm_relax.json +++ b/dist/js/runtime_data/subworkflows/espresso/esm_relax.json @@ -1 +1 @@ -{"_id":"69728792-afeb-50aa-9b4e-6974a90f676a","name":"Effective Screening Medium (ESM) Relax","application":{"name":"espresso"},"properties":["atomic_forces","charge_density_profile","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_esm_relax","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"a2bec506-1fdd-5125-a787-85f31cde20c1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_esm_relax","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm_relax.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"69728792-afeb-50aa-9b4e-6974a90f676a","name":"Effective Screening Medium (ESM) Relax","application":{"name":"espresso"},"properties":["atomic_forces","charge_density_profile","fermi_energy","potential_profile","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_esm_relax","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"a2bec506-1fdd-5125-a787-85f31cde20c1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"potential_profile"},{"name":"charge_density_profile"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_esm_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_esm_relax","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n assume_isolated = 'esm'\n esm_bc = '{{ boundaryConditions.type }}'\n fcp_mu = {{ boundaryConditions.targetFermiEnergy }}\n esm_w = {{ boundaryConditions.offset }}\n esm_efield = {{ boundaryConditions.electricField }}\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"},{"name":"BoundaryConditionsFormDataManager"}],"executableName":"pw.x","name":"pw_esm_relax.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/espresso_extract_kpoints.json b/dist/js/runtime_data/subworkflows/espresso/espresso_extract_kpoints.json index d21ade7f..393b89b2 100644 --- a/dist/js/runtime_data/subworkflows/espresso/espresso_extract_kpoints.json +++ b/dist/js/runtime_data/subworkflows/espresso/espresso_extract_kpoints.json @@ -1 +1 @@ -{"_id":"a2785cc5-2427-5c7a-b30f-7077475b948c","name":"Extract KPOINTS","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Extract kpoints","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"a716b133-2d04-50b5-b497-100265e3fa24","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"espresso_extract_kpoints","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"espresso_extract_kpoints.py"},{"name":"requirements.txt","templateName":"requirements_empty.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_extract_kpoints.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"a2785cc5-2427-5c7a-b30f-7077475b948c","name":"Extract KPOINTS","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Extract kpoints","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"a716b133-2d04-50b5-b497-100265e3fa24","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"espresso_extract_kpoints.py"},{"name":"requirements.txt","templateName":"requirements_empty.txt"}],"monitors":[{"name":"standard_output"}],"name":"espresso_extract_kpoints","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"import json\nimport re\n\ndouble_regex = r'[-+]?\\d*\\.\\d+(?:[eE][-+]?\\d+)?'\nregex = r\"\\s+k\\(\\s+\\d*\\)\\s+=\\s+\\(\\s+({0})\\s+({0})\\s+({0})\\),\\s+wk\\s+=\\s+({0}).+?\\n\".format(double_regex)\n\nwith open(\"pw_scf.out\") as f:\n text = f.read()\n\npattern = re.compile(regex, re.I | re.MULTILINE)\nmatch = pattern.findall(text[text.rfind(\" cryst. coord.\"):])\nkpoints = [{\"coordinates\": list(map(float, m[:3])), \"weight\": float(m[3])} for m in match]\nprint(json.dumps({\"name\": \"KPOINTS\", \"value\": kpoints, \"scope\": \"global\"}, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_extract_kpoints.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Please add any packages required for this unit below following #\n# the requirements.txt specification: #\n# https://pip.pypa.io/en/stable/reference/requirements-file-format/ #\n# ------------------------------------------------------------------ #\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/espresso_xml_get_qpt_irr.json b/dist/js/runtime_data/subworkflows/espresso/espresso_xml_get_qpt_irr.json index d2469812..9c29ce0b 100644 --- a/dist/js/runtime_data/subworkflows/espresso/espresso_xml_get_qpt_irr.json +++ b/dist/js/runtime_data/subworkflows/espresso/espresso_xml_get_qpt_irr.json @@ -1 +1 @@ -{"_id":"e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a","name":"espresso-xml-get-qpt-irr","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a","name":"espresso-xml-get-qpt-irr","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"python","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"espresso_xml_get_qpt_irr.py"}],"monitors":[{"name":"standard_output"}],"name":"espresso_xml_get_qpt_irr","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ---------------------------------------------------------- #\n# #\n# This script extracts q-points and irreducible #\n# representations from Quantum ESPRESSO xml data. #\n# #\n# Expects control_ph.xml and patterns.?.xml files to exist #\n# #\n# ---------------------------------------------------------- #\nfrom __future__ import print_function\n\nimport json\nfrom xml.dom import minidom\n\n{# JOB_WORK_DIR will be initialized at runtime => avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_xml_get_qpt_irr.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"assignment","schemaVersion":"2022.8.16","isDefault":false},{"name":"assignment","type":"assignment","input":[{"scope":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","name":"STDOUT"}],"operand":"Q_POINTS","value":"json.loads(STDOUT)","preProcessors":[],"postProcessors":[],"monitors":[],"results":[],"flowchartId":"assignment","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/fixed_cell_relaxation.json b/dist/js/runtime_data/subworkflows/espresso/fixed_cell_relaxation.json index ba1ea49f..80acde59 100644 --- a/dist/js/runtime_data/subworkflows/espresso/fixed_cell_relaxation.json +++ b/dist/js/runtime_data/subworkflows/espresso/fixed_cell_relaxation.json @@ -1 +1 @@ -{"_id":"fb75e249-5489-5146-bd8a-786d33330d9c","name":"Fixed-cell Relaxation","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"c42871f6-ab79-5987-b228-c3bd80f16ffd","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_relax","results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_relax.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"fb75e249-5489-5146-bd8a-786d33330d9c","name":"Fixed-cell Relaxation","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"c42871f6-ab79-5987-b228-c3bd80f16ffd","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_relax","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'relax'\n nstep = 50\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_relax.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/gw_band_structure_band_gap_full_frequency.json b/dist/js/runtime_data/subworkflows/espresso/gw_band_structure_band_gap_full_frequency.json index a7781f1e..e5db3bd1 100644 --- a/dist/js/runtime_data/subworkflows/espresso/gw_band_structure_band_gap_full_frequency.json +++ b/dist/js/runtime_data/subworkflows/espresso/gw_band_structure_band_gap_full_frequency.json @@ -1 +1 @@ -{"_id":"46bcdcc8-628e-518e-b8c3-9bf38d7a2aef","name":"Full Frequency GW Band Structure + Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{"searchText":".*dojo-oncv.*"}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"gw_bands_full_frequency","head":false,"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"gw.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"gw_bands_full_frequency","results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_full_frequency.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_full_frequency.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"46bcdcc8-628e-518e-b8c3-9bf38d7a2aef","name":"Full Frequency GW Band Structure + Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{"searchText":".*dojo-oncv.*"}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"gw_bands_full_frequency","head":false,"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d82a9858-3f20-5fcd-baeb-0f1d65e9e22e","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"gw.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_full_frequency.in"}],"monitors":[{"name":"standard_output"}],"name":"gw_bands_full_frequency","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of W in the convolution\n max_freq_coul = 200\n num_freq_coul = 51\n\n ! configuration for the correlation self energy\n ecut_corr = 6.0\n\n ! configuration for the exchange self energy\n ecut_exch = 15.0\n/\n\n&gw_output\n/\n\nFREQUENCIES\n35\n 0.0 0.0\n 0.0 0.3\n 0.0 0.9\n 0.0 1.8\n 0.0 3.0\n 0.0 4.5\n 0.0 6.3\n 0.0 8.4\n 0.0 10.8\n 0.0 13.5\n 0.0 16.5\n 0.0 19.8\n 0.0 23.4\n 0.0 27.3\n 0.0 31.5\n 0.0 36.0\n 0.0 40.8\n 0.0 45.9\n 0.0 51.3\n 0.0 57.0\n 0.0 63.0\n 0.0 69.3\n 0.0 75.9\n 0.0 82.8\n 0.0 90.0\n 0.0 97.5\n 0.0 105.3\n 0.0 113.4\n 0.0 121.8\n 0.0 130.5\n 0.0 139.5\n 0.0 148.8\n 0.0 158.4\n 0.0 168.3\n 0.0 178.5\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_full_frequency.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/gw_band_structure_band_gap_plasmon_pole.json b/dist/js/runtime_data/subworkflows/espresso/gw_band_structure_band_gap_plasmon_pole.json index 88978c5e..a00c91d5 100644 --- a/dist/js/runtime_data/subworkflows/espresso/gw_band_structure_band_gap_plasmon_pole.json +++ b/dist/js/runtime_data/subworkflows/espresso/gw_band_structure_band_gap_plasmon_pole.json @@ -1 +1 @@ -{"_id":"72b79a87-8eef-5fe2-9d6c-6c9c256dd56c","name":"Plasmon-Pole GW Band Structure + Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{"searchText":".*dojo-oncv.*"}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"gw_bands_plasmon_pole","head":false,"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"gw.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"gw_bands_plasmon_pole","results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_plasmon_pole.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_plasmon_pole.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"72b79a87-8eef-5fe2-9d6c-6c9c256dd56c","name":"Plasmon-Pole GW Band Structure + Band Gap","application":{"name":"espresso"},"properties":["atomic_forces","band_gaps","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{"searchText":".*dojo-oncv.*"}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"gw_bands_plasmon_pole","head":false,"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"monitors":[{"name":"standard_output"}],"flowchartId":"f9910952-eca9-5a5f-ae03-a0060ae2fc78","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"gw.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"},{"name":"fermi_energy"},{"name":"band_gaps"}],"applicationName":"espresso","executableName":"gw.x","input":[{"name":"gw_bands_plasmon_pole.in"}],"monitors":[{"name":"standard_output"}],"name":"gw_bands_plasmon_pole","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&gw_input\n\n ! see http://www.sternheimergw.org for more information.\n\n ! config of the scf run\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n\n ! the grid used for the linear response\n kpt_grid = {{ kgrid.dimensions|join(', ') }}\n qpt_grid = {{ qgrid.dimensions|join(', ') }}\n\n ! truncation (used for both correlation and exchange)\n truncation = '2d'\n\n ! number of bands for which the GW correction is calculated\n num_band = 8\n\n ! configuration of the Coulomb solver\n thres_coul = 1.0d-2\n\n ! configuration of W in the convolution\n model_coul = 'godby-needs'\n max_freq_coul = 120\n num_freq_coul = 35\n\n ! configuration of the Green solver\n thres_green = 1.0d-3\n max_iter_green = 300\n\n ! configuration for the correlation self energy\n ecut_corr = 5.0\n max_freq_corr = 100.0\n num_freq_corr = 11\n\n ! configuration for the exchange self energy\n ecut_exch = 20.0\n\n ! configuration for the output\n eta = 0.1\n min_freq_wind = -30.0\n max_freq_wind = 30.0\n num_freq_wind = 601\n/\n\n&gw_output\n/\n\nFREQUENCIES\n2\n 0.0 0.0\n 0.0 10.0\n/\n\nK_points\n{{ explicitKPath2PIBA.length }}\n{% for point in explicitKPath2PIBA -%}\n{% for coordinate in point.coordinates %}{{ coordinate }}{% endfor %}\n{% endfor %}\n/\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QGridFormDataManager"},{"name":"ExplicitKPath2PIBAFormDataManager"}],"executableName":"gw.x","name":"gw_bands_plasmon_pole.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/kpoint_convergence.json b/dist/js/runtime_data/subworkflows/espresso/kpoint_convergence.json index a0f296b9..d95ab3c2 100644 --- a/dist/js/runtime_data/subworkflows/espresso/kpoint_convergence.json +++ b/dist/js/runtime_data/subworkflows/espresso/kpoint_convergence.json @@ -1 +1 @@ -{"_id":"ff6a8fbc-2202-5786-9a26-67c843417d0b","name":"K-point Convergence","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-tolerance","head":true,"next":"init-increment","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-increment","head":false,"next":"init-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-result","head":false,"next":"init-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-parameter","head":false,"next":"pwscf-kpoint-convergence","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"pwscf-kpoint-convergence","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf_kpt_conv","results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_kpt_conv.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0{% endraw %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_kpt_conv.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"store-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"pwscf-kpoint-convergence"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"store-result","head":false,"next":"check-convergence","schemaVersion":"2022.8.16","isDefault":false},{"name":"check convergence","type":"condition","input":[],"statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"check-convergence","then":"convergence-is-reached","else":"update-result","head":false,"next":"update-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"update-result","head":false,"next":"increment-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"increment-parameter","next":"pwscf-kpoint-convergence","head":false,"schemaVersion":"2022.8.16","isDefault":false},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"convergence-is-reached","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"ff6a8fbc-2202-5786-9a26-67c843417d0b","name":"K-point Convergence","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-tolerance","head":true,"next":"init-increment","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-increment","head":false,"next":"init-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-result","head":false,"next":"init-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-parameter","head":false,"next":"pwscf-kpoint-convergence","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"pwscf-kpoint-convergence","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf_kpt_conv.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf_kpt_conv","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}} 0 0 0{% endraw %}\n","contextProviders":[{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf_kpt_conv.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"store-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"pwscf-kpoint-convergence"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"store-result","head":false,"next":"check-convergence","schemaVersion":"2022.8.16","isDefault":false},{"name":"check convergence","type":"condition","input":[],"statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"check-convergence","then":"convergence-is-reached","else":"update-result","head":false,"next":"update-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"update-result","head":false,"next":"increment-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"increment-parameter","next":"pwscf-kpoint-convergence","head":false,"schemaVersion":"2022.8.16","isDefault":false},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"convergence-is-reached","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/neb.json b/dist/js/runtime_data/subworkflows/espresso/neb.json index d2072f00..883f22d2 100644 --- a/dist/js/runtime_data/subworkflows/espresso/neb.json +++ b/dist/js/runtime_data/subworkflows/espresso/neb.json @@ -1 +1 @@ -{"isMultiMaterial":true,"_id":"c9034468-df28-5357-8912-02226f919042","name":"Nudged Elastic Band (NEB)","application":{"name":"espresso"},"properties":["reaction_energy_barrier","reaction_energy_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"neb","head":true,"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9f273ca0-d240-5b1f-89a9-64dd579304ac","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"neb.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"neb","results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"neb.x","input":[{"name":"neb.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = {{ 2 + (input.INTERMEDIATE_IMAGES.length or neb.nImages) }},\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_first = false %}\n{%- for position in input.FIRST_IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_first = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.FIRST_IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_first %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n{%- for IMAGE in input.INTERMEDIATE_IMAGES %}\nINTERMEDIATE_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_intermediate = false %}\n{%- for position in IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_intermediate = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_intermediate %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n{%- endfor %}\nLAST_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_last = false %}\n{%- for position in input.LAST_IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_last = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.LAST_IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_last %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nEND_POSITIONS\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nEND_ENGINE_INPUT\nEND\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"NEBFormDataManager"},{"name":"QENEBInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"neb.x","name":"neb.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"isMultiMaterial":true,"_id":"c9034468-df28-5357-8912-02226f919042","name":"Nudged Elastic Band (NEB)","application":{"name":"espresso"},"properties":["reaction_energy_barrier","reaction_energy_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"neb","head":true,"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9f273ca0-d240-5b1f-89a9-64dd579304ac","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"neb.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"applicationName":"espresso","executableName":"neb.x","input":[{"name":"neb.in"}],"monitors":[{"name":"standard_output"}],"name":"neb","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"BEGIN\nBEGIN_PATH_INPUT\n&PATH\n restart_mode = 'from_scratch'\n string_method = 'neb',\n nstep_path = 50,\n ds = 2.D0,\n opt_scheme = \"broyden\",\n num_of_images = {{ 2 + (input.INTERMEDIATE_IMAGES.length or neb.nImages) }},\n k_max = 0.3D0,\n k_min = 0.2D0,\n CI_scheme = \"auto\",\n path_thr = 0.1D0,\n/\nEND_PATH_INPUT\nBEGIN_ENGINE_INPUT\n&CONTROL\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.03\n nspin = 2\n starting_magnetization = 0.5\n/\n&ELECTRONS\n conv_thr = 1.D-8\n mixing_beta = 0.3\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nBEGIN_POSITIONS\nFIRST_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_first = false %}\n{%- for position in input.FIRST_IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_first = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.FIRST_IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_first %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n{%- for IMAGE in input.INTERMEDIATE_IMAGES %}\nINTERMEDIATE_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_intermediate = false %}\n{%- for position in IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_intermediate = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_intermediate %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\n{%- endfor %}\nLAST_IMAGE\nATOMIC_POSITIONS crystal\n{%- set print_constraints_last = false %}\n{%- for position in input.LAST_IMAGE %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints_last = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.LAST_IMAGE -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints_last %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nEND_POSITIONS\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\nEND_ENGINE_INPUT\nEND\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"NEBFormDataManager"},{"name":"QENEBInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"neb.x","name":"neb.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/ph_init_qpoints.json b/dist/js/runtime_data/subworkflows/espresso/ph_init_qpoints.json index 6bbc1d90..d590efed 100644 --- a/dist/js/runtime_data/subworkflows/espresso/ph_init_qpoints.json +++ b/dist/js/runtime_data/subworkflows/espresso/ph_init_qpoints.json @@ -1 +1 @@ -{"_id":"2f017bcb-f4ba-55b8-b939-1f780679a88e","name":"ph-init-qpoints","application":{"name":"espresso"},"properties":[],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"ph_init_qpoints","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"b8ea6a33-38f3-5434-b17e-b5eae8fff9fc","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_init_qpoints","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_init_qpoints.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_init_qpoints.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"2f017bcb-f4ba-55b8-b939-1f780679a88e","name":"ph-init-qpoints","application":{"name":"espresso"},"properties":[],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"ph_init_qpoints","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"b8ea6a33-38f3-5434-b17e-b5eae8fff9fc","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_init_qpoints.in"}],"monitors":[{"name":"standard_output"}],"name":"ph_init_qpoints","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .false.\n start_irr = 0\n last_irr = 0\n ldisp = .true.\n fildyn = 'dyn0'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_init_qpoints.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/ph_single_irr_qpt.json b/dist/js/runtime_data/subworkflows/espresso/ph_single_irr_qpt.json index 7090bf0f..1d8971d2 100644 --- a/dist/js/runtime_data/subworkflows/espresso/ph_single_irr_qpt.json +++ b/dist/js/runtime_data/subworkflows/espresso/ph_single_irr_qpt.json @@ -1 +1 @@ -{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","name":"ph-single-irr-qpt","application":{"name":"espresso"},"properties":[],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"ph_single_irr_qpt","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"8db9af08-d935-57a0-a824-e7db6d936de8","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_single_irr_qpt","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_single_irr_qpt.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_single_irr_qpt.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","name":"ph-single-irr-qpt","application":{"name":"espresso"},"properties":[],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"ph_single_irr_qpt","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"8db9af08-d935-57a0-a824-e7db6d936de8","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_single_irr_qpt.in"}],"monitors":[{"name":"standard_output"}],"name":"ph_single_irr_qpt","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_single_irr_qpt.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/phonon_dispersions.json b/dist/js/runtime_data/subworkflows/espresso/phonon_dispersions.json index 0eb8324f..27728412 100644 --- a/dist/js/runtime_data/subworkflows/espresso/phonon_dispersions.json +++ b/dist/js/runtime_data/subworkflows/espresso/phonon_dispersions.json @@ -1 +1 @@ -{"_id":"bfb69b48-8fbf-5a0d-8949-448f20754766","name":"Phonon Dispersions","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"13bcafce-56ef-5b47-b079-317495eb6933","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_grid","results":[{"name":"phonon_dos"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"q2r","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"matdyn_path","results":[{"name":"phonon_dispersions"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"bfb69b48-8fbf-5a0d-8949-448f20754766","name":"Phonon Dispersions","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"13bcafce-56ef-5b47-b079-317495eb6933","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dos"}],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":[{"name":"standard_output"}],"name":"ph_grid","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dispersions"}],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_path","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/phonon_dos.json b/dist/js/runtime_data/subworkflows/espresso/phonon_dos.json index bd28b9f5..2bae228d 100644 --- a/dist/js/runtime_data/subworkflows/espresso/phonon_dos.json +++ b/dist/js/runtime_data/subworkflows/espresso/phonon_dos.json @@ -1 +1 @@ -{"_id":"2232051b-9f2a-5a48-9b4d-6231eb6e8297","name":"Phonon Density of States","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"13bcafce-56ef-5b47-b079-317495eb6933","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_grid","results":[{"name":"phonon_dos"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"q2r","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"matdyn_grid","results":[{"name":"phonon_dos"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"2232051b-9f2a-5a48-9b4d-6231eb6e8297","name":"Phonon Density of States","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"13bcafce-56ef-5b47-b079-317495eb6933","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dos"}],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":[{"name":"standard_output"}],"name":"ph_grid","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dos"}],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/phonon_dos_dispersion.json b/dist/js/runtime_data/subworkflows/espresso/phonon_dos_dispersion.json index 4ccdfdb4..8e879586 100644 --- a/dist/js/runtime_data/subworkflows/espresso/phonon_dos_dispersion.json +++ b/dist/js/runtime_data/subworkflows/espresso/phonon_dos_dispersion.json @@ -1 +1 @@ -{"_id":"291d25cd-378a-5be7-9d85-c8013a4b165b","name":"Phonon Density of States + Dispersions","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"13bcafce-56ef-5b47-b079-317495eb6933","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_grid","results":[{"name":"phonon_dos"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"q2r","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"matdyn_grid","results":[{"name":"phonon_dos"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"matdyn_path","results":[{"name":"phonon_dispersions"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"291d25cd-378a-5be7-9d85-c8013a4b165b","name":"Phonon Density of States + Dispersions","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","phonon_dispersions","phonon_dos","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"13bcafce-56ef-5b47-b079-317495eb6933","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"13bcafce-56ef-5b47-b079-317495eb6933","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dos"}],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid.in"}],"monitors":[{"name":"standard_output"}],"name":"ph_grid","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n ldisp = .true.\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dos"}],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dispersions"}],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_path","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/phonon_reduce.json b/dist/js/runtime_data/subworkflows/espresso/phonon_reduce.json index 355773d1..096f512f 100644 --- a/dist/js/runtime_data/subworkflows/espresso/phonon_reduce.json +++ b/dist/js/runtime_data/subworkflows/espresso/phonon_reduce.json @@ -1 +1 @@ -{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","name":"reduce","application":{"name":"espresso"},"properties":["phonon_dispersions","phonon_dos"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"ph_grid_restart","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb206177-a4af-599a-81ba-6c88d24253b6","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_grid_restart","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid_restart.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid_restart.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"q2r","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"matdyn_grid","results":[{"name":"phonon_dos"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"matdyn_path","results":[{"name":"phonon_dispersions"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","name":"reduce","application":{"name":"espresso"},"properties":["phonon_dispersions","phonon_dos"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"ph_grid_restart","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb206177-a4af-599a-81ba-6c88d24253b6","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid_restart.in"}],"monitors":[{"name":"standard_output"}],"name":"ph_grid_restart","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid_restart.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"3b4507a7-9244-540b-abe0-66bceab700f5","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"q2r","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"q2r.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"monitors":[{"name":"standard_output"}],"name":"q2r","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8fe6a24b-c994-55a2-a448-88657292e8c2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_grid","head":false,"results":[{"name":"phonon_dos"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dos"}],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"a7fded20-889b-54fc-bbb0-456e82689ab1","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"matdyn_path","head":false,"results":[{"name":"phonon_dispersions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"matdyn.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"phonon_dispersions"}],"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"monitors":[{"name":"standard_output"}],"name":"matdyn_path","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/plot_wavefunction.json b/dist/js/runtime_data/subworkflows/espresso/plot_wavefunction.json index c3020c8d..bad53ca4 100644 --- a/dist/js/runtime_data/subworkflows/espresso/plot_wavefunction.json +++ b/dist/js/runtime_data/subworkflows/espresso/plot_wavefunction.json @@ -1 +1 @@ -{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","name":"Plot Wavefunction","application":{"name":"espresso"},"properties":["file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"plot WFN","head":true,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"57fca898-8e8b-5ef2-81a5-9d2b612bc18d","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"plot_wavefunction","results":[{"name":"file_content"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","name":"Plot Wavefunction","application":{"name":"espresso"},"properties":["file_content"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"plot WFN","head":true,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"57fca898-8e8b-5ef2-81a5-9d2b612bc18d","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"file_content"}],"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"monitors":[{"name":"standard_output"}],"name":"plot_wavefunction","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/post_processor.json b/dist/js/runtime_data/subworkflows/espresso/post_processor.json index 109d2e7f..7364bf18 100644 --- a/dist/js/runtime_data/subworkflows/espresso/post_processor.json +++ b/dist/js/runtime_data/subworkflows/espresso/post_processor.json @@ -1 +1 @@ -{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","name":"post-processor","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"name":"espresso_collect_dynmat","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_collect_dynmat.sh"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_collect_dynmat.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","name":"post-processor","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_collect_dynmat.sh"}],"monitors":[{"name":"standard_output"}],"name":"espresso_collect_dynmat","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_collect_dynmat.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/pre_processor.json b/dist/js/runtime_data/subworkflows/espresso/pre_processor.json index 3760c151..38f64a7c 100644 --- a/dist/js/runtime_data/subworkflows/espresso/pre_processor.json +++ b/dist/js/runtime_data/subworkflows/espresso/pre_processor.json @@ -1 +1 @@ -{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","name":"pre-processor","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"name":"espresso_link_outdir_save","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_link_outdir_save.sh"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_link_outdir_save.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","name":"pre-processor","application":{"name":"espresso"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_link_outdir_save.sh"}],"monitors":[{"name":"standard_output"}],"name":"espresso_link_outdir_save","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_link_outdir_save.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/pw_scf.json b/dist/js/runtime_data/subworkflows/espresso/pw_scf.json index 1fb0580f..523fe4eb 100644 --- a/dist/js/runtime_data/subworkflows/espresso/pw_scf.json +++ b/dist/js/runtime_data/subworkflows/espresso/pw_scf.json @@ -1 +1 @@ -{"_id":"f52b8039-83d0-5485-a1f1-0bc37cb01ed3","name":"pw-scf","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"f52b8039-83d0-5485-a1f1-0bc37cb01ed3","name":"pw-scf","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/recalculate_bands.json b/dist/js/runtime_data/subworkflows/espresso/recalculate_bands.json index 11bb9b8d..93937003 100644 --- a/dist/js/runtime_data/subworkflows/espresso/recalculate_bands.json +++ b/dist/js/runtime_data/subworkflows/espresso/recalculate_bands.json @@ -1 +1 @@ -{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","name":"Recalculate Bands","application":{"name":"espresso"},"properties":["band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_bands","head":true,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"bands","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","name":"Recalculate Bands","application":{"name":"espresso"},"properties":["band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_bands","head":true,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"}],"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"monitors":[{"name":"standard_output"}],"name":"pw_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"bands","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"bands.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"monitors":[{"name":"standard_output"}],"name":"bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/surface_energy.json b/dist/js/runtime_data/subworkflows/espresso/surface_energy.json index aaf73221..2ee54bbd 100644 --- a/dist/js/runtime_data/subworkflows/espresso/surface_energy.json +++ b/dist/js/runtime_data/subworkflows/espresso/surface_energy.json @@ -1 +1 @@ -{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","name":"Surface Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","name":"Surface Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"io","name":"io-slab","head":true,"results":[],"monitors":[],"flowchartId":"e463ef46-a36e-5168-87dd-e21eb980dfb8","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"subtype":"input","source":"api","input":[{"type":"api","endpoint":"materials","endpoint_options":{"params":{"query":"{'_id': MATERIAL_ID}","projection":"{}"}},"name":"DATA"}],"next":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","schemaVersion":"2022.8.16","isDefault":false},{"type":"assignment","name":"slab","head":false,"results":[],"monitors":[],"flowchartId":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"input":[{"name":"DATA","scope":"e463ef46-a36e-5168-87dd-e21eb980dfb8"}],"operand":"SLAB","value":"DATA[0]","next":"44263820-0c80-5bd1-b854-9da8d198eac1","schemaVersion":"2022.8.16","isDefault":false},{"type":"io","name":"io-bulk","head":false,"results":[],"monitors":[],"flowchartId":"44263820-0c80-5bd1-b854-9da8d198eac1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"subtype":"input","source":"api","input":[{"type":"api","endpoint":"materials","endpoint_options":{"params":{"query":"{'_id': SLAB.metadata.bulkId}","projection":"{}"}},"name":"DATA"}],"next":"b70656f1-a394-57f4-b4de-00096969df4b","schemaVersion":"2022.8.16","isDefault":false},{"type":"assignment","name":"bulk","head":false,"results":[],"monitors":[],"flowchartId":"b70656f1-a394-57f4-b4de-00096969df4b","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"input":[{"name":"DATA","scope":"44263820-0c80-5bd1-b854-9da8d198eac1"}],"operand":"BULK","value":"DATA[0] if DATA else None","next":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","schemaVersion":"2022.8.16","isDefault":false},{"type":"assertion","name":"assert-bulk","head":false,"results":[],"monitors":[],"flowchartId":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"statement":"BULK != None","errorMessage":"Bulk material does not exist!","next":"490635e0-c593-5809-9eb2-c794b96cfed1","schemaVersion":"2022.8.16","isDefault":false},{"type":"io","name":"io-e-bulk","head":false,"results":[],"monitors":[],"flowchartId":"490635e0-c593-5809-9eb2-c794b96cfed1","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"subtype":"input","source":"api","input":[{"type":"api","endpoint":"refined-properties","endpoint_options":{"params":{"query":"{ 'exabyteId': BULK.exabyteId, 'data.name': 'total_energy', 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} }","projection":"{'sort': {'precision.value': -1}, 'limit': 1}"}},"name":"DATA"}],"next":"bbe13b97-4243-5a85-8f61-a279d0b797aa","schemaVersion":"2022.8.16","isDefault":false},{"type":"assignment","name":"e-bulk","head":false,"results":[],"monitors":[],"flowchartId":"bbe13b97-4243-5a85-8f61-a279d0b797aa","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"input":[{"name":"DATA","scope":"490635e0-c593-5809-9eb2-c794b96cfed1"}],"operand":"E_BULK","value":"DATA[0].data.value if DATA else None","next":"a06c9f43-7670-5fd0-ac42-7028a472235a","schemaVersion":"2022.8.16","isDefault":false},{"type":"assertion","name":"assert-e-bulk","head":false,"results":[],"monitors":[],"flowchartId":"a06c9f43-7670-5fd0-ac42-7028a472235a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"statement":"E_BULK != None","errorMessage":"E_BULK does not exist!","next":"cdf210be-26ed-585a-b4ac-d55795ba2975","schemaVersion":"2022.8.16","isDefault":false},{"type":"assignment","name":"surface","head":false,"results":[],"monitors":[],"flowchartId":"cdf210be-26ed-585a-b4ac-d55795ba2975","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"input":[],"operand":"A","value":"np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))","next":"ffa8e43d-096a-555b-b8d0-6d283365ef47","schemaVersion":"2022.8.16","isDefault":false},{"type":"assignment","name":"n-bulk","head":false,"results":[],"monitors":[],"flowchartId":"ffa8e43d-096a-555b-b8d0-6d283365ef47","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"input":[],"operand":"N_BULK","value":"len(BULK.basis.elements)","next":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","schemaVersion":"2022.8.16","isDefault":false},{"type":"assignment","name":"n-slab","head":false,"results":[],"monitors":[],"flowchartId":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"input":[],"operand":"N_SLAB","value":"len(SLAB.basis.elements)","next":"9fc7a088-5533-5f70-bb33-f676ec65f565","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pw_scf","head":false,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"fcd88119-817c-5ac1-a430-ba892ac743eb","schemaVersion":"2022.8.16","isDefault":false},{"type":"assignment","name":"e-slab","head":false,"results":[],"monitors":[],"flowchartId":"fcd88119-817c-5ac1-a430-ba892ac743eb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"input":[{"name":"total_energy","scope":"9fc7a088-5533-5f70-bb33-f676ec65f565"}],"operand":"E_SLAB","value":"total_energy","next":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","schemaVersion":"2022.8.16","isDefault":false},{"type":"assignment","name":"surface-energy","head":false,"results":[{"name":"surface_energy"}],"monitors":[],"flowchartId":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"input":[],"operand":"SURFACE_ENERGY","value":"1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))","schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/espresso/total_energy.json b/dist/js/runtime_data/subworkflows/espresso/total_energy.json index dba79add..2165558b 100644 --- a/dist/js/runtime_data/subworkflows/espresso/total_energy.json +++ b/dist/js/runtime_data/subworkflows/espresso/total_energy.json @@ -1 +1 @@ -{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","name":"Total Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false,"tags":["default"]} +{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","name":"Total Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false,"tags":["default"]} diff --git a/dist/js/runtime_data/subworkflows/espresso/variable_cell_relaxation.json b/dist/js/runtime_data/subworkflows/espresso/variable_cell_relaxation.json index b8ed9a46..d51d1db5 100644 --- a/dist/js/runtime_data/subworkflows/espresso/variable_cell_relaxation.json +++ b/dist/js/runtime_data/subworkflows/espresso/variable_cell_relaxation.json @@ -1 +1 @@ -{"systemName":"espresso-variable-cell-relaxation","_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","name":"Variable-cell Relaxation","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_vc-relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_vc-relax","results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false,"tags":["variable-cell_relaxation"]} +{"systemName":"espresso-variable-cell-relaxation","_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","name":"Variable-cell Relaxation","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_vc-relax","head":true,"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false,"tags":["variable-cell_relaxation"]} diff --git a/dist/js/runtime_data/subworkflows/espresso/wavefunction_amplitude.json b/dist/js/runtime_data/subworkflows/espresso/wavefunction_amplitude.json index aa17c8c3..04fb74a0 100644 --- a/dist/js/runtime_data/subworkflows/espresso/wavefunction_amplitude.json +++ b/dist/js/runtime_data/subworkflows/espresso/wavefunction_amplitude.json @@ -1 +1 @@ -{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","name":"Wavefunction Amplitude","application":{"name":"espresso"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"band_structure"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"pw-scf","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"extract-band-energies","schemaVersion":"2022.8.16","isDefault":false},{"name":"Extract Band Energies","type":"assignment","operand":"band_energies","value":"[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]","input":[{"name":"band_structure","scope":"pw-scf"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"extract-band-energies","head":false,"next":"indices-below-fermi","schemaVersion":"2022.8.16","isDefault":false},{"name":"Find Indices Below Fermi","type":"assignment","operand":"indices_below_fermi","value":"[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]","input":[{"name":"fermi_energy","scope":"pw-scf"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"indices-below-fermi","head":false,"next":"8771dc7f-878e-5f13-a840-a3a416854f1e","schemaVersion":"2022.8.16","isDefault":false},{"name":"Store Band Below EF","type":"assignment","operand":"KBAND_VALUE_BELOW_EF","value":"indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8771dc7f-878e-5f13-a840-a3a416854f1e","head":false,"next":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select Band","type":"assignment","operand":"KBAND_VALUE","value":"KBAND_VALUE_BELOW_EF","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","head":false,"next":"pp-wfn","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pp_wfn","head":false,"results":[{"name":"wavefunction_amplitude"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pp-wfn","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"pp_wfn","results":[{"name":"wavefunction_amplitude"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_wfn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false,"tags":["wfn","wfn_plot"]} +{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","name":"Wavefunction Amplitude","application":{"name":"espresso"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"band_structure"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"pw-scf","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"extract-band-energies","schemaVersion":"2022.8.16","isDefault":false},{"name":"Extract Band Energies","type":"assignment","operand":"band_energies","value":"[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]","input":[{"name":"band_structure","scope":"pw-scf"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"extract-band-energies","head":false,"next":"indices-below-fermi","schemaVersion":"2022.8.16","isDefault":false},{"name":"Find Indices Below Fermi","type":"assignment","operand":"indices_below_fermi","value":"[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]","input":[{"name":"fermi_energy","scope":"pw-scf"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"indices-below-fermi","head":false,"next":"8771dc7f-878e-5f13-a840-a3a416854f1e","schemaVersion":"2022.8.16","isDefault":false},{"name":"Store Band Below EF","type":"assignment","operand":"KBAND_VALUE_BELOW_EF","value":"indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"8771dc7f-878e-5f13-a840-a3a416854f1e","head":false,"next":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","schemaVersion":"2022.8.16","isDefault":false},{"name":"Select Band","type":"assignment","operand":"KBAND_VALUE","value":"KBAND_VALUE_BELOW_EF","input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","head":false,"next":"pp-wfn","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"pp_wfn","head":false,"results":[{"name":"wavefunction_amplitude"}],"monitors":[{"name":"standard_output"}],"flowchartId":"pp-wfn","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"pp.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"wavefunction_amplitude"}],"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"monitors":[{"name":"standard_output"}],"name":"pp_wfn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_wfn.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false,"tags":["wfn","wfn_plot"]} diff --git a/dist/js/runtime_data/subworkflows/espresso/zero_point_energy.json b/dist/js/runtime_data/subworkflows/espresso/zero_point_energy.json index b34d5b24..1e46549b 100644 --- a/dist/js/runtime_data/subworkflows/espresso/zero_point_energy.json +++ b/dist/js/runtime_data/subworkflows/espresso/zero_point_energy.json @@ -1 +1 @@ -{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","name":"Zero Point Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"name":"pw_scf","results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"107595d1-490f-53a2-8432-7f8a12f14d96","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_zpe","head":false,"results":[{"name":"zero_point_energy"}],"monitors":[{"name":"standard_output"}],"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"name":"ph_gamma","results":[{"name":"zero_point_energy"}],"preProcessors":[],"postProcessors":[],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","name":"Zero Point Energy","application":{"name":"espresso"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"us","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"pw_scf","head":true,"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"107595d1-490f-53a2-8432-7f8a12f14d96","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ph_zpe","head":false,"results":[{"name":"zero_point_energy"}],"monitors":[{"name":"standard_output"}],"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"espresso","shortName":"qe","summary":"Quantum ESPRESSO","build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"version":"6.3","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"monitors":[{"name":"standard_output"}],"name":"ph.x","schemaVersion":"2022.8.16","isDefault":false},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"zero_point_energy"}],"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"monitors":[{"name":"standard_output"}],"name":"ph_gamma","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/nwchem/total_energy.json b/dist/js/runtime_data/subworkflows/nwchem/total_energy.json index dde54548..e87db945 100644 --- a/dist/js/runtime_data/subworkflows/nwchem/total_energy.json +++ b/dist/js/runtime_data/subworkflows/nwchem/total_energy.json @@ -1 +1 @@ -{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","name":"Total Energy","application":{"name":"nwchem"},"properties":["total_energy","total_energy_contributions"],"model":{"type":"dft","subtype":"gga","method":{"type":"localorbital","subtype":"pople","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"nwchem_total_energy","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"nwchem","shortName":"nwchem","summary":"NWChem","build":"GNU","isDefault":true,"version":"7.0.2","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"}],"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem","schemaVersion":"2022.8.16"},"flavor":{"name":"nwchem_total_energy","results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"preProcessors":[],"postProcessors":[],"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","name":"Total Energy","application":{"name":"nwchem"},"properties":["total_energy","total_energy_contributions"],"model":{"type":"dft","subtype":"gga","method":{"type":"localorbital","subtype":"pople","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"nwchem_total_energy","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"monitors":[{"name":"standard_output"}],"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"nwchem","shortName":"nwchem","summary":"NWChem","build":"GNU","isDefault":true,"version":"7.0.2","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"}],"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/python/ml/classification_tail.json b/dist/js/runtime_data/subworkflows/python/ml/classification_tail.json index 2b5ddd9c..2bb1edac 100644 --- a/dist/js/runtime_data/subworkflows/python/ml/classification_tail.json +++ b/dist/js/runtime_data/subworkflows/python/ml/classification_tail.json @@ -1 +1 @@ -{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:setup_variables_packages","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:read_csv:pandas","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:train_test_split:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:pre_processing:standardization:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:model:random_forest_classification:sklearn","results":[{"name":"workflow:pyml_predict"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ROC Curve Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:post_processing:roc_curve:sklearn","results":[{"name":"file_content"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:model:random_forest_classification:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"ROC Curve Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"file_content"}],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:roc_curve:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/python/ml/clustering_tail.json b/dist/js/runtime_data/subworkflows/python/ml/clustering_tail.json index 5ac9392a..810a32d4 100644 --- a/dist/js/runtime_data/subworkflows/python/ml/clustering_tail.json +++ b/dist/js/runtime_data/subworkflows/python/ml/clustering_tail.json @@ -1 +1 @@ -{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:setup_variables_packages","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:read_csv:pandas","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:train_test_split:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:pre_processing:standardization:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:model:k_means_clustering:sklearn","results":[{"name":"workflow:pyml_predict"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"model_k_means_clustering_sklearn.py","templateName":"model_k_means_clustering_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_k_means_clustering_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"9c95c27b-c8bd-5e8b-8829-d354611decef","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"2D PCA Clusters Plot","head":false,"results":[{"name":"file_content"},{"name":"file_content"},{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9c95c27b-c8bd-5e8b-8829-d354611decef","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:post_processing:pca_2d_clusters:matplotlib","results":[{"name":"file_content"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_pca_2d_clusters_matplotlib.py","templateName":"post_processing_pca_2d_clusters_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_pca_2d_clusters_matplotlib.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"applicationName":"python","executableName":"python","input":[{"name":"model_k_means_clustering_sklearn.py","templateName":"model_k_means_clustering_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:model:k_means_clustering:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for k-means clustering. #\n# #\n# In k-means clustering, the labels are not provided ahead of #\n# time. Instead, one supplies the number of groups the #\n# algorithm should split the dataset into. Here, we set our #\n# own default of 4 groups (fewer than sklearn's default of 8). #\n# Otherwise, the default parameters of the clustering method #\n# are the same as in sklearn. #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.cluster\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Initialize the Model\n model = sklearn.cluster.KMeans(\n n_clusters=4,\n init=\"k-means++\",\n n_init=10,\n max_iter=300,\n tol=0.0001,\n copy_x=True,\n algorithm=\"auto\",\n verbose=0,\n )\n\n # Train the model and save\n model.fit(train_descriptors)\n context.save(model, \"k_means\")\n train_labels = model.predict(train_descriptors)\n test_labels = model.predict(test_descriptors)\n\n context.save(train_labels, \"train_labels\")\n context.save(test_labels, \"test_labels\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"k_means\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_k_means_clustering_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"9c95c27b-c8bd-5e8b-8829-d354611decef","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"2D PCA Clusters Plot","head":false,"results":[{"name":"file_content"},{"name":"file_content"},{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9c95c27b-c8bd-5e8b-8829-d354611decef","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"file_content"}],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_pca_2d_clusters_matplotlib.py","templateName":"post_processing_pca_2d_clusters_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:pca_2d_clusters:matplotlib","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Cluster Visualization #\n# #\n# This unit takes an N-dimensional feature space, and uses #\n# Principal-component Analysis (PCA) to project into a 2D space #\n# to facilitate plotting on a scatter plot. #\n# #\n# The 2D space we project into are the first two principal #\n# components identified in PCA, which are the two vectors with #\n# the highest variance. #\n# #\n# Wikipedia Article on PCA: #\n# https://en.wikipedia.org/wiki/Principal_component_analysis #\n# #\n# We then plot the labels assigned to the train an test set, #\n# and color by class. #\n# #\n# ----------------------------------------------------------------- #\n\nimport matplotlib.cm\nimport matplotlib.lines\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport settings\nimport sklearn.decomposition\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_labels = context.load(\"train_labels\")\n train_descriptors = context.load(\"train_descriptors\")\n test_labels = context.load(\"test_labels\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Unscale the descriptors\n descriptor_scaler = context.load(\"descriptor_scaler\")\n train_descriptors = descriptor_scaler.inverse_transform(train_descriptors)\n test_descriptors = descriptor_scaler.inverse_transform(test_descriptors)\n\n # We need at least 2 dimensions, exit if the dataset is 1D\n if train_descriptors.ndim < 2:\n raise ValueError(\"The train descriptors do not have enough dimensions to be plot in 2D\")\n\n # The data could be multidimensional. Let's do some PCA to get things into 2 dimensions.\n pca = sklearn.decomposition.PCA(n_components=2)\n train_descriptors = pca.fit_transform(train_descriptors)\n test_descriptors = pca.transform(test_descriptors)\n xlabel = \"Principle Component 1\"\n ylabel = \"Principle Component 2\"\n\n # Determine the labels we're going to be using, and generate their colors\n labels = set(train_labels)\n colors = {}\n for count, label in enumerate(labels):\n cm = matplotlib.cm.get_cmap('jet', len(labels))\n color = cm(count / len(labels))\n colors[label] = color\n train_colors = [colors[label] for label in train_labels]\n test_colors = [colors[label] for label in test_labels]\n\n # Train / Test Split Visualization\n plt.title(\"Train Test Split Visualization\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=\"#33548c\", marker=\"o\", label=\"Training Set\")\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=\"#F0B332\", marker=\"o\", label=\"Testing Set\")\n xmin, xmax, ymin, ymax = plt.axis()\n plt.legend()\n plt.tight_layout()\n plt.savefig(\"train_test_split.png\", dpi=600)\n plt.close()\n\n def clusters_legend(cluster_colors):\n \"\"\"\n Helper function that creates a legend, given the coloration by clusters.\n Args:\n cluster_colors: A dictionary of the form {cluster_number : color_value}\n\n Returns:\n None; just creates the legend and puts it on the plot\n \"\"\"\n legend_symbols = []\n for group, color in cluster_colors.items():\n label = f\"Cluster {group}\"\n legend_symbols.append(matplotlib.lines.Line2D([], [], color=color, marker=\"o\",\n linewidth=0, label=label))\n plt.legend(handles=legend_symbols)\n\n # Training Set Clusters\n plt.title(\"Training Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(train_descriptors[:, 0], train_descriptors[:, 1], c=train_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"train_clusters.png\", dpi=600)\n plt.close()\n\n # Testing Set Clusters\n plt.title(\"Testing Set Clusters\")\n plt.xlabel(xlabel)\n plt.ylabel(ylabel)\n plt.xlim(xmin, xmax)\n plt.ylim(ymin, ymax)\n plt.scatter(test_descriptors[:, 0], test_descriptors[:, 1], c=test_colors)\n clusters_legend(colors)\n plt.tight_layout()\n plt.savefig(\"test_clusters.png\", dpi=600)\n plt.close()\n\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_pca_2d_clusters_matplotlib.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/python/ml/regression_tail.json b/dist/js/runtime_data/subworkflows/python/ml/regression_tail.json index efde1638..123d43e8 100644 --- a/dist/js/runtime_data/subworkflows/python/ml/regression_tail.json +++ b/dist/js/runtime_data/subworkflows/python/ml/regression_tail.json @@ -1 +1 @@ -{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:setup_variables_packages","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:read_csv:pandas","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:data_input:train_test_split:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:pre_processing:standardization:sklearn","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:model:multilayer_perceptron:sklearn","results":[{"name":"workflow:pyml_predict"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Parity Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"pyml:post_processing:parity_plot:matplotlib","results":[{"name":"file_content"}],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","name":"Machine Learning","application":{"name":"python"},"properties":["file_content","workflow:pyml_predict"],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"Setup Variables and Packages","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"enableRender":true,"next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Input","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"7fff5212-6c6d-586b-9997-4d4485e09383","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Train Test Split","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"799de7dc-9394-571b-8e0d-3ff876a3df02","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Data Standardize","head":false,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Model Train and Predict","head":false,"results":[{"name":"workflow:pyml_predict"}],"monitors":[{"name":"standard_output"}],"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:model:multilayer_perceptron:sklearn","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"Parity Plot","head":false,"results":[{"name":"file_content"}],"monitors":[{"name":"standard_output"}],"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","preProcessors":[],"postProcessors":[{"name":"remove_virtual_environment"}],"status":"idle","statusTrack":[],"tags":["remove-all-results"],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"file_content"}],"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:parity_plot:matplotlib","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/python/python_script.json b/dist/js/runtime_data/subworkflows/python/python_script.json index a84a785b..f047ddb2 100644 --- a/dist/js/runtime_data/subworkflows/python/python_script.json +++ b/dist/js/runtime_data/subworkflows/python/python_script.json @@ -1 +1 @@ -{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","name":"Python Script","application":{"name":"python"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"python","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"name":"hello_world","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","name":"Python Script","application":{"name":"python"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"python","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"python","shortName":"py","summary":"Python Script","build":"GNU","isDefault":true,"version":"3.10.13","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/shell/batch_espresso_pwscf.json b/dist/js/runtime_data/subworkflows/shell/batch_espresso_pwscf.json index 3bda27b7..9034ccda 100644 --- a/dist/js/runtime_data/subworkflows/shell/batch_espresso_pwscf.json +++ b/dist/js/runtime_data/subworkflows/shell/batch_espresso_pwscf.json @@ -1 +1 @@ -{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","name":"Shell Batch Job (Espresso PWSCF)","application":{"name":"shell"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"name":"job_espresso_pw_scf","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","name":"Shell Batch Job (Espresso PWSCF)","application":{"name":"shell"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"monitors":[{"name":"standard_output"}],"name":"job_espresso_pw_scf","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/shell/hello_world.json b/dist/js/runtime_data/subworkflows/shell/hello_world.json index 2bea5331..bc8d6028 100644 --- a/dist/js/runtime_data/subworkflows/shell/hello_world.json +++ b/dist/js/runtime_data/subworkflows/shell/hello_world.json @@ -1 +1 @@ -{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","name":"Shell Hello World","application":{"name":"shell"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"name":"hello_world","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","name":"Shell Hello World","application":{"name":"shell"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"shell","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[],"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/vasp/band_gap.json b/dist/js/runtime_data/subworkflows/vasp/band_gap.json index 176f96bf..0810c67d 100644 --- a/dist/js/runtime_data/subworkflows/vasp/band_gap.json +++ b/dist/js/runtime_data/subworkflows/vasp/band_gap.json @@ -1 +1 @@ -{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","name":"Band Gap","application":{"name":"vasp"},"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"f0d65517-9592-5bc8-948e-a0851a766cbb","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_nscf","head":false,"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_nscf","results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","name":"Band Gap","application":{"name":"vasp"},"properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"f0d65517-9592-5bc8-948e-a0851a766cbb","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_nscf","head":false,"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/vasp/band_structure.json b/dist/js/runtime_data/subworkflows/vasp/band_structure.json index 4f4ddb26..92f30a80 100644 --- a/dist/js/runtime_data/subworkflows/vasp/band_structure.json +++ b/dist/js/runtime_data/subworkflows/vasp/band_structure.json @@ -1 +1 @@ -{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","name":"Band Structure","application":{"name":"vasp"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","name":"Band Structure","application":{"name":"vasp"},"properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/vasp/band_structure_dos.json b/dist/js/runtime_data/subworkflows/vasp/band_structure_dos.json index 4d497590..9aeeaa67 100644 --- a/dist/js/runtime_data/subworkflows/vasp/band_structure_dos.json +++ b/dist/js/runtime_data/subworkflows/vasp/band_structure_dos.json @@ -1 +1 @@ -{"_id":"d38fea11-9781-5151-8dae-d705381498be","name":"Band Structure + Density of States","application":{"name":"vasp"},"properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_bands","results":[{"name":"band_structure"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"d38fea11-9781-5151-8dae-d705381498be","name":"Band Structure + Density of States","application":{"name":"vasp"},"properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_bands","head":false,"results":[{"name":"band_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"band_structure"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/vasp/dos.json b/dist/js/runtime_data/subworkflows/vasp/dos.json index 34caaa72..13fefde6 100644 --- a/dist/js/runtime_data/subworkflows/vasp/dos.json +++ b/dist/js/runtime_data/subworkflows/vasp/dos.json @@ -1 +1 @@ -{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","name":"Density of States","application":{"name":"vasp"},"properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","name":"Density of States","application":{"name":"vasp"},"properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp","head":true,"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/vasp/fixed_cell_relaxation.json b/dist/js/runtime_data/subworkflows/vasp/fixed_cell_relaxation.json index dfb9223b..b6f2cf1e 100644 --- a/dist/js/runtime_data/subworkflows/vasp/fixed_cell_relaxation.json +++ b/dist/js/runtime_data/subworkflows/vasp/fixed_cell_relaxation.json @@ -1 +1 @@ -{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","name":"Fixed-cell Relaxation","application":{"name":"vasp"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_relax","head":true,"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_relax","results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","name":"Fixed-cell Relaxation","application":{"name":"vasp"},"properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_relax","head":true,"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[{"name":"prepare_restart"}],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/vasp/initial_final_total_energies.json b/dist/js/runtime_data/subworkflows/vasp/initial_final_total_energies.json index 4541d417..edb77bb8 100644 --- a/dist/js/runtime_data/subworkflows/vasp/initial_final_total_energies.json +++ b/dist/js/runtime_data/subworkflows/vasp/initial_final_total_energies.json @@ -1 +1 @@ -{"isMultiMaterial":true,"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","name":"Initial/Final Total Energies","application":{"name":"vasp"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_neb_initial","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_neb_initial","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"e65a17ce-10c8-5710-ad4d-fb3d42434091","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_neb_final","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_neb_final","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"compute":{"ppn":1,"nodes":1,"queue":"D","timeLimit":"01:00:00","notify":"n","cluster":{"fqdn":""},"timeLimitType":"per single attempt","isRestartable":true,"arguments":{"nimage":1,"npools":1,"nband":1,"ntg":1,"ndiag":1}},"schemaVersion":"2022.8.16","isDraft":false} +{"isMultiMaterial":true,"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","name":"Initial/Final Total Energies","application":{"name":"vasp"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_neb_initial","head":true,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"e65a17ce-10c8-5710-ad4d-fb3d42434091","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_neb_final","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"compute":{"ppn":1,"nodes":1,"queue":"D","timeLimit":"01:00:00","notify":"n","cluster":{"fqdn":""},"timeLimitType":"per single attempt","isRestartable":true,"arguments":{"nimage":1,"npools":1,"nband":1,"ntg":1,"ndiag":1}},"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/vasp/kpoint_convergence.json b/dist/js/runtime_data/subworkflows/vasp/kpoint_convergence.json index 7c22c2a3..c5d7720a 100644 --- a/dist/js/runtime_data/subworkflows/vasp/kpoint_convergence.json +++ b/dist/js/runtime_data/subworkflows/vasp/kpoint_convergence.json @@ -1 +1 @@ -{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","name":"K-point Convergence","application":{"name":"vasp"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-tolerance","head":true,"next":"init-increment","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-increment","head":false,"next":"init-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-result","head":false,"next":"init-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-parameter","head":false,"next":"vasp-kpoint-convergence","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"vasp-kpoint-convergence","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_kpt_conv","results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"store-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"store-result","head":false,"next":"check-convergence","schemaVersion":"2022.8.16","isDefault":false},{"name":"check convergence","type":"condition","input":[],"statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"check-convergence","then":"convergence-is-reached","else":"update-result","head":false,"next":"update-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"update-result","head":false,"next":"increment-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"increment-parameter","next":"vasp-kpoint-convergence","head":false,"schemaVersion":"2022.8.16","isDefault":false},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"convergence-is-reached","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","name":"K-point Convergence","application":{"name":"vasp"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"name":"Init tolerance","type":"assignment","operand":"TOL","value":0.00001,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-tolerance","head":true,"next":"init-increment","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init increment","type":"assignment","operand":"INC","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-increment","head":false,"next":"init-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init result","type":"assignment","operand":"PREV_RESULT","value":0,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-result","head":false,"next":"init-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"Init parameter","type":"assignment","operand":"PARAMETER","value":1,"input":[],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"init-parameter","head":false,"next":"vasp-kpoint-convergence","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_kpt_conv","head":false,"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"flowchartId":"vasp-kpoint-convergence","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"next":"store-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"store result","type":"assignment","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"store-result","head":false,"next":"check-convergence","schemaVersion":"2022.8.16","isDefault":false},{"name":"check convergence","type":"condition","input":[],"statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"check-convergence","then":"convergence-is-reached","else":"update-result","head":false,"next":"update-result","schemaVersion":"2022.8.16","isDefault":false},{"name":"update result","type":"assignment","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"update-result","head":false,"next":"increment-parameter","schemaVersion":"2022.8.16","isDefault":false},{"name":"increment parameter","type":"assignment","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"increment-parameter","next":"vasp-kpoint-convergence","head":false,"schemaVersion":"2022.8.16","isDefault":false},{"name":"exit","type":"assignment","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}],"results":[],"monitors":[],"preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"flowchartId":"convergence-is-reached","head":false,"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/vasp/neb_subworkflow.json b/dist/js/runtime_data/subworkflows/vasp/neb_subworkflow.json index ce9648cd..ef6e6eab 100644 --- a/dist/js/runtime_data/subworkflows/vasp/neb_subworkflow.json +++ b/dist/js/runtime_data/subworkflows/vasp/neb_subworkflow.json @@ -1 +1 @@ -{"isMultiMaterial":true,"_id":"e6215fb9-e60c-541b-b73e-b077d64b3a95","name":"Nudged Elastic Band (NEB)","application":{"name":"vasp"},"properties":["reaction_energy_barrier","reaction_energy_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_neb","head":true,"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9a1660ab-8067-5fad-9fb8-7c039f634636","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"name":"vasp_neb","results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"preProcessors":[],"postProcessors":[],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB"},{"name":"KPOINTS","templateName":"KPOINTS"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nIBRION = 1\nEDIFFG = -0.001\nENCUT = 500\nNELM = 100\nNSW = 100\nIMAGES = {{ input.INTERMEDIATE_IMAGES.length or neb.nImages }}\nSPRING = -5\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} +{"isMultiMaterial":true,"_id":"e6215fb9-e60c-541b-b73e-b077d64b3a95","name":"Nudged Elastic Band (NEB)","application":{"name":"vasp"},"properties":["reaction_energy_barrier","reaction_energy_profile"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_neb","head":true,"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"monitors":[{"name":"standard_output"}],"flowchartId":"9a1660ab-8067-5fad-9fb8-7c039f634636","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","schemaVersion":"2022.8.16"},"flavor":{"preProcessors":[],"postProcessors":[],"results":[{"name":"reaction_energy_barrier"},{"name":"reaction_energy_profile"}],"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB"},{"name":"KPOINTS","templateName":"KPOINTS"}],"monitors":[{"name":"standard_output"}],"name":"vasp_neb","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISTART = 0\nIBRION = 1\nEDIFFG = -0.001\nENCUT = 500\nNELM = 100\nNSW = 100\nIMAGES = {{ input.INTERMEDIATE_IMAGES.length or neb.nImages }}\nSPRING = -5\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false},{"template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"},"rendered":"","isManuallyChanged":false}],"context":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/vasp/prepare_images.json b/dist/js/runtime_data/subworkflows/vasp/prepare_images.json index d9fa8dab..79dc042f 100644 --- a/dist/js/runtime_data/subworkflows/vasp/prepare_images.json +++ b/dist/js/runtime_data/subworkflows/vasp/prepare_images.json @@ -1 +1 @@ -{"isMultiMaterial":true,"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","name":"Prepare Directories","application":{"name":"vasp"},"properties":[],"model":{"type":"unknown","subtype":"unknown","method":{"type":"unknown","subtype":"unknown","data":{}}},"units":[{"type":"execution","name":"prepare-neb-images","head":true,"results":[],"monitors":[{"name":"standard_output"}],"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","preProcessors":[],"postProcessors":[],"status":"idle","statusTrack":[],"tags":[],"application":{"name":"shell","shortName":"sh","summary":"Shell Script","build":"GNU","isDefault":true,"version":"5.1.8","schemaVersion":"2022.8.16"},"executable":{"preProcessors":[],"postProcessors":[],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","schemaVersion":"2022.8.16"},"flavor":{"name":"bash_vasp_prepare_neb_images","results":[],"preProcessors":[],"postProcessors":[],"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"monitors":[{"name":"standard_output"}],"schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n","contextProviders":[],"executableName":"python","name":"espresso_xml_get_qpt_irr.py","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"python","next":"assignment","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"assignment","head":false,"input":[{"name":"STDOUT","scope":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219"}],"isDefault":false,"monitors":[],"name":"assignment","operand":"Q_POINTS","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","type":"assignment","value":"json.loads(STDOUT)"}]},{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"reduce","properties":["phonon_dispersions","phonon_dos"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_grid_restart.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid_restart","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb206177-a4af-599a-81ba-6c88d24253b6","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_grid_restart.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_grid_restart","next":"3b4507a7-9244-540b-abe0-66bceab700f5","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"q2r.x","input":[{"name":"q2r.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"3b4507a7-9244-540b-abe0-66bceab700f5","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n","contextProviders":[],"executableName":"q2r.x","name":"q2r.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"q2r","next":"8fe6a24b-c994-55a2-a448-88657292e8c2","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_grid.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16"},"flowchartId":"8fe6a24b-c994-55a2-a448-88657292e8c2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n","contextProviders":[{"name":"IGridFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_grid.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_grid","next":"a7fded20-889b-54fc-bbb0-456e82689ab1","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dos"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"matdyn.x","input":[{"name":"matdyn_path.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"schemaVersion":"2022.8.16"},"flowchartId":"a7fded20-889b-54fc-bbb0-456e82689ab1","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"IPathFormDataManager"}],"executableName":"matdyn.x","name":"matdyn_path.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"matdyn_path","postProcessors":[],"preProcessors":[],"results":[{"name":"phonon_dispersions"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"f52b8039-83d0-5485-a1f1-0bc37cb01ed3","flowchartId":"d270b789-fb67-573c-a566-9f09fdacea23","isDefault":false,"monitors":[],"name":"pw-scf","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"2f017bcb-f4ba-55b8-b939-1f780679a88e","flowchartId":"4bb74dfb-46a6-5bf4-a477-5d374dc2e271","isDefault":false,"monitors":[],"name":"ph-init-qpoints","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a","flowchartId":"9894b91f-6e97-5ee6-af02-0bef26bd62c0","isDefault":false,"monitors":[],"name":"espresso-xml-get-qpt-irr","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"flowchartId":"24e3c1f0-8090-512e-9727-8770071d17c8","input":{"name":"Q_POINTS","scope":"global","target":"MAP_DATA","useValues":false,"values":[]},"isDefault":false,"monitors":[],"name":"map","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"map","workflowId":"5cc1c6bd-9047-4b64-8e10-e5ae288bbacf"},{"_id":"545a66e2-dfbe-513e-acaf-d79d0d139b9c","flowchartId":"55a9e9fb-3545-5c4b-a1bb-b64a899b78c6","isDefault":false,"monitors":[],"name":"reduce","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[{"_id":"731d3397-3278-516a-b28e-53626ef50f0a","name":"phonon_map_workflow","properties":[],"subworkflows":[{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"pre-processor","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_link_outdir_save.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"espresso_link_outdir_save","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_link_outdir_save.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"ph-single-irr-qpt","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_single_irr_qpt.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_single_irr_qpt","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"8db9af08-d935-57a0-a824-e7db6d936de8","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n","contextProviders":[{"name":"QGridFormDataManager"}],"executableName":"ph.x","name":"ph_single_irr_qpt.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_single_irr_qpt","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"post-processor","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"espresso_collect_dynmat.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"espresso_collect_dynmat","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cd5c3e29-511b-5ef8-949d-ad884f210301","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n","contextProviders":[],"executableName":"sh","name":"espresso_collect_dynmat.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"03f3a8a3-1fd0-5007-925f-fba78be63a51","flowchartId":"e9a790f4-dec6-52c1-b951-014f0ff01cb4","monitors":[],"name":"pre-processor","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"e68db280-8636-53e3-81a0-88396ba6147d","flowchartId":"c2195045-7a5c-54d3-ab88-211c82de09f1","monitors":[],"name":"ph-single-irr-qpt","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"7239fc3a-b343-513f-af35-e8687e1829da","flowchartId":"e483c7fb-2a29-5e91-819a-7465ead70134","monitors":[],"name":"post-processor","postProcessors":[],"preProcessors":[],"results":[],"status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]}]},"espresso/recalculate_bands.json":{"_id":"42b2b964-8ccc-5b36-9e33-41a954abc2ba","application":{"name":"espresso"},"isDefault":false,"name":"Recalculate Bands","properties":["band_structure"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Recalculate Bands","properties":["band_structure"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"d618df45-5af3-5da5-8882-d74a27e00b04","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"64551dfb-e529-5d8d-9092-ff268f4da134","flowchartId":"e8b72a45-765e-565f-ab17-c91a21aec09d","isDefault":false,"monitors":[],"name":"Recalculate Bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/surface_energy.json":{"_id":"68512987-de73-5614-bab2-0f8b575cffa3","application":{"name":"espresso"},"isDefault":false,"name":"Surface Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Surface Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","surface_energy","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"e463ef46-a36e-5168-87dd-e21eb980dfb8","head":true,"input":[{"endpoint":"materials","endpoint_options":{"params":{"projection":"{}","query":"{'_id': MATERIAL_ID}"}},"name":"DATA","type":"api"}],"isDefault":false,"monitors":[],"name":"io-slab","next":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"api","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"flowchartId":"ee7abb4e-7848-5aeb-960d-0d441909e2d1","head":false,"input":[{"name":"DATA","scope":"e463ef46-a36e-5168-87dd-e21eb980dfb8"}],"isDefault":false,"monitors":[],"name":"slab","next":"44263820-0c80-5bd1-b854-9da8d198eac1","operand":"SLAB","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"DATA[0]"},{"flowchartId":"44263820-0c80-5bd1-b854-9da8d198eac1","head":false,"input":[{"endpoint":"materials","endpoint_options":{"params":{"projection":"{}","query":"{'_id': SLAB.metadata.bulkId}"}},"name":"DATA","type":"api"}],"isDefault":false,"monitors":[],"name":"io-bulk","next":"b70656f1-a394-57f4-b4de-00096969df4b","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"api","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"flowchartId":"b70656f1-a394-57f4-b4de-00096969df4b","head":false,"input":[{"name":"DATA","scope":"44263820-0c80-5bd1-b854-9da8d198eac1"}],"isDefault":false,"monitors":[],"name":"bulk","next":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","operand":"BULK","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"DATA[0] if DATA else None"},{"errorMessage":"Bulk material does not exist!","flowchartId":"6ca4006a-e3ae-56ea-91a1-06b9790b5f7e","head":false,"isDefault":false,"monitors":[],"name":"assert-bulk","next":"490635e0-c593-5809-9eb2-c794b96cfed1","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"BULK != None","status":"idle","statusTrack":[],"tags":[],"type":"assertion"},{"flowchartId":"490635e0-c593-5809-9eb2-c794b96cfed1","head":false,"input":[{"endpoint":"refined-properties","endpoint_options":{"params":{"projection":"{'sort': {'precision.value': -1}, 'limit': 1}","query":"{ 'exabyteId': BULK.exabyteId, 'data.name': 'total_energy', 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} }"}},"name":"DATA","type":"api"}],"isDefault":false,"monitors":[],"name":"io-e-bulk","next":"bbe13b97-4243-5a85-8f61-a279d0b797aa","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"api","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"flowchartId":"bbe13b97-4243-5a85-8f61-a279d0b797aa","head":false,"input":[{"name":"DATA","scope":"490635e0-c593-5809-9eb2-c794b96cfed1"}],"isDefault":false,"monitors":[],"name":"e-bulk","next":"a06c9f43-7670-5fd0-ac42-7028a472235a","operand":"E_BULK","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"DATA[0].data.value if DATA else None"},{"errorMessage":"E_BULK does not exist!","flowchartId":"a06c9f43-7670-5fd0-ac42-7028a472235a","head":false,"isDefault":false,"monitors":[],"name":"assert-e-bulk","next":"cdf210be-26ed-585a-b4ac-d55795ba2975","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"E_BULK != None","status":"idle","statusTrack":[],"tags":[],"type":"assertion"},{"flowchartId":"cdf210be-26ed-585a-b4ac-d55795ba2975","head":false,"input":[],"isDefault":false,"monitors":[],"name":"surface","next":"ffa8e43d-096a-555b-b8d0-6d283365ef47","operand":"A","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))"},{"flowchartId":"ffa8e43d-096a-555b-b8d0-6d283365ef47","head":false,"input":[],"isDefault":false,"monitors":[],"name":"n-bulk","next":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","operand":"N_BULK","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"len(BULK.basis.elements)"},{"flowchartId":"a0336ec5-a6da-5e4c-bb48-82b70cf5245f","head":false,"input":[],"isDefault":false,"monitors":[],"name":"n-slab","next":"9fc7a088-5533-5f70-bb33-f676ec65f565","operand":"N_SLAB","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"len(SLAB.basis.elements)"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"fcd88119-817c-5ac1-a430-ba892ac743eb","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"fcd88119-817c-5ac1-a430-ba892ac743eb","head":false,"input":[{"name":"total_energy","scope":"9fc7a088-5533-5f70-bb33-f676ec65f565"}],"isDefault":false,"monitors":[],"name":"e-slab","next":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","operand":"E_SLAB","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"flowchartId":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","head":false,"input":[],"isDefault":false,"monitors":[],"name":"surface-energy","operand":"SURFACE_ENERGY","postProcessors":[],"preProcessors":[],"results":[{"name":"surface_energy"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))"}]}],"units":[{"_id":"3e05a2b5-4171-54a2-9d2d-9e46118a56bf","flowchartId":"d81dc9ce-bb50-5bc6-af1d-e5ede03bb0a6","isDefault":false,"monitors":[],"name":"Surface Energy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/total_energy.json":{"_id":"4e36ca25-fa46-5628-a227-27d22dea8553","application":{"name":"espresso"},"isDefault":false,"name":"Total Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Total Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"tags":["default"],"units":[{"_id":"a16677f9-bb5b-54b5-9f97-c2af8c073184","flowchartId":"6059d61a-6a92-5657-9130-02208639aff8","isDefault":false,"monitors":[],"name":"Total Energy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/valence_band_offset.json":{"_id":"d8e08cac-7747-50aa-b925-41f214d722c6","application":{"name":"espresso"},"isDefault":false,"name":"Valence Band Offset (2D)","properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","valence_band_offset"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"9c65d03e-6a30-58f3-947a-f174342be0c3","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"BS + Avg ESP (Interface)","properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"0f21d8c4-ab32-53ba-b40d-fc9b6608e1b9","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Material Index (Interface)","next":"9fc7a088-5533-5f70-bb33-f676ec65f565","operand":"MATERIAL_INDEX","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"0"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap"}],"isDefault":false,"monitors":[],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Set Valence Band Maximum","next":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","operand":"VBM","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","next":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"9ed927b1-3d84-5730-a6a8-1b1cfba39bde","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average_potential","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential"}],"isDefault":false,"monitors":[],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},{"_id":"ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Find ESP Values (Interface)","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"generic:processing:find_extrema:scipy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"python-find-extrema","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema"}],"isDefault":false,"monitors":[],"name":"Set Average ESP Value","operand":"AVG_ESP_INTERFACE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},{"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"BS + Avg ESP (interface left)","properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"0bd31760-f6e4-5826-b282-882c06c97f94","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Material Index (Interface left)","next":"3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08","operand":"MATERIAL_INDEX","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"1"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap-left","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap-left","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-left"}],"isDefault":false,"monitors":[],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Set Valence Band Maximum","next":"dfc4f1c5-5856-588a-99df-6d5fb46bb429","operand":"VBM_LEFT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"dfc4f1c5-5856-588a-99df-6d5fb46bb429","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","next":"b1bb2b3e-3197-5bcd-85b0-959cc357c8d3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"b1bb2b3e-3197-5bcd-85b0-959cc357c8d3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential-left","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average_potential","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential-left","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-left"}],"isDefault":false,"monitors":[],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},{"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Find ESP Value (Interface left)","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"generic:processing:find_extrema:scipy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"python-find-extrema-left","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema-left"}],"isDefault":false,"monitors":[],"name":"Set Average ESP Value","operand":"AVG_ESP_LEFT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},{"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"BS + Avg ESP (interface right)","properties":["atomic_forces","average_potential_profile","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"a05809d1-cc0d-5a0b-bf5e-d43b90a6ac4b","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Material Index (Interface right)","next":"b89d6348-3915-5c24-9fbb-350bc98ac708","operand":"MATERIAL_INDEX","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"2"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"b89d6348-3915-5c24-9fbb-350bc98ac708","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"pw-bands-calculate-band-gap-right","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-bands-calculate-band-gap-right","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pw_bands","next":"a667d9fd-35d5-5897-be0e-fa0247233649","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"a667d9fd-35d5-5897-be0e-fa0247233649","head":false,"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-right"}],"isDefault":false,"monitors":[],"name":"Select indirect band gap","next":"08819369-b541-5b51-8a40-0ee135039482","operand":"BAND_GAP_INDIRECT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"},{"flowchartId":"08819369-b541-5b51-8a40-0ee135039482","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Set Valence Band Maximum","next":"bc3f514c-4bed-521b-85a3-4e0edfdc3585","operand":"VBM_RIGHT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"bands.x","input":[{"name":"bands.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"bc3f514c-4bed-521b-85a3-4e0edfdc3585","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n","contextProviders":[],"executableName":"bands.x","name":"bands.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bands","next":"28bb682d-d287-5beb-8a67-826449c474ee","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_electrostatic_potential.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_electrostatic_potential","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"28bb682d-d287-5beb-8a67-826449c474ee","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_electrostatic_potential.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Electrostatic Potential (ESP)","next":"average-electrostatic-potential-right","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"average.x","input":[{"name":"average.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average_potential","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16"},"flowchartId":"average-electrostatic-potential-right","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"1\npp.dat\n1.0\n3000\n3\n3.0000\n","contextProviders":[],"executableName":"average.x","name":"average.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"average ESP","next":"c6c11873-91d7-5422-8302-3dcc1ce971e9","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"c6c11873-91d7-5422-8302-3dcc1ce971e9","head":false,"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-right"}],"isDefault":false,"monitors":[],"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"average_potential_profile['yDataSeries'][1]"}]},{"_id":"736295e8-2ee0-5974-83bc-362061ac0688","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Find ESP Value (Interface right)","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"find_extrema.py","templateName":"find_extrema.py"},{"name":"requirements.txt","templateName":"processing_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"generic:processing:find_extrema:scipy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"python-find-extrema-right","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n","contextProviders":[],"executableName":"python","name":"find_extrema.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Find Extrema","next":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"8fce780b-5555-5b73-b3d1-1bb24a4c759d","head":false,"input":[{"name":"STDOUT","scope":"python-find-extrema-right"}],"isDefault":false,"monitors":[],"name":"Set Average ESP Value","operand":"AVG_ESP_RIGHT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"json.loads(STDOUT)['minima']"}]},{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Calculate VBO","properties":["valence_band_offset"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"bd4eaa98-b001-5694-87ef-ec77540502ab","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Difference of valence band maxima","next":"2626f7bb-d392-5fd4-ab71-329b508de347","operand":"VBM_DIFF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"VBM_LEFT - VBM_RIGHT"},{"flowchartId":"2626f7bb-d392-5fd4-ab71-329b508de347","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Difference of macroscopically averaged ESP in bulk","next":"b7307787-53e2-599b-ad12-d627b04074b4","operand":"AVG_ESP_DIFF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]"},{"flowchartId":"b7307787-53e2-599b-ad12-d627b04074b4","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Lineup of macroscopically averaged ESP in interface","next":"197f4b4d-cb7b-57be-a885-d44cb1f61905","operand":"ESP_LINEUP","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])"},{"flowchartId":"197f4b4d-cb7b-57be-a885-d44cb1f61905","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Valence Band Offset","operand":"VALENCE_BAND_OFFSET","postProcessors":[],"preProcessors":[],"results":[{"name":"valence_band_offset"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))"}]}],"units":[{"_id":"9c65d03e-6a30-58f3-947a-f174342be0c3","flowchartId":"fd622b5c-5c02-594e-b582-b245c17ca9a4","isDefault":false,"monitors":[],"name":"BS + Avg ESP (Interface)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7","flowchartId":"ad3b1e4c-5965-5605-a067-dd0c59907c4b","isDefault":false,"monitors":[],"name":"Find ESP Values (Interface)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"ba46d9b4-610f-537e-ae39-e39ce5240cda","flowchartId":"8d5b4734-edfd-55cc-ad80-aaa72487398d","isDefault":false,"monitors":[],"name":"BS + Avg ESP (interface left)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"6c303926-905c-5749-81d5-2d2964fdf09a","flowchartId":"102ec582-5b75-52f5-8b39-19ca725ed47a","isDefault":false,"monitors":[],"name":"Find ESP Value (Interface left)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"aa611fe8-1e6a-5e5c-976a-f64bfaaaace9","flowchartId":"603c45db-93aa-54ce-a7fe-6e9b65b0037d","isDefault":false,"monitors":[],"name":"BS + Avg ESP (interface right)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"736295e8-2ee0-5974-83bc-362061ac0688","flowchartId":"e3444d35-cc41-59f5-8481-78d0c383b84e","isDefault":false,"monitors":[],"name":"Find ESP Value (Interface right)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"1b70e606-a7ee-599e-89e0-91a7dc5faa4a","flowchartId":"0e0b141a-39ca-52bc-9094-e5f96dc72f39","isDefault":false,"monitors":[],"name":"Calculate VBO","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/variable_cell_relaxation.json":{"_id":"c45dcef1-d16b-59d1-9318-cedd0b1acf08","application":{"name":"espresso"},"isDefault":false,"name":"Variable-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Variable-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","systemName":"espresso-variable-cell-relaxation","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_vc_relax.in"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"e1bd0870-6245-5fc2-a50d-48cabc356ac8","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_vc_relax.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"pw_vc-relax","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"},{"name":"final_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"tags":["variable-cell_relaxation"],"units":[{"_id":"58709c44-47f6-5fbf-bf2e-358b9d98f75d","flowchartId":"8f6e9590-6a87-584b-abd7-1fb98253054c","isDefault":false,"monitors":[],"name":"Variable-cell Relaxation","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/wavefunction_amplitude.json":{"_id":"196d364a-5a30-549b-a898-8b9704b50ff1","application":{"name":"espresso"},"isDefault":false,"name":"Wavefunction Amplitude","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude","file_content"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Wavefunction Amplitude","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"pw-scf","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"extract-band-energies","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"band_structure"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"extract-band-energies","head":false,"input":[{"name":"band_structure","scope":"pw-scf"}],"isDefault":false,"monitors":[],"name":"Extract Band Energies","next":"indices-below-fermi","operand":"band_energies","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]"},{"flowchartId":"indices-below-fermi","head":false,"input":[{"name":"fermi_energy","scope":"pw-scf"}],"isDefault":false,"monitors":[],"name":"Find Indices Below Fermi","next":"8771dc7f-878e-5f13-a840-a3a416854f1e","operand":"indices_below_fermi","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]"},{"flowchartId":"8771dc7f-878e-5f13-a840-a3a416854f1e","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Store Band Below EF","next":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","operand":"KBAND_VALUE_BELOW_EF","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1"},{"flowchartId":"57a07d7d-3f68-5f31-97ad-ebe8c5593cd2","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Select Band","next":"pp-wfn","operand":"KBAND_VALUE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"KBAND_VALUE_BELOW_EF"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pp.x","input":[{"name":"pp_wfn.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_wfn","postProcessors":[],"preProcessors":[],"results":[{"name":"wavefunction_amplitude"}],"schemaVersion":"2022.8.16"},"flowchartId":"pp-wfn","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n","contextProviders":[],"executableName":"pp.x","name":"pp_wfn.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pp_wfn","postProcessors":[],"preProcessors":[],"results":[{"name":"wavefunction_amplitude"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Plot Wavefunction","properties":["file_content"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"plot_wavefunction.py"},{"name":"requirements.txt","templateName":"requirements_plot_wavefunction.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"plot_wavefunction","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"57fca898-8e8b-5ef2-81a5-9d2b612bc18d","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"plot WFN","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"tags":["wfn","wfn_plot"],"units":[{"_id":"6a670ac8-6c12-5285-a6f8-9bf579fc88ee","flowchartId":"36467db9-279f-52a3-a6ef-ffdc26d875ed","isDefault":false,"monitors":[],"name":"Wavefunction Amplitude","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"e4ec581f-1cb3-5036-b698-999a96711559","flowchartId":"4ce49281-e731-550e-af66-6d2408db8237","isDefault":false,"monitors":[],"name":"Plot Wavefunction","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/zero_point_energy.json":{"_id":"3158c78d-58bb-5675-8c7f-6f2337061015","application":{"name":"espresso"},"isDefault":false,"name":"Zero Point Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"us","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Zero Point Energy","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","zero_point_energy"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"pw.x","postProcessors":[{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"pw.x","input":[{"name":"pw_scf.in"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16"},"flowchartId":"9fc7a088-5533-5f70-bb33-f676ec65f565","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"QEPWXInputDataManager"},{"name":"PlanewaveCutoffDataManager"}],"executableName":"pw.x","name":"pw_scf.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"pw_scf","next":"107595d1-490f-53a2-8432-7f8a12f14d96","postProcessors":[],"preProcessors":[],"results":[{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","hasAdvancedComputeOptions":true,"isDefault":true,"name":"espresso","schemaVersion":"2022.8.16","shortName":"qe","summary":"Quantum ESPRESSO","version":"6.3"},"context":[],"executable":{"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph.x","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"espresso","executableName":"ph.x","input":[{"name":"ph_gamma.in"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_gamma","postProcessors":[],"preProcessors":[],"results":[{"name":"zero_point_energy"}],"schemaVersion":"2022.8.16"},"flowchartId":"107595d1-490f-53a2-8432-7f8a12f14d96","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"espresso","content":"&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n","contextProviders":[],"executableName":"ph.x","name":"ph_gamma.in","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ph_zpe","postProcessors":[],"preProcessors":[],"results":[{"name":"zero_point_energy"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"151538cc-9e71-5269-8b9e-cb5977151227","flowchartId":"d906bd20-eb92-5a01-a0e2-c81a2d9b2a41","isDefault":false,"monitors":[],"name":"Zero Point Energy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"nwchem/total_energy.json":{"_id":"937fbac8-2dec-5fb1-a46f-b8a0cc3d3d05","application":{"name":"nwchem"},"isDefault":false,"name":"Total Energy","properties":["total_energy","total_energy_contributions"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","application":{"build":"GNU","isDefault":true,"name":"nwchem","schemaVersion":"2022.8.16","shortName":"nwchem","summary":"NWChem","version":"7.0.2"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"pople","type":"localorbital"},"subtype":"gga","type":"dft"},"name":"Total Energy","properties":["total_energy","total_energy_contributions"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"nwchem","schemaVersion":"2022.8.16","shortName":"nwchem","summary":"NWChem","version":"7.0.2"},"context":[],"executable":{"hasAdvancedComputeOptions":false,"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem","postProcessors":[{"name":"error_handler"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"nwchem","executableName":"nwchem","input":[{"name":"nwchem_total_energy.inp"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"schemaVersion":"2022.8.16"},"flowchartId":"6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"nwchem","content":" start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n","contextProviders":[{"name":"NWChemInputDataManager"}],"executableName":"nwchem","name":"nwchem_total_energy.inp","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"nwchem_total_energy","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13","flowchartId":"6059d61a-6a92-5657-9130-02208639aff8","isDefault":false,"monitors":[],"name":"Total Energy","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/ml/classification_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","application":{"name":"python"},"isDefault":false,"isUsingDataset":true,"name":"Python ML Train Classification","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"schemaVersion":"2022.8.16","units":[{"flowchartId":"head-set-predict-status","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Dataset","next":"head-branch-on-predict-status","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"isDefault":false,"maxOccurrences":100,"monitors":[],"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"flowchartId":"end-of-ml-train-head","head":false,"input":[],"isDefault":false,"monitors":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:random_forest_classification:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:roc_curve:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ROC Curve Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","isDefault":false,"monitors":[],"name":"Set Up the Job","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","isDefault":false,"monitors":[],"name":"Machine Learning","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/ml/clustering_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","application":{"name":"python"},"isDefault":false,"isUsingDataset":true,"name":"Python ML Train Clustering","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"schemaVersion":"2022.8.16","units":[{"flowchartId":"head-set-predict-status","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Dataset","next":"head-branch-on-predict-status","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"isDefault":false,"maxOccurrences":100,"monitors":[],"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"flowchartId":"end-of-ml-train-head","head":false,"input":[],"isDefault":false,"monitors":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_random_forest_classification_sklearn.py","templateName":"model_random_forest_classification_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:random_forest_classification:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_random_forest_classification_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"35436b4a-cd9c-5089-ab42-665c4f9ba049","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_roc_curve_sklearn.py","templateName":"post_processing_roc_curve_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:roc_curve:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"35436b4a-cd9c-5089-ab42-665c4f9ba049","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_roc_curve_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"ROC Curve Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","isDefault":false,"monitors":[],"name":"Set Up the Job","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","isDefault":false,"monitors":[],"name":"Machine Learning","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/ml/regression_workflow.json":{"_id":"f447c6df-3b7b-5b8e-a0cc-1a743847ceed","application":{"name":"python"},"isDefault":false,"isUsingDataset":true,"name":"Python ML Train Regression","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Set Up the Job","properties":[],"schemaVersion":"2022.8.16","units":[{"flowchartId":"head-set-predict-status","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Set Workflow Mode","next":"head-fetch-training-data","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["pyml:workflow-type-setter"],"type":"assignment","value":"False"},{"enableRender":true,"flowchartId":"head-fetch-training-data","head":false,"input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Dataset","next":"head-branch-on-predict-status","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":[],"type":"io"},{"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","head":false,"input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"isDefault":false,"maxOccurrences":100,"monitors":[],"name":"Train or Predict?","next":"head-fetch-trained-model","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","status":"idle","statusTrack":[],"tags":[],"then":"head-fetch-trained-model","type":"condition"},{"enableRender":true,"flowchartId":"head-fetch-trained-model","head":false,"input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""},"type":"object_storage"}],"isDefault":false,"monitors":[],"name":"Fetch Trained Model as file","next":"end-of-ml-train-head","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","source":"object_storage","status":"idle","statusTrack":[],"subtype":"input","tags":["set-io-unit-filenames"],"type":"io"},{"flowchartId":"end-of-ml-train-head","head":false,"input":[],"isDefault":false,"monitors":[],"name":"End Setup","operand":"IS_SETUP_COMPLETE","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"True"}]},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Machine Learning","properties":["file_content","workflow:pyml_predict"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"enableRender":true,"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"settings.py","templateName":"pyml_settings.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:setup_variables_packages","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"c3608488-0259-5ff4-8b90-11c6e60d6c85","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n","contextProviders":[{"name":"MLSettingsDataManager"}],"executableName":"python","name":"settings.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Setup Variables and Packages","next":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_read_csv_pandas.py","templateName":"data_input_read_csv_pandas.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:read_csv:pandas","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"data_input_read_csv_pandas.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Input","next":"7fff5212-6c6d-586b-9997-4d4485e09383","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"data_input_train_test_split_sklearn.py","templateName":"data_input_train_test_split_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:data_input:train_test_split:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"7fff5212-6c6d-586b-9997-4d4485e09383","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n","contextProviders":[{"name":"MLTrainTestSplitDataManager"}],"executableName":"python","name":"data_input_train_test_split_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Train Test Split","next":"799de7dc-9394-571b-8e0d-3ff876a3df02","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"pre_processing_standardization_sklearn.py","templateName":"pre_processing_standardization_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:pre_processing:standardization:sklearn","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"799de7dc-9394-571b-8e0d-3ff876a3df02","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n","contextProviders":[],"executableName":"python","name":"pre_processing_standardization_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Data Standardize","next":"8dfc61c3-067d-5ea8-bd26-7296628d707a","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"model_mlp_sklearn.py","templateName":"model_mlp_sklearn.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:model:multilayer_perceptron:sklearn","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16"},"flowchartId":"8dfc61c3-067d-5ea8-bd26-7296628d707a","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n","contextProviders":[],"executableName":"python","name":"model_mlp_sklearn.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Model Train and Predict","next":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","postProcessors":[],"preProcessors":[],"results":[{"name":"workflow:pyml_predict"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"post_processing_parity_plot_matplotlib.py","templateName":"post_processing_parity_plot_matplotlib.py"},{"name":"requirements.txt","templateName":"pyml_requirements.txt"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"pyml:post_processing:parity_plot:matplotlib","postProcessors":[],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16"},"flowchartId":"1ca76a49-a3c7-5fa2-b693-538b599ecd7c","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n","contextProviders":[],"executableName":"python","name":"post_processing_parity_plot_matplotlib.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"Parity Plot","postProcessors":[{"name":"remove_virtual_environment"}],"preProcessors":[],"results":[{"name":"file_content"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":["remove-all-results"],"type":"execution"}]}],"units":[{"_id":"03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9","flowchartId":"5b51df93-15dd-5440-90fd-a3ffa264b7d8","isDefault":false,"monitors":[],"name":"Set Up the Job","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"30acc5cd-54e6-5f05-aafd-413ee8a69aa1","flowchartId":"90738aae-daac-599f-913f-29fb6acdff00","isDefault":false,"monitors":[],"name":"Machine Learning","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"python/python_script.json":{"_id":"de816646-766b-5f97-b468-0937d4381440","application":{"name":"python"},"isDefault":false,"name":"Python Script","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Python Script","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"python","schemaVersion":"2022.8.16","shortName":"py","summary":"Python Script","version":"3.10.13"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"python","executableName":"python","input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"9b8a495e-1ac1-56a7-b2e0-af1b405a1219","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n","contextProviders":[],"executableName":"python","name":"script.py","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"python","content":"# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n","contextProviders":[],"executableName":"python","name":"requirements.txt","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"python","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"64a079ba-7a12-57b7-ac06-310b2bf8d354","flowchartId":"c50e28b2-a0c5-5324-8b6f-e99b5a546bd8","isDefault":false,"monitors":[],"name":"Python Script","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"shell/batch_espresso_pwscf.json":{"_id":"e0046fb4-37db-5732-bf81-c48e13081a4c","application":{"name":"shell"},"isDefault":false,"name":"Shell Batch Job (Espresso PWSCF)","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Batch Job (Espresso PWSCF)","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"job_espresso_pw_scf.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"job_espresso_pw_scf","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n","contextProviders":[],"executableName":"sh","name":"job_espresso_pw_scf.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"f0775c7b-214a-5245-b921-5b4eb53d15a9","flowchartId":"d884e8f7-7acf-5a03-bc9a-186903bdaa0e","isDefault":false,"monitors":[],"name":"Shell Batch Job (Espresso PWSCF)","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"shell/hello_world.json":{"_id":"d2fd444c-06b4-5d66-baeb-449c680ae1bf","application":{"name":"shell"},"isDefault":false,"name":"Shell Script","properties":[],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"isDraft":false,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Shell Hello World","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"hello_world.sh"}],"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"hello_world","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"99304304-e873-5c89-ae83-91e61a7f629c","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n","contextProviders":[],"executableName":"sh","name":"hello_world.sh","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"shell","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"ce33d4cf-e0d2-5020-854d-9ea1fe5c8512","flowchartId":"319307c2-bf22-5bf2-b4e9-a4cdf671b786","isDefault":false,"monitors":[],"name":"Shell Hello World","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/band_gap.json":{"_id":"1a358471-0a73-5fcb-ad3c-7a8079029c86","application":{"name":"vasp"},"isDefault":false,"name":"Band Gap","properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Gap","properties":["atomic_forces","band_gaps","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"f0d65517-9592-5bc8-948e-a0851a766cbb","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"schemaVersion":"2022.8.16"},"flowchartId":"f0d65517-9592-5bc8-948e-a0851a766cbb","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_nscf","postProcessors":[],"preProcessors":[],"results":[{"name":"band_gaps"},{"name":"fermi_energy"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"e65f2461-5f5c-5a51-8c48-88ad37bff100","flowchartId":"db3b83ea-0ef5-594c-89a8-bde38dbc6105","isDefault":false,"monitors":[],"name":"Band Gap","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/band_structure.json":{"_id":"25b0ad08-87bb-5400-bea4-acd5fe2163c0","application":{"name":"vasp"},"isDefault":false,"name":"Band Structure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure","properties":["atomic_forces","band_structure","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"cd6e3d59-5544-56ac-878b-fd8716a09768","flowchartId":"c573187f-a8bb-5084-9fcf-1560bf4a7786","isDefault":false,"monitors":[],"name":"Band Structure","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/band_structure_dos.json":{"_id":"c8338d40-3c6e-5581-b03c-d7fb5cbb8df5","application":{"name":"vasp"},"isDefault":false,"name":"Band Structure + Density of States","properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"d38fea11-9781-5151-8dae-d705381498be","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Band Structure + Density of States","properties":["atomic_forces","band_structure","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","next":"1e1de3be-f6e4-513e-afe2-c84e567a8108","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_BANDS"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"1e1de3be-f6e4-513e-afe2-c84e567a8108","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n","contextProviders":[{"name":"KPathFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_bands","postProcessors":[],"preProcessors":[],"results":[{"name":"band_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"d38fea11-9781-5151-8dae-d705381498be","flowchartId":"8a098bb9-73b1-5e84-bfc7-b783e02d0f53","isDefault":false,"monitors":[],"name":"Band Structure + Density of States","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/dos.json":{"_id":"629a79fb-a03f-5e34-b2ce-9c735e8ef6c0","application":{"name":"vasp"},"isDefault":false,"name":"Density of States","properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Density of States","properties":["atomic_forces","density_of_states","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR"},{"name":"KPOINTS"},{"name":"POSCAR"}],"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"9cb87769-bf20-56bf-a8b3-5a164e3bf541","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[],"preProcessors":[],"results":[{"name":"density_of_states"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"4897ca33-b023-5a8d-9a5d-9e74df0f00ad","flowchartId":"3e64fdb4-ab5b-52a0-a1d5-51343c49481c","isDefault":false,"monitors":[],"name":"Density of States","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/fixed_cell_relaxation.json":{"_id":"cb69418c-2f6c-551d-af81-0cf20ec1113d","application":{"name":"vasp"},"isDefault":false,"name":"Fixed-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Fixed-cell Relaxation","properties":["atomic_forces","fermi_energy","final_structure","pressure","stress_tensor","total_energy","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","postProcessors":[{"name":"prepare_restart"}],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"schemaVersion":"2022.8.16"},"flowchartId":"2f718a3d-5800-57e2-b707-075c1f1755c6","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_relax","postProcessors":[{"name":"prepare_restart"}],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"atomic_forces"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"final_structure"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"db6cc94b-2f26-5688-ba97-80b11567b549","flowchartId":"0de8c4c8-b722-5cd2-ae68-b484262e0a01","isDefault":false,"monitors":[],"name":"Fixed-cell Relaxation","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/kpoint_convergence.json":{"_id":"fcf105f9-5ae7-5c32-a6b3-e3579cbdf39a","application":{"name":"vasp"},"isDefault":false,"name":"K-point Convergence","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"isDraft":false,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"K-point Convergence","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"flowchartId":"init-tolerance","head":true,"input":[],"isDefault":false,"monitors":[],"name":"Init tolerance","next":"init-increment","operand":"TOL","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0.00001},{"flowchartId":"init-increment","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init increment","next":"init-result","operand":"INC","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"flowchartId":"init-result","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init result","next":"init-parameter","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":0},{"flowchartId":"init-parameter","head":false,"input":[],"isDefault":false,"monitors":[],"name":"Init parameter","next":"vasp-kpoint-convergence","operand":"PARAMETER","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":1},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR"},{"name":"KPOINTS","templateName":"KPOINTS_CONV"},{"name":"POSCAR","templateName":"POSCAR"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"vasp-kpoint-convergence","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.POSCAR }}\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_kpt_conv","next":"store-result","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"flowchartId":"store-result","head":false,"input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"isDefault":false,"monitors":[],"name":"store result","next":"check-convergence","operand":"RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"total_energy"},{"else":"update-result","flowchartId":"check-convergence","head":false,"input":[],"isDefault":false,"maxOccurrences":50,"monitors":[],"name":"check convergence","next":"update-result","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","status":"idle","statusTrack":[],"tags":[],"then":"convergence-is-reached","type":"condition"},{"flowchartId":"update-result","head":false,"input":[{"name":"RESULT","scope":"global"}],"isDefault":false,"monitors":[],"name":"update result","next":"increment-parameter","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"RESULT"},{"flowchartId":"increment-parameter","head":false,"input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"isDefault":false,"monitors":[],"name":"increment parameter","next":"vasp-kpoint-convergence","operand":"PREV_RESULT","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER+INC"},{"flowchartId":"convergence-is-reached","head":false,"input":[{"name":"PARAMETER","scope":"global"}],"isDefault":false,"monitors":[],"name":"exit","operand":"PARAMETER","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"assignment","value":"PARAMETER"}]}],"units":[{"_id":"5d736d84-d616-538f-a09b-81a32ac0777c","flowchartId":"a34eec2c-cdb2-537d-88c0-ed1d7b205879","isDefault":false,"monitors":[],"name":"K-point Convergence","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"vasp/neb.json":{"_id":"2973908e-21ae-5424-afc9-ccb3fde477d8","application":{"name":"vasp"},"isDefault":false,"name":"Nudged Elastic Band (NEB)","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","reaction_energy_barrier","reaction_energy_profile"],"schemaVersion":"2022.8.16","subworkflows":[{"_id":"792e8c42-86ce-5f01-812a-66378ec4f379","application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"compute":{"arguments":{"nband":1,"ndiag":1,"nimage":1,"npools":1,"ntg":1},"cluster":{"fqdn":""},"isRestartable":true,"nodes":1,"notify":"n","ppn":1,"queue":"D","timeLimit":"01:00:00","timeLimitType":"per single attempt"},"isDraft":false,"isMultiMaterial":true,"model":{"functional":"pbe","method":{"data":{},"subtype":"paw","type":"pseudopotential"},"subtype":"gga","type":"dft"},"name":"Initial/Final Total Energies","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_INITIAL"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"f969f010-9dae-5085-9ac5-86150ef78897","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.FIRST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_initial","next":"e65a17ce-10c8-5710-ad4d-fb3d42434091","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"},{"application":{"build":"GNU","isDefault":true,"isLicensed":true,"name":"vasp","schemaVersion":"2022.8.16","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","version":"5.4.4"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"name":"vasp","postProcessors":[{"name":"error_handler"},{"name":"prepare_restart"},{"name":"remove_non_zero_weight_kpoints"}],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"vasp","executableName":"vasp","input":[{"name":"INCAR","templateName":"INCAR_NEB_INITIAL_FINAL"},{"name":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR_NEB_FINAL"}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16"},"flowchartId":"e65a17ce-10c8-5710-ad4d-fb3d42434091","head":false,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"ISTART = 0\nENCUT = 500\nISPIN = 2\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"INCAR","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n","contextProviders":[{"name":"KGridFormDataManager"},{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"KPOINTS","schemaVersion":"2022.8.16"}},{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"vasp","content":"{{ input.LAST_IMAGE }}\n","contextProviders":[{"name":"NEBFormDataManager"},{"name":"VASPNEBInputDataManager"}],"executableName":"vasp","name":"POSCAR","schemaVersion":"2022.8.16"}}],"isDefault":false,"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_neb_final","postProcessors":[],"preProcessors":[],"results":[{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"pressure"},{"name":"fermi_energy"},{"name":"atomic_forces"},{"name":"total_force"},{"name":"stress_tensor"}],"schemaVersion":"2022.8.16","status":"idle","statusTrack":[],"tags":[],"type":"execution"}]},{"_id":"c9b7ad2a-5207-5e41-9b66-28474a8921f8","application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"isDraft":false,"isMultiMaterial":true,"model":{"method":{"data":{},"subtype":"unknown","type":"unknown"},"subtype":"unknown","type":"unknown"},"name":"Prepare Directories","properties":[],"schemaVersion":"2022.8.16","units":[{"application":{"build":"GNU","isDefault":true,"name":"shell","schemaVersion":"2022.8.16","shortName":"sh","summary":"Shell Script","version":"5.1.8"},"context":[],"executable":{"isDefault":true,"monitors":[{"name":"standard_output"}],"name":"sh","postProcessors":[],"preProcessors":[],"schemaVersion":"2022.8.16"},"flavor":{"applicationName":"shell","executableName":"sh","input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"isDefault":false,"monitors":[{"name":"standard_output"}],"name":"bash_vasp_prepare_neb_images","postProcessors":[],"preProcessors":[],"results":[],"schemaVersion":"2022.8.16"},"flowchartId":"dc397ead-54ad-513b-992e-aedd54576409","head":true,"input":[{"isManuallyChanged":false,"rendered":"","template":{"applicationName":"shell","content":"#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < avoid substituion below #}\n{% raw %}\nCONTROL_PH_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/control_ph.xml\"\nPATTERNS_FILENAME = \"{{JOB_WORK_DIR}}/outdir/_ph0/__prefix__.phsave/patterns.{}.xml\"\n{% endraw %}\n\n# get integer content of an xml tag in a document\ndef get_int_by_tag_name(doc, tag_name):\n element = doc.getElementsByTagName(tag_name)\n return int(element[0].firstChild.nodeValue)\n\nvalues = []\n\n# get number of q-points and cycle through them\nxmldoc = minidom.parse(CONTROL_PH_FILENAME)\nnumber_of_qpoints = get_int_by_tag_name(xmldoc, \"NUMBER_OF_Q_POINTS\")\n\nfor i in range(number_of_qpoints):\n # get number of irreducible representations per qpoint\n xmldoc = minidom.parse(PATTERNS_FILENAME.format(i+1))\n number_of_irr_per_qpoint = get_int_by_tag_name(xmldoc, \"NUMBER_IRR_REP\")\n # add each distinct combination of qpoint and irr as a separate entry\n for j in range(number_of_irr_per_qpoint):\n values.append({\n \"qpoint\": i + 1,\n \"irr\": j + 1\n })\n\n# store final values in standard output (STDOUT)\nprint(json.dumps(values, indent=4))\n", "contextProviders": [], "executableName": "python", "name": "espresso_xml_get_qpt_irr.py", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "python", "next": "assignment", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "flowchartId": "assignment", "head": false, "input": [{ "name": "STDOUT", "scope": "9b8a495e-1ac1-56a7-b2e0-af1b405a1219" }], "isDefault": false, "monitors": [], "name": "assignment", "operand": "Q_POINTS", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "type": "assignment", "value": "json.loads(STDOUT)" }] }, { "_id": "545a66e2-dfbe-513e-acaf-d79d0d139b9c", "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "reduce", "properties": ["phonon_dispersions", "phonon_dos"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "ph.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "ph.x", "input": [{ "name": "ph_grid_restart.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "ph_grid_restart", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "cb206177-a4af-599a-81ba-6c88d24253b6", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&INPUTPH\n tr2_ph = 1.0d-18,\n recover = .true.\n ldisp = .true.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n fildyn = 'dyn'\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", "contextProviders": [{ "name": "QGridFormDataManager" }], "executableName": "ph.x", "name": "ph_grid_restart.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "ph_grid_restart", "next": "3b4507a7-9244-540b-abe0-66bceab700f5", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "q2r.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "q2r.x", "input": [{ "name": "q2r.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "q2r", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "3b4507a7-9244-540b-abe0-66bceab700f5", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&INPUT\n fildyn = 'dyn'\n zasr = 'simple'\n flfrc = 'force_constants.fc'\n/\n", "contextProviders": [], "executableName": "q2r.x", "name": "q2r.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "q2r", "next": "8fe6a24b-c994-55a2-a448-88657292e8c2", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "matdyn.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "matdyn.x", "input": [{ "name": "matdyn_grid.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "matdyn_grid", "postProcessors": [], "preProcessors": [], "results": [{ "name": "phonon_dos" }], "schemaVersion": "2022.8.16" }, "flowchartId": "8fe6a24b-c994-55a2-a448-88657292e8c2", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&INPUT\n asr = 'simple'\n flfrc = 'force_constants.fc'\n flfrq = 'frequencies.freq'\n dos = .true.\n fldos = 'phonon_dos.out'\n deltaE = 1.d0\n {% for d in igrid.dimensions -%}\n nk{{loop.index}} = {{d}}\n {% endfor %}\n /\n", "contextProviders": [{ "name": "IGridFormDataManager" }], "executableName": "matdyn.x", "name": "matdyn_grid.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "matdyn_grid", "next": "a7fded20-889b-54fc-bbb0-456e82689ab1", "postProcessors": [], "preProcessors": [], "results": [{ "name": "phonon_dos" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "matdyn.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "matdyn.x", "input": [{ "name": "matdyn_path.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "matdyn_path", "postProcessors": [], "preProcessors": [], "results": [{ "name": "phonon_dispersions" }], "schemaVersion": "2022.8.16" }, "flowchartId": "a7fded20-889b-54fc-bbb0-456e82689ab1", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&INPUT\n asr = 'simple'\n flfrc ='force_constants.fc'\n flfrq ='frequencies.freq'\n flvec ='normal_modes.out'\n q_in_band_form = .true.\n /\n{{ipath.length}}\n{% for point in ipath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "contextProviders": [{ "name": "IPathFormDataManager" }], "executableName": "matdyn.x", "name": "matdyn_path.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "matdyn_path", "postProcessors": [], "preProcessors": [], "results": [{ "name": "phonon_dispersions" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }], "units": [{ "_id": "f52b8039-83d0-5485-a1f1-0bc37cb01ed3", "flowchartId": "d270b789-fb67-573c-a566-9f09fdacea23", "isDefault": false, "monitors": [], "name": "pw-scf", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }, { "_id": "2f017bcb-f4ba-55b8-b939-1f780679a88e", "flowchartId": "4bb74dfb-46a6-5bf4-a477-5d374dc2e271", "isDefault": false, "monitors": [], "name": "ph-init-qpoints", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }, { "_id": "e4b6b2e7-7d8f-5ae1-b6bd-ee81ecbca11a", "flowchartId": "9894b91f-6e97-5ee6-af02-0bef26bd62c0", "isDefault": false, "monitors": [], "name": "espresso-xml-get-qpt-irr", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }, { "flowchartId": "24e3c1f0-8090-512e-9727-8770071d17c8", "input": { "name": "Q_POINTS", "scope": "global", "target": "MAP_DATA", "useValues": false, "values": [] }, "isDefault": false, "monitors": [], "name": "map", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "map", "workflowId": "5cc1c6bd-9047-4b64-8e10-e5ae288bbacf" }, { "_id": "545a66e2-dfbe-513e-acaf-d79d0d139b9c", "flowchartId": "55a9e9fb-3545-5c4b-a1bb-b64a899b78c6", "isDefault": false, "monitors": [], "name": "reduce", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }], "workflows": [{ "_id": "731d3397-3278-516a-b28e-53626ef50f0a", "name": "phonon_map_workflow", "properties": [], "subworkflows": [{ "_id": "03f3a8a3-1fd0-5007-925f-fba78be63a51", "application": { "build": "GNU", "isDefault": true, "name": "shell", "schemaVersion": "2022.8.16", "shortName": "sh", "summary": "Shell Script", "version": "5.1.8" }, "isDraft": false, "model": { "method": { "data": {}, "subtype": "unknown", "type": "unknown" }, "subtype": "unknown", "type": "unknown" }, "name": "pre-processor", "properties": [], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "name": "shell", "schemaVersion": "2022.8.16", "shortName": "sh", "summary": "Shell Script", "version": "5.1.8" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "sh", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "shell", "executableName": "sh", "input": [{ "name": "espresso_link_outdir_save.sh" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "espresso_link_outdir_save", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "99304304-e873-5c89-ae83-91e61a7f629c", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "shell", "content": "{% raw %}\n#!/bin/bash\n\nmkdir -p {{ JOB_SCRATCH_DIR }}/outdir/_ph0\ncd {{ JOB_SCRATCH_DIR }}/outdir\ncp -r {{ JOB_WORK_DIR }}/../outdir/__prefix__.* .\n{% endraw %}\n", "contextProviders": [], "executableName": "sh", "name": "espresso_link_outdir_save.sh", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "shell", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, { "_id": "e68db280-8636-53e3-81a0-88396ba6147d", "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "ph-single-irr-qpt", "properties": [], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "ph.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "ph.x", "input": [{ "name": "ph_single_irr_qpt.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "ph_single_irr_qpt", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "8db9af08-d935-57a0-a824-e7db6d936de8", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&INPUTPH\n tr2_ph = 1.0d-18\n ldisp = .true.\n {% raw %}\n start_q = {{MAP_DATA.qpoint}}\n last_q = {{MAP_DATA.qpoint}}\n start_irr = {{MAP_DATA.irr}}\n last_irr= {{MAP_DATA.irr}}\n {% endraw %}\n recover = .true.\n fildyn = 'dyn'\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_SCRATCH_DIR }}/outdir'{% endraw %}\n {% for d in qgrid.dimensions -%}\n nq{{loop.index}} = {{d}}\n {% endfor %}\n/\n", "contextProviders": [{ "name": "QGridFormDataManager" }], "executableName": "ph.x", "name": "ph_single_irr_qpt.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "ph_single_irr_qpt", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, { "_id": "7239fc3a-b343-513f-af35-e8687e1829da", "application": { "build": "GNU", "isDefault": true, "name": "shell", "schemaVersion": "2022.8.16", "shortName": "sh", "summary": "Shell Script", "version": "5.1.8" }, "isDraft": false, "model": { "method": { "data": {}, "subtype": "unknown", "type": "unknown" }, "subtype": "unknown", "type": "unknown" }, "name": "post-processor", "properties": [], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "name": "shell", "schemaVersion": "2022.8.16", "shortName": "sh", "summary": "Shell Script", "version": "5.1.8" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "sh", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "shell", "executableName": "sh", "input": [{ "name": "espresso_collect_dynmat.sh" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "espresso_collect_dynmat", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "cd5c3e29-511b-5ef8-949d-ad884f210301", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "shell", "content": "{% raw %}\n#!/bin/bash\n\ncp {{ JOB_SCRATCH_DIR }}/outdir/_ph0/__prefix__.phsave/dynmat* {{ JOB_WORK_DIR }}/../outdir/_ph0/__prefix__.phsave\n{% endraw %}\n", "contextProviders": [], "executableName": "sh", "name": "espresso_collect_dynmat.sh", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "shell", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }], "units": [{ "_id": "03f3a8a3-1fd0-5007-925f-fba78be63a51", "flowchartId": "e9a790f4-dec6-52c1-b951-014f0ff01cb4", "monitors": [], "name": "pre-processor", "postProcessors": [], "preProcessors": [], "results": [], "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }, { "_id": "e68db280-8636-53e3-81a0-88396ba6147d", "flowchartId": "c2195045-7a5c-54d3-ab88-211c82de09f1", "monitors": [], "name": "ph-single-irr-qpt", "postProcessors": [], "preProcessors": [], "results": [], "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }, { "_id": "7239fc3a-b343-513f-af35-e8687e1829da", "flowchartId": "e483c7fb-2a29-5e91-819a-7465ead70134", "monitors": [], "name": "post-processor", "postProcessors": [], "preProcessors": [], "results": [], "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }], "workflows": [] }] }, "espresso/recalculate_bands.json": { "_id": "42b2b964-8ccc-5b36-9e33-41a954abc2ba", "application": { "name": "espresso" }, "isDefault": false, "name": "Recalculate Bands", "properties": ["band_structure"], "schemaVersion": "2022.8.16", "subworkflows": [{ "_id": "64551dfb-e529-5d8d-9092-ff268f4da134", "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Recalculate Bands", "properties": ["band_structure"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_bands.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pw_bands", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_structure" }], "schemaVersion": "2022.8.16" }, "flowchartId": "d618df45-5af3-5da5-8882-d74a27e00b04", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_bands.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pw_bands", "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_structure" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "bands.x", "input": [{ "name": "bands.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", "contextProviders": [], "executableName": "bands.x", "name": "bands.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }], "units": [{ "_id": "64551dfb-e529-5d8d-9092-ff268f4da134", "flowchartId": "e8b72a45-765e-565f-ab17-c91a21aec09d", "isDefault": false, "monitors": [], "name": "Recalculate Bands", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }], "workflows": [] }, "espresso/surface_energy.json": { "_id": "68512987-de73-5614-bab2-0f8b575cffa3", "application": { "name": "espresso" }, "isDefault": false, "name": "Surface Energy", "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "surface_energy", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "subworkflows": [{ "_id": "3e05a2b5-4171-54a2-9d2d-9e46118a56bf", "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Surface Energy", "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "surface_energy", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "flowchartId": "e463ef46-a36e-5168-87dd-e21eb980dfb8", "head": true, "input": [{ "endpoint": "materials", "endpoint_options": { "params": { "projection": "{}", "query": "{'_id': MATERIAL_ID}" } }, "name": "DATA", "type": "api" }], "isDefault": false, "monitors": [], "name": "io-slab", "next": "ee7abb4e-7848-5aeb-960d-0d441909e2d1", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "source": "api", "status": "idle", "statusTrack": [], "subtype": "input", "tags": [], "type": "io" }, { "flowchartId": "ee7abb4e-7848-5aeb-960d-0d441909e2d1", "head": false, "input": [{ "name": "DATA", "scope": "e463ef46-a36e-5168-87dd-e21eb980dfb8" }], "isDefault": false, "monitors": [], "name": "slab", "next": "44263820-0c80-5bd1-b854-9da8d198eac1", "operand": "SLAB", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "DATA[0]" }, { "flowchartId": "44263820-0c80-5bd1-b854-9da8d198eac1", "head": false, "input": [{ "endpoint": "materials", "endpoint_options": { "params": { "projection": "{}", "query": "{'_id': SLAB.metadata.bulkId}" } }, "name": "DATA", "type": "api" }], "isDefault": false, "monitors": [], "name": "io-bulk", "next": "b70656f1-a394-57f4-b4de-00096969df4b", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "source": "api", "status": "idle", "statusTrack": [], "subtype": "input", "tags": [], "type": "io" }, { "flowchartId": "b70656f1-a394-57f4-b4de-00096969df4b", "head": false, "input": [{ "name": "DATA", "scope": "44263820-0c80-5bd1-b854-9da8d198eac1" }], "isDefault": false, "monitors": [], "name": "bulk", "next": "6ca4006a-e3ae-56ea-91a1-06b9790b5f7e", "operand": "BULK", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "DATA[0] if DATA else None" }, { "errorMessage": "Bulk material does not exist!", "flowchartId": "6ca4006a-e3ae-56ea-91a1-06b9790b5f7e", "head": false, "isDefault": false, "monitors": [], "name": "assert-bulk", "next": "490635e0-c593-5809-9eb2-c794b96cfed1", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "statement": "BULK != None", "status": "idle", "statusTrack": [], "tags": [], "type": "assertion" }, { "flowchartId": "490635e0-c593-5809-9eb2-c794b96cfed1", "head": false, "input": [{ "endpoint": "refined-properties", "endpoint_options": { "params": { "projection": "{'sort': {'precision.value': -1}, 'limit': 1}", "query": "{ 'exabyteId': BULK.exabyteId, 'data.name': 'total_energy', 'group': {'$regex': ''.join((SUBWORKFLOW.application.shortName, ':'))} }" } }, "name": "DATA", "type": "api" }], "isDefault": false, "monitors": [], "name": "io-e-bulk", "next": "bbe13b97-4243-5a85-8f61-a279d0b797aa", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "source": "api", "status": "idle", "statusTrack": [], "subtype": "input", "tags": [], "type": "io" }, { "flowchartId": "bbe13b97-4243-5a85-8f61-a279d0b797aa", "head": false, "input": [{ "name": "DATA", "scope": "490635e0-c593-5809-9eb2-c794b96cfed1" }], "isDefault": false, "monitors": [], "name": "e-bulk", "next": "a06c9f43-7670-5fd0-ac42-7028a472235a", "operand": "E_BULK", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "DATA[0].data.value if DATA else None" }, { "errorMessage": "E_BULK does not exist!", "flowchartId": "a06c9f43-7670-5fd0-ac42-7028a472235a", "head": false, "isDefault": false, "monitors": [], "name": "assert-e-bulk", "next": "cdf210be-26ed-585a-b4ac-d55795ba2975", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "statement": "E_BULK != None", "status": "idle", "statusTrack": [], "tags": [], "type": "assertion" }, { "flowchartId": "cdf210be-26ed-585a-b4ac-d55795ba2975", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "surface", "next": "ffa8e43d-096a-555b-b8d0-6d283365ef47", "operand": "A", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))" }, { "flowchartId": "ffa8e43d-096a-555b-b8d0-6d283365ef47", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "n-bulk", "next": "a0336ec5-a6da-5e4c-bb48-82b70cf5245f", "operand": "N_BULK", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "len(BULK.basis.elements)" }, { "flowchartId": "a0336ec5-a6da-5e4c-bb48-82b70cf5245f", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "n-slab", "next": "9fc7a088-5533-5f70-bb33-f676ec65f565", "operand": "N_SLAB", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "len(SLAB.basis.elements)" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf.in" }], "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16" }, "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_scf.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "next": "fcd88119-817c-5ac1-a430-ba892ac743eb", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "flowchartId": "fcd88119-817c-5ac1-a430-ba892ac743eb", "head": false, "input": [{ "name": "total_energy", "scope": "9fc7a088-5533-5f70-bb33-f676ec65f565" }], "isDefault": false, "monitors": [], "name": "e-slab", "next": "542ea9ad-8a07-5a76-b233-f72fb27c4fc6", "operand": "E_SLAB", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "total_energy" }, { "flowchartId": "542ea9ad-8a07-5a76-b233-f72fb27c4fc6", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "surface-energy", "operand": "SURFACE_ENERGY", "postProcessors": [], "preProcessors": [], "results": [{ "name": "surface_energy" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))" }] }], "units": [{ "_id": "3e05a2b5-4171-54a2-9d2d-9e46118a56bf", "flowchartId": "d81dc9ce-bb50-5bc6-af1d-e5ede03bb0a6", "isDefault": false, "monitors": [], "name": "Surface Energy", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }], "workflows": [] }, "espresso/total_energy.json": { "_id": "4e36ca25-fa46-5628-a227-27d22dea8553", "application": { "name": "espresso" }, "isDefault": false, "name": "Total Energy", "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "subworkflows": [{ "_id": "a16677f9-bb5b-54b5-9f97-c2af8c073184", "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Total Energy", "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf.in" }], "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16" }, "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_scf.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }], "tags": ["default"], "units": [{ "_id": "a16677f9-bb5b-54b5-9f97-c2af8c073184", "flowchartId": "6059d61a-6a92-5657-9130-02208639aff8", "isDefault": false, "monitors": [], "name": "Total Energy", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }], "workflows": [] }, "espresso/valence_band_offset.json": { "_id": "d8e08cac-7747-50aa-b925-41f214d722c6", "application": { "name": "espresso" }, "isDefault": false, "name": "Valence Band Offset (2D)", "properties": ["atomic_forces", "average_potential_profile", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "valence_band_offset"], "schemaVersion": "2022.8.16", "subworkflows": [{ "_id": "9c65d03e-6a30-58f3-947a-f174342be0c3", "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "isDraft": false, "isMultiMaterial": true, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "BS + Avg ESP (Interface)", "properties": ["atomic_forces", "average_potential_profile", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "flowchartId": "0f21d8c4-ab32-53ba-b40d-fc9b6608e1b9", "head": true, "input": [], "isDefault": false, "monitors": [], "name": "Set Material Index (Interface)", "next": "9fc7a088-5533-5f70-bb33-f676ec65f565", "operand": "MATERIAL_INDEX", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "0" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf.in" }], "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16" }, "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_scf.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "next": "pw-bands-calculate-band-gap", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_bands.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pw_bands", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_structure" }], "schemaVersion": "2022.8.16" }, "flowchartId": "pw-bands-calculate-band-gap", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_bands.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pw_bands", "next": "a667d9fd-35d5-5897-be0e-fa0247233649", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_gaps" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "flowchartId": "a667d9fd-35d5-5897-be0e-fa0247233649", "head": false, "input": [{ "name": "band_gaps", "scope": "pw-bands-calculate-band-gap" }], "isDefault": false, "monitors": [], "name": "Select indirect band gap", "next": "08819369-b541-5b51-8a40-0ee135039482", "operand": "BAND_GAP_INDIRECT", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]" }, { "flowchartId": "08819369-b541-5b51-8a40-0ee135039482", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "Set Valence Band Maximum", "next": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "operand": "VBM", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "BAND_GAP_INDIRECT['eigenvalueValence']" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "bands.x", "input": [{ "name": "bands.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", "contextProviders": [], "executableName": "bands.x", "name": "bands.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands", "next": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pp.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pp.x", "input": [{ "name": "pp_electrostatic_potential.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pp_electrostatic_potential", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", "contextProviders": [], "executableName": "pp.x", "name": "pp_electrostatic_potential.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Electrostatic Potential (ESP)", "next": "average-electrostatic-potential", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "average.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "average.x", "input": [{ "name": "average.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "average_potential", "postProcessors": [], "preProcessors": [], "results": [{ "name": "average_potential_profile" }], "schemaVersion": "2022.8.16" }, "flowchartId": "average-electrostatic-potential", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", "contextProviders": [], "executableName": "average.x", "name": "average.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "average ESP", "next": "c6c11873-91d7-5422-8302-3dcc1ce971e9", "postProcessors": [], "preProcessors": [], "results": [{ "name": "average_potential_profile" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "flowchartId": "c6c11873-91d7-5422-8302-3dcc1ce971e9", "head": false, "input": [{ "name": "average_potential_profile", "scope": "average-electrostatic-potential" }], "isDefault": false, "monitors": [], "name": "Set Macroscopically Averaged ESP Data", "operand": "array_from_context", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "average_potential_profile['yDataSeries'][1]" }] }, { "_id": "ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7", "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "isDraft": false, "model": { "method": { "data": {}, "subtype": "unknown", "type": "unknown" }, "subtype": "unknown", "type": "unknown" }, "name": "Find ESP Values (Interface)", "properties": [], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "find_extrema.py", "templateName": "find_extrema.py" }, { "name": "requirements.txt", "templateName": "processing_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "generic:processing:find_extrema:scipy", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "python-find-extrema", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n", "contextProviders": [], "executableName": "python", "name": "find_extrema.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Find Extrema", "next": "8fce780b-5555-5b73-b3d1-1bb24a4c759d", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "flowchartId": "8fce780b-5555-5b73-b3d1-1bb24a4c759d", "head": false, "input": [{ "name": "STDOUT", "scope": "python-find-extrema" }], "isDefault": false, "monitors": [], "name": "Set Average ESP Value", "operand": "AVG_ESP_INTERFACE", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "json.loads(STDOUT)['minima']" }] }, { "_id": "ba46d9b4-610f-537e-ae39-e39ce5240cda", "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "isDraft": false, "isMultiMaterial": true, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "BS + Avg ESP (interface left)", "properties": ["atomic_forces", "average_potential_profile", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "flowchartId": "0bd31760-f6e4-5826-b282-882c06c97f94", "head": true, "input": [], "isDefault": false, "monitors": [], "name": "Set Material Index (Interface left)", "next": "3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08", "operand": "MATERIAL_INDEX", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "1" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf.in" }], "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16" }, "flowchartId": "3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_scf.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "next": "pw-bands-calculate-band-gap-left", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_bands.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pw_bands", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_structure" }], "schemaVersion": "2022.8.16" }, "flowchartId": "pw-bands-calculate-band-gap-left", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_bands.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pw_bands", "next": "a667d9fd-35d5-5897-be0e-fa0247233649", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_gaps" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "flowchartId": "a667d9fd-35d5-5897-be0e-fa0247233649", "head": false, "input": [{ "name": "band_gaps", "scope": "pw-bands-calculate-band-gap-left" }], "isDefault": false, "monitors": [], "name": "Select indirect band gap", "next": "08819369-b541-5b51-8a40-0ee135039482", "operand": "BAND_GAP_INDIRECT", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]" }, { "flowchartId": "08819369-b541-5b51-8a40-0ee135039482", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "Set Valence Band Maximum", "next": "dfc4f1c5-5856-588a-99df-6d5fb46bb429", "operand": "VBM_LEFT", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "BAND_GAP_INDIRECT['eigenvalueValence']" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "bands.x", "input": [{ "name": "bands.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "dfc4f1c5-5856-588a-99df-6d5fb46bb429", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", "contextProviders": [], "executableName": "bands.x", "name": "bands.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands", "next": "b1bb2b3e-3197-5bcd-85b0-959cc357c8d3", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pp.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pp.x", "input": [{ "name": "pp_electrostatic_potential.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pp_electrostatic_potential", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "b1bb2b3e-3197-5bcd-85b0-959cc357c8d3", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", "contextProviders": [], "executableName": "pp.x", "name": "pp_electrostatic_potential.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Electrostatic Potential (ESP)", "next": "average-electrostatic-potential-left", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "average.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "average.x", "input": [{ "name": "average.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "average_potential", "postProcessors": [], "preProcessors": [], "results": [{ "name": "average_potential_profile" }], "schemaVersion": "2022.8.16" }, "flowchartId": "average-electrostatic-potential-left", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", "contextProviders": [], "executableName": "average.x", "name": "average.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "average ESP", "next": "c6c11873-91d7-5422-8302-3dcc1ce971e9", "postProcessors": [], "preProcessors": [], "results": [{ "name": "average_potential_profile" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "flowchartId": "c6c11873-91d7-5422-8302-3dcc1ce971e9", "head": false, "input": [{ "name": "average_potential_profile", "scope": "average-electrostatic-potential-left" }], "isDefault": false, "monitors": [], "name": "Set Macroscopically Averaged ESP Data", "operand": "array_from_context", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "average_potential_profile['yDataSeries'][1]" }] }, { "_id": "6c303926-905c-5749-81d5-2d2964fdf09a", "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "isDraft": false, "model": { "method": { "data": {}, "subtype": "unknown", "type": "unknown" }, "subtype": "unknown", "type": "unknown" }, "name": "Find ESP Value (Interface left)", "properties": [], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "find_extrema.py", "templateName": "find_extrema.py" }, { "name": "requirements.txt", "templateName": "processing_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "generic:processing:find_extrema:scipy", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "python-find-extrema-left", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n", "contextProviders": [], "executableName": "python", "name": "find_extrema.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Find Extrema", "next": "8fce780b-5555-5b73-b3d1-1bb24a4c759d", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "flowchartId": "8fce780b-5555-5b73-b3d1-1bb24a4c759d", "head": false, "input": [{ "name": "STDOUT", "scope": "python-find-extrema-left" }], "isDefault": false, "monitors": [], "name": "Set Average ESP Value", "operand": "AVG_ESP_LEFT", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "json.loads(STDOUT)['minima']" }] }, { "_id": "aa611fe8-1e6a-5e5c-976a-f64bfaaaace9", "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "isDraft": false, "isMultiMaterial": true, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "BS + Avg ESP (interface right)", "properties": ["atomic_forces", "average_potential_profile", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "flowchartId": "a05809d1-cc0d-5a0b-bf5e-d43b90a6ac4b", "head": true, "input": [], "isDefault": false, "monitors": [], "name": "Set Material Index (Interface right)", "next": "b89d6348-3915-5c24-9fbb-350bc98ac708", "operand": "MATERIAL_INDEX", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "2" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf.in" }], "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16" }, "flowchartId": "b89d6348-3915-5c24-9fbb-350bc98ac708", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_scf.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "next": "pw-bands-calculate-band-gap-right", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_bands.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pw_bands", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_structure" }], "schemaVersion": "2022.8.16" }, "flowchartId": "pw-bands-calculate-band-gap-right", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'bands'\n title = ''\n verbosity = 'low'\n restart_mode = '{{input.RESTART_MODE}}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS crystal_b\n{{kpath.length}}\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_bands.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pw_bands", "next": "a667d9fd-35d5-5897-be0e-fa0247233649", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_gaps" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "flowchartId": "a667d9fd-35d5-5897-be0e-fa0247233649", "head": false, "input": [{ "name": "band_gaps", "scope": "pw-bands-calculate-band-gap-right" }], "isDefault": false, "monitors": [], "name": "Select indirect band gap", "next": "08819369-b541-5b51-8a40-0ee135039482", "operand": "BAND_GAP_INDIRECT", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]" }, { "flowchartId": "08819369-b541-5b51-8a40-0ee135039482", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "Set Valence Band Maximum", "next": "bc3f514c-4bed-521b-85a3-4e0edfdc3585", "operand": "VBM_RIGHT", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "BAND_GAP_INDIRECT['eigenvalueValence']" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "bands.x", "input": [{ "name": "bands.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "bc3f514c-4bed-521b-85a3-4e0edfdc3585", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&BANDS\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n filband = {% raw %}'{{ JOB_WORK_DIR }}/bands.dat'{% endraw %}\n no_overlap = .true.\n/\n", "contextProviders": [], "executableName": "bands.x", "name": "bands.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bands", "next": "28bb682d-d287-5beb-8a67-826449c474ee", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pp.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pp.x", "input": [{ "name": "pp_electrostatic_potential.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pp_electrostatic_potential", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "28bb682d-d287-5beb-8a67-826449c474ee", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n filplot = 'pp.dat'\n plot_num = 11\n/\n", "contextProviders": [], "executableName": "pp.x", "name": "pp_electrostatic_potential.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Electrostatic Potential (ESP)", "next": "average-electrostatic-potential-right", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "average.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "average.x", "input": [{ "name": "average.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "average_potential", "postProcessors": [], "preProcessors": [], "results": [{ "name": "average_potential_profile" }], "schemaVersion": "2022.8.16" }, "flowchartId": "average-electrostatic-potential-right", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "1\npp.dat\n1.0\n3000\n3\n3.0000\n", "contextProviders": [], "executableName": "average.x", "name": "average.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "average ESP", "next": "c6c11873-91d7-5422-8302-3dcc1ce971e9", "postProcessors": [], "preProcessors": [], "results": [{ "name": "average_potential_profile" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "flowchartId": "c6c11873-91d7-5422-8302-3dcc1ce971e9", "head": false, "input": [{ "name": "average_potential_profile", "scope": "average-electrostatic-potential-right" }], "isDefault": false, "monitors": [], "name": "Set Macroscopically Averaged ESP Data", "operand": "array_from_context", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "average_potential_profile['yDataSeries'][1]" }] }, { "_id": "736295e8-2ee0-5974-83bc-362061ac0688", "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "isDraft": false, "model": { "method": { "data": {}, "subtype": "unknown", "type": "unknown" }, "subtype": "unknown", "type": "unknown" }, "name": "Find ESP Value (Interface right)", "properties": [], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "find_extrema.py", "templateName": "find_extrema.py" }, { "name": "requirements.txt", "templateName": "processing_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "generic:processing:find_extrema:scipy", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "python-find-extrema-right", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------- #\n# This script aims to determine extrema for a given array. #\n# Please adjust the parameters according to your data. #\n# Note: This template expects the array to be defined in the #\n# context as 'array_from_context' (see details below). #\n# ----------------------------------------------------------- #\nimport json\n\nimport numpy as np\nfrom munch import Munch\nfrom scipy.signal import find_peaks\n\n# Data From Context\n# -----------------\n# The array 'array_from_context' is a 1D list (float or int) that has to be defined in\n# a preceding assignment unit in order to be extracted from the context.\n# Example: [0.0, 1.0, 4.0, 3.0]\n# Upon rendering the following Jinja template the extracted array will be inserted.\n{% raw %}Y = np.array({{array_from_context}}){% endraw %}\n\n# Settings\n# --------\nprominence = 0.3 # required prominence in the unit of the data array\n\n# Find Extrema\n# ------------\nmax_indices, _ = find_peaks(Y, prominence=prominence)\nmin_indices, _ = find_peaks(-1 * Y, prominence=prominence)\n\nresult = {\n \"maxima\": Y[max_indices].tolist(),\n \"minima\": Y[min_indices].tolist(),\n}\n\n# print final values to standard output (STDOUT),\n# so that they can be read by a subsequent assignment unit (using value=STDOUT)\nprint(json.dumps(result, indent=4))\n", "contextProviders": [], "executableName": "python", "name": "find_extrema.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\n\nmunch==2.5.0\nnumpy>=1.19.5\nscipy>=1.5.4\nmatplotlib>=3.0.0\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Find Extrema", "next": "8fce780b-5555-5b73-b3d1-1bb24a4c759d", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "flowchartId": "8fce780b-5555-5b73-b3d1-1bb24a4c759d", "head": false, "input": [{ "name": "STDOUT", "scope": "python-find-extrema-right" }], "isDefault": false, "monitors": [], "name": "Set Average ESP Value", "operand": "AVG_ESP_RIGHT", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "json.loads(STDOUT)['minima']" }] }, { "_id": "1b70e606-a7ee-599e-89e0-91a7dc5faa4a", "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "isDraft": false, "model": { "method": { "data": {}, "subtype": "unknown", "type": "unknown" }, "subtype": "unknown", "type": "unknown" }, "name": "Calculate VBO", "properties": ["valence_band_offset"], "schemaVersion": "2022.8.16", "units": [{ "flowchartId": "bd4eaa98-b001-5694-87ef-ec77540502ab", "head": true, "input": [], "isDefault": false, "monitors": [], "name": "Difference of valence band maxima", "next": "2626f7bb-d392-5fd4-ab71-329b508de347", "operand": "VBM_DIFF", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "VBM_LEFT - VBM_RIGHT" }, { "flowchartId": "2626f7bb-d392-5fd4-ab71-329b508de347", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "Difference of macroscopically averaged ESP in bulk", "next": "b7307787-53e2-599b-ad12-d627b04074b4", "operand": "AVG_ESP_DIFF", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]" }, { "flowchartId": "b7307787-53e2-599b-ad12-d627b04074b4", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "Lineup of macroscopically averaged ESP in interface", "next": "197f4b4d-cb7b-57be-a885-d44cb1f61905", "operand": "ESP_LINEUP", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])" }, { "flowchartId": "197f4b4d-cb7b-57be-a885-d44cb1f61905", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "Valence Band Offset", "operand": "VALENCE_BAND_OFFSET", "postProcessors": [], "preProcessors": [], "results": [{ "name": "valence_band_offset" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))" }] }], "units": [{ "_id": "9c65d03e-6a30-58f3-947a-f174342be0c3", "flowchartId": "fd622b5c-5c02-594e-b582-b245c17ca9a4", "isDefault": false, "monitors": [], "name": "BS + Avg ESP (Interface)", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }, { "_id": "ce26adc1-6a26-53ef-9626-5eb6a6b9ccb7", "flowchartId": "ad3b1e4c-5965-5605-a067-dd0c59907c4b", "isDefault": false, "monitors": [], "name": "Find ESP Values (Interface)", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }, { "_id": "ba46d9b4-610f-537e-ae39-e39ce5240cda", "flowchartId": "8d5b4734-edfd-55cc-ad80-aaa72487398d", "isDefault": false, "monitors": [], "name": "BS + Avg ESP (interface left)", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }, { "_id": "6c303926-905c-5749-81d5-2d2964fdf09a", "flowchartId": "102ec582-5b75-52f5-8b39-19ca725ed47a", "isDefault": false, "monitors": [], "name": "Find ESP Value (Interface left)", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }, { "_id": "aa611fe8-1e6a-5e5c-976a-f64bfaaaace9", "flowchartId": "603c45db-93aa-54ce-a7fe-6e9b65b0037d", "isDefault": false, "monitors": [], "name": "BS + Avg ESP (interface right)", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }, { "_id": "736295e8-2ee0-5974-83bc-362061ac0688", "flowchartId": "e3444d35-cc41-59f5-8481-78d0c383b84e", "isDefault": false, "monitors": [], "name": "Find ESP Value (Interface right)", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }, { "_id": "1b70e606-a7ee-599e-89e0-91a7dc5faa4a", "flowchartId": "0e0b141a-39ca-52bc-9094-e5f96dc72f39", "isDefault": false, "monitors": [], "name": "Calculate VBO", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }], "workflows": [] }, "espresso/variable_cell_relaxation.json": { "_id": "c45dcef1-d16b-59d1-9318-cedd0b1acf08", "application": { "name": "espresso" }, "isDefault": false, "name": "Variable-cell Relaxation", "properties": ["atomic_forces", "fermi_energy", "final_structure", "pressure", "stress_tensor", "total_energy", "total_force"], "schemaVersion": "2022.8.16", "subworkflows": [{ "_id": "58709c44-47f6-5fbf-bf2e-358b9d98f75d", "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Variable-cell Relaxation", "properties": ["atomic_forces", "fermi_energy", "final_structure", "pressure", "stress_tensor", "total_energy", "total_force"], "schemaVersion": "2022.8.16", "systemName": "espresso-variable-cell-relaxation", "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_vc_relax.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }, { "name": "convergence_ionic" }], "name": "pw_vc-relax", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }, { "name": "final_structure" }], "schemaVersion": "2022.8.16" }, "flowchartId": "e1bd0870-6245-5fc2-a50d-48cabc356ac8", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&CONTROL\n calculation = 'vc-relax'\n title = ''\n verbosity = 'low'\n restart_mode = 'from_scratch'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_vc_relax.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }, { "name": "convergence_ionic" }], "name": "pw_vc-relax", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }, { "name": "final_structure" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }], "tags": ["variable-cell_relaxation"], "units": [{ "_id": "58709c44-47f6-5fbf-bf2e-358b9d98f75d", "flowchartId": "8f6e9590-6a87-584b-abd7-1fb98253054c", "isDefault": false, "monitors": [], "name": "Variable-cell Relaxation", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }], "workflows": [] }, "espresso/wavefunction_amplitude.json": { "_id": "196d364a-5a30-549b-a898-8b9704b50ff1", "application": { "name": "espresso" }, "isDefault": false, "name": "Wavefunction Amplitude", "properties": ["atomic_forces", "band_structure", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "wavefunction_amplitude", "file_content"], "schemaVersion": "2022.8.16", "subworkflows": [{ "_id": "6a670ac8-6c12-5285-a6f8-9bf579fc88ee", "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Wavefunction Amplitude", "properties": ["atomic_forces", "band_structure", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "wavefunction_amplitude"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf.in" }], "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16" }, "flowchartId": "pw-scf", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_scf.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "next": "extract-band-energies", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "band_structure" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "flowchartId": "extract-band-energies", "head": false, "input": [{ "name": "band_structure", "scope": "pw-scf" }], "isDefault": false, "monitors": [], "name": "Extract Band Energies", "next": "indices-below-fermi", "operand": "band_energies", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]" }, { "flowchartId": "indices-below-fermi", "head": false, "input": [{ "name": "fermi_energy", "scope": "pw-scf" }], "isDefault": false, "monitors": [], "name": "Find Indices Below Fermi", "next": "8771dc7f-878e-5f13-a840-a3a416854f1e", "operand": "indices_below_fermi", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]" }, { "flowchartId": "8771dc7f-878e-5f13-a840-a3a416854f1e", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "Store Band Below EF", "next": "57a07d7d-3f68-5f31-97ad-ebe8c5593cd2", "operand": "KBAND_VALUE_BELOW_EF", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1" }, { "flowchartId": "57a07d7d-3f68-5f31-97ad-ebe8c5593cd2", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "Select Band", "next": "pp-wfn", "operand": "KBAND_VALUE", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "KBAND_VALUE_BELOW_EF" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pp.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pp.x", "input": [{ "name": "pp_wfn.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pp_wfn", "postProcessors": [], "preProcessors": [], "results": [{ "name": "wavefunction_amplitude" }], "schemaVersion": "2022.8.16" }, "flowchartId": "pp-wfn", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&INPUTPP\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n plot_num = 7\n kpoint = 1\n kband = {% raw %}{{ KBAND_VALUE | default(1) }}{% endraw %}\n lsign = .true.\n/\n&PLOT\n iflag = 1\n fileout = 'wf_r.dat'\n output_format = 0\n x0(1) = 0.0, x0(2) = 0.0, x0(3) = 0.0\n e1(1) = 0.0, e1(2) = 0.0, e1(3) = {{material.lattice.c/material.lattice.a}}\n nx = 200\n/\n", "contextProviders": [], "executableName": "pp.x", "name": "pp_wfn.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pp_wfn", "postProcessors": [], "preProcessors": [], "results": [{ "name": "wavefunction_amplitude" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, { "_id": "e4ec581f-1cb3-5036-b698-999a96711559", "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "isDraft": false, "model": { "method": { "data": {}, "subtype": "unknown", "type": "unknown" }, "subtype": "unknown", "type": "unknown" }, "name": "Plot Wavefunction", "properties": ["file_content"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "script.py", "templateName": "plot_wavefunction.py" }, { "name": "requirements.txt", "templateName": "requirements_plot_wavefunction.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "plot_wavefunction", "postProcessors": [], "preProcessors": [], "results": [{ "name": "file_content" }], "schemaVersion": "2022.8.16" }, "flowchartId": "57fca898-8e8b-5ef2-81a5-9d2b612bc18d", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ---------------------------------------------------------------- #\n# Generate wavefunction plot from pp.x output #\n# And saves static #\n# ---------------------------------------------------------------- #\n\nimport matplotlib\nimport numpy as np\n\nmatplotlib.use('Agg') # Non-interactive backend\nimport matplotlib.pyplot as plt\n\n# Load wavefunction data from pp.x output\ndata = np.loadtxt('wf_r.dat')\nz = data[:, 0]\npsi_r = data[:, 1]\n\n# Calculate wavefunction amplitude\npsi_amplitude = np.abs(psi_r)\n\n# Create static PNG plot\nfig, ax = plt.subplots(figsize=(10, 6))\nax.plot(z, psi_amplitude, 'b-', linewidth=2)\nax.set_xlabel('Position z (alat)', fontsize=12)\nax.set_ylabel('Wavefunction amplitude |ψ| (a.u.)', fontsize=12)\nax.set_title('Wavefunction along z-axis', fontsize=14)\nax.grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('wf_r.png', dpi=150, bbox_inches='tight')\nplt.close()\n", "contextProviders": [], "executableName": "python", "name": "script.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ------------------------------------------------------------------ #\n# #\n# Python package requirements for plot_wavefunction unit #\n# #\n# ------------------------------------------------------------------ #\n\nnumpy<2\nmatplotlib\n\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "plot WFN", "postProcessors": [], "preProcessors": [], "results": [{ "name": "file_content" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }], "tags": ["wfn", "wfn_plot"], "units": [{ "_id": "6a670ac8-6c12-5285-a6f8-9bf579fc88ee", "flowchartId": "36467db9-279f-52a3-a6ef-ffdc26d875ed", "isDefault": false, "monitors": [], "name": "Wavefunction Amplitude", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }, { "_id": "e4ec581f-1cb3-5036-b698-999a96711559", "flowchartId": "4ce49281-e731-550e-af66-6d2408db8237", "isDefault": false, "monitors": [], "name": "Plot Wavefunction", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }], "workflows": [] }, "espresso/zero_point_energy.json": { "_id": "3158c78d-58bb-5675-8c7f-6f2337061015", "application": { "name": "espresso" }, "isDefault": false, "name": "Zero Point Energy", "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "zero_point_energy"], "schemaVersion": "2022.8.16", "subworkflows": [{ "_id": "151538cc-9e71-5269-8b9e-cb5977151227", "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "us", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Zero Point Energy", "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "zero_point_energy"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "hasAdvancedComputeOptions": true, "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "pw.x", "postProcessors": [{ "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "pw.x", "input": [{ "name": "pw_scf.in" }], "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16" }, "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "QEPWXInputDataManager" }, { "name": "PlanewaveCutoffDataManager" }], "executableName": "pw.x", "name": "pw_scf.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "pw_scf", "next": "107595d1-490f-53a2-8432-7f8a12f14d96", "postProcessors": [], "preProcessors": [], "results": [{ "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "total_force" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "hasAdvancedComputeOptions": true, "isDefault": true, "name": "espresso", "schemaVersion": "2022.8.16", "shortName": "qe", "summary": "Quantum ESPRESSO", "version": "6.3" }, "context": [], "executable": { "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "ph.x", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "espresso", "executableName": "ph.x", "input": [{ "name": "ph_gamma.in" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "ph_gamma", "postProcessors": [], "preProcessors": [], "results": [{ "name": "zero_point_energy" }], "schemaVersion": "2022.8.16" }, "flowchartId": "107595d1-490f-53a2-8432-7f8a12f14d96", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "espresso", "content": "&INPUTPH\n tr2_ph = 1.0d-12\n asr = .true.\n search_sym = .false.\n prefix = '__prefix__'\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n/\n0 0 0\n", "contextProviders": [], "executableName": "ph.x", "name": "ph_gamma.in", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "ph_zpe", "postProcessors": [], "preProcessors": [], "results": [{ "name": "zero_point_energy" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }], "units": [{ "_id": "151538cc-9e71-5269-8b9e-cb5977151227", "flowchartId": "d906bd20-eb92-5a01-a0e2-c81a2d9b2a41", "isDefault": false, "monitors": [], "name": "Zero Point Energy", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }], "workflows": [] }, "nwchem/total_energy.json": { "_id": "937fbac8-2dec-5fb1-a46f-b8a0cc3d3d05", "application": { "name": "nwchem" }, "isDefault": false, "name": "Total Energy", "properties": ["total_energy", "total_energy_contributions"], "schemaVersion": "2022.8.16", "subworkflows": [{ "_id": "9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13", "application": { "build": "GNU", "isDefault": true, "name": "nwchem", "schemaVersion": "2022.8.16", "shortName": "nwchem", "summary": "NWChem", "version": "7.0.2" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "pople", "type": "localorbital" }, "subtype": "gga", "type": "dft" }, "name": "Total Energy", "properties": ["total_energy", "total_energy_contributions"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "name": "nwchem", "schemaVersion": "2022.8.16", "shortName": "nwchem", "summary": "NWChem", "version": "7.0.2" }, "context": [], "executable": { "hasAdvancedComputeOptions": false, "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "nwchem", "postProcessors": [{ "name": "error_handler" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "nwchem", "executableName": "nwchem", "input": [{ "name": "nwchem_total_energy.inp" }], "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "nwchem_total_energy", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }], "schemaVersion": "2022.8.16" }, "flowchartId": "6f1eda0b-ebe1-5ccd-92dc-c2e55de5e0c7", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "nwchem", "content": " start nwchem\n title \"Test\"\n charge {{ input.CHARGE }}\n geometry units au noautosym\n {{ input.ATOMIC_POSITIONS }}\n end\n basis\n * library {{ input.BASIS }}\n end\n dft\n xc {{ input.FUNCTIONAL }}\n mult {{ input.MULT }}\n end\n task dft energy\n", "contextProviders": [{ "name": "NWChemInputDataManager" }], "executableName": "nwchem", "name": "nwchem_total_energy.inp", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "nwchem_total_energy", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }], "units": [{ "_id": "9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13", "flowchartId": "6059d61a-6a92-5657-9130-02208639aff8", "isDefault": false, "monitors": [], "name": "Total Energy", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }], "workflows": [] }, "python/ml/classification_workflow.json": { "_id": "f447c6df-3b7b-5b8e-a0cc-1a743847ceed", "application": { "name": "python" }, "isDefault": false, "isUsingDataset": true, "name": "Python ML Train Classification", "properties": ["file_content", "workflow:pyml_predict"], "schemaVersion": "2022.8.16", "subworkflows": [{ "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "isDraft": false, "model": { "method": { "data": {}, "subtype": "unknown", "type": "unknown" }, "subtype": "unknown", "type": "unknown" }, "name": "Set Up the Job", "properties": [], "schemaVersion": "2022.8.16", "units": [{ "flowchartId": "head-set-predict-status", "head": true, "input": [], "isDefault": false, "monitors": [], "name": "Set Workflow Mode", "next": "head-fetch-training-data", "operand": "IS_WORKFLOW_RUNNING_TO_PREDICT", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": ["pyml:workflow-type-setter"], "type": "assignment", "value": "False" }, { "enableRender": true, "flowchartId": "head-fetch-training-data", "head": false, "input": [{ "basename": "{{DATASET_BASENAME}}", "objectData": { "CONTAINER": "", "NAME": "{{DATASET_FILEPATH}}", "PROVIDER": "", "REGION": "" }, "type": "object_storage" }], "isDefault": false, "monitors": [], "name": "Fetch Dataset", "next": "head-branch-on-predict-status", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "source": "object_storage", "status": "idle", "statusTrack": [], "subtype": "input", "tags": [], "type": "io" }, { "else": "end-of-ml-train-head", "flowchartId": "head-branch-on-predict-status", "head": false, "input": [{ "name": "IS_WORKFLOW_RUNNING_TO_PREDICT", "scope": "global" }], "isDefault": false, "maxOccurrences": 100, "monitors": [], "name": "Train or Predict?", "next": "head-fetch-trained-model", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "statement": "IS_WORKFLOW_RUNNING_TO_PREDICT", "status": "idle", "statusTrack": [], "tags": [], "then": "head-fetch-trained-model", "type": "condition" }, { "enableRender": true, "flowchartId": "head-fetch-trained-model", "head": false, "input": [{ "basename": "", "objectData": { "CONTAINER": "", "NAME": "", "PROVIDER": "", "REGION": "" }, "type": "object_storage" }], "isDefault": false, "monitors": [], "name": "Fetch Trained Model as file", "next": "end-of-ml-train-head", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "source": "object_storage", "status": "idle", "statusTrack": [], "subtype": "input", "tags": ["set-io-unit-filenames"], "type": "io" }, { "flowchartId": "end-of-ml-train-head", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "End Setup", "operand": "IS_SETUP_COMPLETE", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "True" }] }, { "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "isDraft": false, "model": { "method": { "data": {}, "subtype": "unknown", "type": "unknown" }, "subtype": "unknown", "type": "unknown" }, "name": "Machine Learning", "properties": ["file_content", "workflow:pyml_predict"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "enableRender": true, "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "settings.py", "templateName": "pyml_settings.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:setup_variables_packages", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "c3608488-0259-5ff4-8b90-11c6e60d6c85", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", "contextProviders": [{ "name": "MLSettingsDataManager" }], "executableName": "python", "name": "settings.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Setup Variables and Packages", "next": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "data_input_read_csv_pandas.py", "templateName": "data_input_read_csv_pandas.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:data_input:read_csv:pandas", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", "contextProviders": [], "executableName": "python", "name": "data_input_read_csv_pandas.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Data Input", "next": "7fff5212-6c6d-586b-9997-4d4485e09383", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "data_input_train_test_split_sklearn.py", "templateName": "data_input_train_test_split_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:data_input:train_test_split:sklearn", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "7fff5212-6c6d-586b-9997-4d4485e09383", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "contextProviders": [{ "name": "MLTrainTestSplitDataManager" }], "executableName": "python", "name": "data_input_train_test_split_sklearn.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Train Test Split", "next": "799de7dc-9394-571b-8e0d-3ff876a3df02", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "pre_processing_standardization_sklearn.py", "templateName": "pre_processing_standardization_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:pre_processing:standardization:sklearn", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "799de7dc-9394-571b-8e0d-3ff876a3df02", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", "contextProviders": [], "executableName": "python", "name": "pre_processing_standardization_sklearn.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Data Standardize", "next": "8dfc61c3-067d-5ea8-bd26-7296628d707a", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "model_random_forest_classification_sklearn.py", "templateName": "model_random_forest_classification_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:model:random_forest_classification:sklearn", "postProcessors": [], "preProcessors": [], "results": [{ "name": "workflow:pyml_predict" }], "schemaVersion": "2022.8.16" }, "flowchartId": "8dfc61c3-067d-5ea8-bd26-7296628d707a", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "contextProviders": [], "executableName": "python", "name": "model_random_forest_classification_sklearn.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Model Train and Predict", "next": "35436b4a-cd9c-5089-ab42-665c4f9ba049", "postProcessors": [], "preProcessors": [], "results": [{ "name": "workflow:pyml_predict" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": ["remove-all-results", "creates-predictions-csv-during-predict-phase"], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "post_processing_roc_curve_sklearn.py", "templateName": "post_processing_roc_curve_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:post_processing:roc_curve:sklearn", "postProcessors": [], "preProcessors": [], "results": [{ "name": "file_content" }], "schemaVersion": "2022.8.16" }, "flowchartId": "35436b4a-cd9c-5089-ab42-665c4f9ba049", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "contextProviders": [], "executableName": "python", "name": "post_processing_roc_curve_sklearn.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "ROC Curve Plot", "postProcessors": [{ "name": "remove_virtual_environment" }], "preProcessors": [], "results": [{ "name": "file_content" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": ["remove-all-results"], "type": "execution" }] }], "units": [{ "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", "flowchartId": "5b51df93-15dd-5440-90fd-a3ffa264b7d8", "isDefault": false, "monitors": [], "name": "Set Up the Job", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }, { "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", "flowchartId": "90738aae-daac-599f-913f-29fb6acdff00", "isDefault": false, "monitors": [], "name": "Machine Learning", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }], "workflows": [] }, "python/ml/clustering_workflow.json": { "_id": "f447c6df-3b7b-5b8e-a0cc-1a743847ceed", "application": { "name": "python" }, "isDefault": false, "isUsingDataset": true, "name": "Python ML Train Clustering", "properties": ["file_content", "workflow:pyml_predict"], "schemaVersion": "2022.8.16", "subworkflows": [{ "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "isDraft": false, "model": { "method": { "data": {}, "subtype": "unknown", "type": "unknown" }, "subtype": "unknown", "type": "unknown" }, "name": "Set Up the Job", "properties": [], "schemaVersion": "2022.8.16", "units": [{ "flowchartId": "head-set-predict-status", "head": true, "input": [], "isDefault": false, "monitors": [], "name": "Set Workflow Mode", "next": "head-fetch-training-data", "operand": "IS_WORKFLOW_RUNNING_TO_PREDICT", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": ["pyml:workflow-type-setter"], "type": "assignment", "value": "False" }, { "enableRender": true, "flowchartId": "head-fetch-training-data", "head": false, "input": [{ "basename": "{{DATASET_BASENAME}}", "objectData": { "CONTAINER": "", "NAME": "{{DATASET_FILEPATH}}", "PROVIDER": "", "REGION": "" }, "type": "object_storage" }], "isDefault": false, "monitors": [], "name": "Fetch Dataset", "next": "head-branch-on-predict-status", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "source": "object_storage", "status": "idle", "statusTrack": [], "subtype": "input", "tags": [], "type": "io" }, { "else": "end-of-ml-train-head", "flowchartId": "head-branch-on-predict-status", "head": false, "input": [{ "name": "IS_WORKFLOW_RUNNING_TO_PREDICT", "scope": "global" }], "isDefault": false, "maxOccurrences": 100, "monitors": [], "name": "Train or Predict?", "next": "head-fetch-trained-model", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "statement": "IS_WORKFLOW_RUNNING_TO_PREDICT", "status": "idle", "statusTrack": [], "tags": [], "then": "head-fetch-trained-model", "type": "condition" }, { "enableRender": true, "flowchartId": "head-fetch-trained-model", "head": false, "input": [{ "basename": "", "objectData": { "CONTAINER": "", "NAME": "", "PROVIDER": "", "REGION": "" }, "type": "object_storage" }], "isDefault": false, "monitors": [], "name": "Fetch Trained Model as file", "next": "end-of-ml-train-head", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "source": "object_storage", "status": "idle", "statusTrack": [], "subtype": "input", "tags": ["set-io-unit-filenames"], "type": "io" }, { "flowchartId": "end-of-ml-train-head", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "End Setup", "operand": "IS_SETUP_COMPLETE", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "True" }] }, { "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "isDraft": false, "model": { "method": { "data": {}, "subtype": "unknown", "type": "unknown" }, "subtype": "unknown", "type": "unknown" }, "name": "Machine Learning", "properties": ["file_content", "workflow:pyml_predict"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "enableRender": true, "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "settings.py", "templateName": "pyml_settings.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:setup_variables_packages", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "c3608488-0259-5ff4-8b90-11c6e60d6c85", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", "contextProviders": [{ "name": "MLSettingsDataManager" }], "executableName": "python", "name": "settings.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Setup Variables and Packages", "next": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "data_input_read_csv_pandas.py", "templateName": "data_input_read_csv_pandas.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:data_input:read_csv:pandas", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", "contextProviders": [], "executableName": "python", "name": "data_input_read_csv_pandas.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Data Input", "next": "7fff5212-6c6d-586b-9997-4d4485e09383", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "data_input_train_test_split_sklearn.py", "templateName": "data_input_train_test_split_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:data_input:train_test_split:sklearn", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "7fff5212-6c6d-586b-9997-4d4485e09383", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "contextProviders": [{ "name": "MLTrainTestSplitDataManager" }], "executableName": "python", "name": "data_input_train_test_split_sklearn.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Train Test Split", "next": "799de7dc-9394-571b-8e0d-3ff876a3df02", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "pre_processing_standardization_sklearn.py", "templateName": "pre_processing_standardization_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:pre_processing:standardization:sklearn", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "799de7dc-9394-571b-8e0d-3ff876a3df02", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", "contextProviders": [], "executableName": "python", "name": "pre_processing_standardization_sklearn.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Data Standardize", "next": "8dfc61c3-067d-5ea8-bd26-7296628d707a", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "model_random_forest_classification_sklearn.py", "templateName": "model_random_forest_classification_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:model:random_forest_classification:sklearn", "postProcessors": [], "preProcessors": [], "results": [{ "name": "workflow:pyml_predict" }], "schemaVersion": "2022.8.16" }, "flowchartId": "8dfc61c3-067d-5ea8-bd26-7296628d707a", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ------------------------------------------------------------ #\n# Workflow unit for a random forest classification model with #\n# Scikit-Learn. Parameters derived from Scikit-Learn's #\n# defaults. #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the confusion matrix. When #\n# the workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a filee named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.ensemble\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.ensemble.RandomForestClassifier(\n n_estimators=100,\n criterion=\"gini\",\n max_depth=None,\n min_samples_split=2,\n min_samples_leaf=1,\n min_weight_fraction_leaf=0.0,\n max_features=\"auto\",\n max_leaf_nodes=None,\n min_impurity_decrease=0.0,\n bootstrap=True,\n oob_score=False,\n verbose=0,\n class_weight=None,\n ccp_alpha=0.0,\n max_samples=None,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"random_forest\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Save the probabilities of the model\n test_probabilities = model.predict_proba(test_descriptors)\n context.save(test_probabilities, \"test_probabilities\")\n\n # Print some information to the screen for the regression problem\n confusion_matrix = sklearn.metrics.confusion_matrix(test_target, test_predictions)\n print(\"Confusion Matrix:\")\n print(confusion_matrix)\n context.save(confusion_matrix, \"confusion_matrix\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"random_forest\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Transform predictions back to their original labels\n label_encoder: sklearn.preprocessing.LabelEncoder = context.load(\"label_encoder\")\n predictions = label_encoder.inverse_transform(predictions)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "contextProviders": [], "executableName": "python", "name": "model_random_forest_classification_sklearn.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Model Train and Predict", "next": "35436b4a-cd9c-5089-ab42-665c4f9ba049", "postProcessors": [], "preProcessors": [], "results": [{ "name": "workflow:pyml_predict" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": ["remove-all-results", "creates-predictions-csv-during-predict-phase"], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "post_processing_roc_curve_sklearn.py", "templateName": "post_processing_roc_curve_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:post_processing:roc_curve:sklearn", "postProcessors": [], "preProcessors": [], "results": [{ "name": "file_content" }], "schemaVersion": "2022.8.16" }, "flowchartId": "35436b4a-cd9c-5089-ab42-665c4f9ba049", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# ROC Curve Generator #\n# #\n# Computes and displays the Receiver Operating Characteristic #\n# (ROC) curve. This is restricted to binary classification tasks. #\n# #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.collections\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport settings\nimport sklearn.metrics\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n test_target = context.load(\"test_target\").flatten()\n # Slice the first column because Sklearn's ROC curve prefers probabilities for the positive class\n test_probabilities = context.load(\"test_probabilities\")[:, 1]\n\n # Exit if there's more than one label in the predictions\n if len(set(test_target)) > 2:\n exit()\n\n # ROC curve function in sklearn prefers the positive class\n false_positive_rate, true_positive_rate, thresholds = sklearn.metrics.roc_curve(test_target, test_probabilities,\n pos_label=1)\n thresholds[0] -= 1 # Sklearn arbitrarily adds 1 to the first threshold\n roc_auc = np.round(sklearn.metrics.auc(false_positive_rate, true_positive_rate), 3)\n\n # Plot the curve\n fig, ax = plt.subplots()\n points = np.array([false_positive_rate, true_positive_rate]).T.reshape(-1, 1, 2)\n segments = np.concatenate([points[:-1], points[1:]], axis=1)\n norm = plt.Normalize(thresholds.min(), thresholds.max())\n lc = matplotlib.collections.LineCollection(segments, cmap='jet', norm=norm, linewidths=2)\n lc.set_array(thresholds)\n line = ax.add_collection(lc)\n fig.colorbar(line, ax=ax).set_label('Threshold')\n\n # Padding to ensure we see the line\n ax.margins(0.01)\n\n plt.title(f\"ROC curve, AUC={roc_auc}\")\n plt.xlabel(\"False Positive Rate\")\n plt.ylabel(\"True Positive Rate\")\n plt.tight_layout()\n plt.savefig(\"my_roc_curve.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "contextProviders": [], "executableName": "python", "name": "post_processing_roc_curve_sklearn.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "ROC Curve Plot", "postProcessors": [{ "name": "remove_virtual_environment" }], "preProcessors": [], "results": [{ "name": "file_content" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": ["remove-all-results"], "type": "execution" }] }], "units": [{ "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", "flowchartId": "5b51df93-15dd-5440-90fd-a3ffa264b7d8", "isDefault": false, "monitors": [], "name": "Set Up the Job", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }, { "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", "flowchartId": "90738aae-daac-599f-913f-29fb6acdff00", "isDefault": false, "monitors": [], "name": "Machine Learning", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }], "workflows": [] }, "python/ml/regression_workflow.json": { "_id": "f447c6df-3b7b-5b8e-a0cc-1a743847ceed", "application": { "name": "python" }, "isDefault": false, "isUsingDataset": true, "name": "Python ML Train Regression", "properties": ["file_content", "workflow:pyml_predict"], "schemaVersion": "2022.8.16", "subworkflows": [{ "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "isDraft": false, "model": { "method": { "data": {}, "subtype": "unknown", "type": "unknown" }, "subtype": "unknown", "type": "unknown" }, "name": "Set Up the Job", "properties": [], "schemaVersion": "2022.8.16", "units": [{ "flowchartId": "head-set-predict-status", "head": true, "input": [], "isDefault": false, "monitors": [], "name": "Set Workflow Mode", "next": "head-fetch-training-data", "operand": "IS_WORKFLOW_RUNNING_TO_PREDICT", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": ["pyml:workflow-type-setter"], "type": "assignment", "value": "False" }, { "enableRender": true, "flowchartId": "head-fetch-training-data", "head": false, "input": [{ "basename": "{{DATASET_BASENAME}}", "objectData": { "CONTAINER": "", "NAME": "{{DATASET_FILEPATH}}", "PROVIDER": "", "REGION": "" }, "type": "object_storage" }], "isDefault": false, "monitors": [], "name": "Fetch Dataset", "next": "head-branch-on-predict-status", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "source": "object_storage", "status": "idle", "statusTrack": [], "subtype": "input", "tags": [], "type": "io" }, { "else": "end-of-ml-train-head", "flowchartId": "head-branch-on-predict-status", "head": false, "input": [{ "name": "IS_WORKFLOW_RUNNING_TO_PREDICT", "scope": "global" }], "isDefault": false, "maxOccurrences": 100, "monitors": [], "name": "Train or Predict?", "next": "head-fetch-trained-model", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "statement": "IS_WORKFLOW_RUNNING_TO_PREDICT", "status": "idle", "statusTrack": [], "tags": [], "then": "head-fetch-trained-model", "type": "condition" }, { "enableRender": true, "flowchartId": "head-fetch-trained-model", "head": false, "input": [{ "basename": "", "objectData": { "CONTAINER": "", "NAME": "", "PROVIDER": "", "REGION": "" }, "type": "object_storage" }], "isDefault": false, "monitors": [], "name": "Fetch Trained Model as file", "next": "end-of-ml-train-head", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "source": "object_storage", "status": "idle", "statusTrack": [], "subtype": "input", "tags": ["set-io-unit-filenames"], "type": "io" }, { "flowchartId": "end-of-ml-train-head", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "End Setup", "operand": "IS_SETUP_COMPLETE", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "True" }] }, { "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "isDraft": false, "model": { "method": { "data": {}, "subtype": "unknown", "type": "unknown" }, "subtype": "unknown", "type": "unknown" }, "name": "Machine Learning", "properties": ["file_content", "workflow:pyml_predict"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "enableRender": true, "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "settings.py", "templateName": "pyml_settings.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:setup_variables_packages", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "c3608488-0259-5ff4-8b90-11c6e60d6c85", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# General settings for PythonML jobs on the Exabyte.io Platform #\n# #\n# This file generally shouldn't be modified directly by users. #\n# The \"datafile\" and \"is_workflow_running_to_predict\" variables #\n# are defined in the head subworkflow, and are templated into #\n# this file. This helps facilitate the workflow's behavior #\n# differing whether it is in a \"train\" or \"predict\" mode. #\n# #\n# Also in this file is the \"Context\" object, which helps maintain #\n# certain Python objects between workflow units, and between #\n# predict runs. #\n# #\n# Whenever a python object needs to be stored for subsequent runs #\n# (such as in the case of a trained model), context.save() can be #\n# called to save it. The object can then be loaded again by using #\n# context.load(). #\n# ----------------------------------------------------------------- #\n\n\nimport os\nimport pickle\n\n# ==================================================\n# Variables modified in the Important Settings menu\n# ==================================================\n# Variables in this section can (and oftentimes need to) be modified by the user in the \"Important Settings\" tab\n# of a workflow.\n\n# Target_column_name is used during training to identify the variable the model is traing to predict.\n# For example, consider a CSV containing three columns, \"Y\", \"X1\", and \"X2\". If the goal is to train a model\n# that will predict the value of \"Y,\" then target_column_name would be set to \"Y\"\ntarget_column_name = \"{{ mlSettings.target_column_name }}\"\n\n# The type of ML problem being performed. Can be either \"regression\", \"classification,\" or \"clustering.\"\nproblem_category = \"{{ mlSettings.problem_category }}\"\n\n# =============================\n# Non user-modifiable variables\n# =============================\n# Variables in this section generally do not need to be modified.\n\n# The problem category, regression or classification or clustering. In regression, the target (predicted) variable\n# is continues. In classification, it is categorical. In clustering, there is no target - a set of labels is\n# automatically generated.\nis_regression = is_classification = is_clustering = False\nif problem_category.lower() == \"regression\":\n is_regression = True\nelif problem_category.lower() == \"classification\":\n is_classification = True\nelif problem_category.lower() == \"clustering\":\n is_clustering = True\nelse:\n raise ValueError(\n \"Variable 'problem_category' must be either 'regression', 'classification', or 'clustering'. Check settings.py\")\n\n# The variables \"is_workflow_running_to_predict\" and \"is_workflow_running_to_train\" are used to control whether\n# the workflow is in a \"training\" mode or a \"prediction\" mode. The \"IS_WORKFLOW_RUNNING_TO_PREDICT\" variable is set by\n# an assignment unit in the \"Set Up the Job\" subworkflow that executes at the start of the job. It is automatically\n# changed when the predict workflow is generated, so users should not need to modify this variable.\nis_workflow_running_to_predict = {% raw %}{{IS_WORKFLOW_RUNNING_TO_PREDICT}}{% endraw %}\nis_workflow_running_to_train = not is_workflow_running_to_predict\n\n# Sets the datafile variable. The \"datafile\" is the data that will be read in, and will be used by subsequent\n# workflow units for either training or prediction, depending on the workflow mode.\nif is_workflow_running_to_predict:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\nelse:\n datafile = \"{% raw %}{{DATASET_BASENAME}}{% endraw %}\"\n\n# The \"Context\" class allows for data to be saved and loaded between units, and between train and predict runs.\n# Variables which have been saved using the \"Save\" method are written to disk, and the predict workflow is automatically\n# configured to obtain these files when it starts.\n#\n# IMPORTANT NOTE: Do *not* adjust the value of \"context_dir_pathname\" in the Context object. If the value is changed, then\n# files will not be correctly copied into the generated predict workflow. This will cause the predict workflow to be\n# generated in a broken state, and it will not be able to make any predictions.\nclass Context(object):\n \"\"\"\n Saves and loads objects from the disk, useful for preserving data between workflow units\n\n Attributes:\n context_paths (dict): Dictionary of the format {variable_name: path}, that governs where\n pickle saves files.\n\n Methods:\n save: Used to save objects to the context directory\n load: Used to load objects from the context directory\n \"\"\"\n\n def __init__(self, context_file_basename=\"workflow_context_file_mapping\"):\n \"\"\"\n Constructor for Context objects\n\n Args:\n context_file_basename (str): Name of the file to store context paths in\n \"\"\"\n\n # Warning: DO NOT modify the context_dir_pathname variable below\n # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n context_dir_pathname = \"{% raw %}{{ CONTEXT_DIR_RELATIVE_PATH }}{% endraw %}\"\n # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n self._context_dir_pathname = context_dir_pathname\n self._context_file = os.path.join(context_dir_pathname, context_file_basename)\n\n # Make context dir if it does not exist\n if not os.path.exists(context_dir_pathname):\n os.makedirs(context_dir_pathname)\n\n # Read in the context sources dictionary, if it exists\n if os.path.exists(self._context_file):\n with open(self._context_file, \"rb\") as file_handle:\n self.context_paths: dict = pickle.load(file_handle)\n else:\n # Items is a dictionary of {varname: path}\n self.context_paths = {}\n\n def __enter__(self):\n return self\n\n def __exit__(self, exc_type, exc_value, traceback):\n self._update_context()\n\n def __contains__(self, item):\n return item in self.context_paths\n\n def _update_context(self):\n with open(self._context_file, \"wb\") as file_handle:\n pickle.dump(self.context_paths, file_handle)\n\n def load(self, name: str):\n \"\"\"\n Returns a contextd object\n\n Args:\n name (str): The name in self.context_paths of the object\n \"\"\"\n path = self.context_paths[name]\n with open(path, \"rb\") as file_handle:\n obj = pickle.load(file_handle)\n return obj\n\n def save(self, obj: object, name: str):\n \"\"\"\n Saves an object to disk using pickle\n\n Args:\n name (str): Friendly name for the object, used for lookup in load() method\n obj (object): Object to store on disk\n \"\"\"\n path = os.path.join(self._context_dir_pathname, f\"{name}.pkl\")\n self.context_paths[name] = path\n with open(path, \"wb\") as file_handle:\n pickle.dump(obj, file_handle)\n self._update_context()\n\n# Generate a context object, so that the \"with settings.context\" can be used by other units in this workflow.\ncontext = Context()\n\nis_using_train_test_split = \"is_using_train_test_split\" in context and (context.load(\"is_using_train_test_split\"))\n\n# Create a Class for a DummyScaler()\nclass DummyScaler:\n \"\"\"\n This class is a 'DummyScaler' which trivially acts on data by returning it unchanged.\n \"\"\"\n\n def fit(self, X):\n return self\n\n def transform(self, X):\n return X\n\n def fit_transform(self, X):\n return X\n\n def inverse_transform(self, X):\n return X\n\nif 'target_scaler' not in context:\n context.save(DummyScaler(), 'target_scaler')\n", "contextProviders": [{ "name": "MLSettingsDataManager" }], "executableName": "python", "name": "settings.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Setup Variables and Packages", "next": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "data_input_read_csv_pandas.py", "templateName": "data_input_read_csv_pandas.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:data_input:read_csv:pandas", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to read in data for the ML workflow. #\n# #\n# Also showcased here is the concept of branching based on #\n# whether the workflow is in \"train\" or \"predict\" mode. #\n# #\n# If the workflow is in \"training\" mode, it will read in the data #\n# before converting it to a Numpy array and save it for use #\n# later. During training, we already have values for the output, #\n# and this gets saved to \"target.\" #\n# #\n# Finally, whether the workflow is in training or predict mode, #\n# it will always read in a set of descriptors from a datafile #\n# defined in settings.py #\n# ----------------------------------------------------------------- #\n\n\nimport pandas\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n data = pandas.read_csv(settings.datafile)\n\n # Train\n # By default, we don't do train/test splitting: the train and test represent the same dataset at first.\n # Other units (such as a train/test splitter) down the line can adjust this as-needed.\n if settings.is_workflow_running_to_train:\n\n # Handle the case where we are clustering\n if settings.is_clustering:\n target = data.to_numpy()[:, 0] # Just get the first column, it's not going to get used anyway\n else:\n target = data.pop(settings.target_column_name).to_numpy()\n\n # Handle the case where we are classifying. In this case, we must convert any labels provided to be categorical.\n # Specifically, labels are encoded with values between 0 and (N_Classes - 1)\n if settings.is_classification:\n label_encoder = sklearn.preprocessing.LabelEncoder()\n target = label_encoder.fit_transform(target)\n context.save(label_encoder, \"label_encoder\")\n\n target = target.reshape(-1, 1) # Reshape array from a row vector into a column vector\n\n context.save(target, \"train_target\")\n context.save(target, \"test_target\")\n\n descriptors = data.to_numpy()\n\n context.save(descriptors, \"train_descriptors\")\n context.save(descriptors, \"test_descriptors\")\n\n else:\n descriptors = data.to_numpy()\n context.save(descriptors, \"descriptors\")\n", "contextProviders": [], "executableName": "python", "name": "data_input_read_csv_pandas.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Data Input", "next": "7fff5212-6c6d-586b-9997-4d4485e09383", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "data_input_train_test_split_sklearn.py", "templateName": "data_input_train_test_split_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:data_input:train_test_split:sklearn", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "7fff5212-6c6d-586b-9997-4d4485e09383", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Workflow Unit to perform a train/test split #\n# #\n# Splits the dataset into a training and testing set. The #\n# variable `percent_held_as_test` controls how much of the #\n# input dataset is removed for use as a testing set. By default, #\n# this unit puts 20% of the dataset into the testing set, and #\n# places the remaining 80% into the training set. #\n# #\n# Does nothing in the case of predictions. #\n# #\n# ----------------------------------------------------------------- #\n\nimport numpy as np\nimport settings\nimport sklearn.model_selection\n\n# `percent_held_as_test` is the amount of the dataset held out as the testing set. If it is set to 0.2,\n# then 20% of the dataset is held out as a testing set. The remaining 80% is the training set.\npercent_held_as_test = {{ mlTrainTestSplit.fraction_held_as_test_set }}\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Load training data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n\n # Combine datasets to facilitate train/test split\n\n # Do train/test split\n train_descriptors, test_descriptors, train_target, test_target = sklearn.model_selection.train_test_split(\n train_descriptors, train_target, test_size=percent_held_as_test)\n\n # Set the flag for using a train/test split\n context.save(True, \"is_using_train_test_split\")\n\n # Save training data\n context.save(train_target, \"train_target\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_target, \"test_target\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Predict\n else:\n pass\n", "contextProviders": [{ "name": "MLTrainTestSplitDataManager" }], "executableName": "python", "name": "data_input_train_test_split_sklearn.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Train Test Split", "next": "799de7dc-9394-571b-8e0d-3ff876a3df02", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "pre_processing_standardization_sklearn.py", "templateName": "pre_processing_standardization_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:pre_processing:standardization:sklearn", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "799de7dc-9394-571b-8e0d-3ff876a3df02", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Sklearn Standard Scaler workflow unit #\n# #\n# This workflow unit scales the data such that it a mean of 0 and #\n# a standard deviation of 1. It then saves the data for use #\n# further down the road in the workflow, for use in #\n# un-transforming the data. #\n# #\n# It is important that new predictions are made by scaling the #\n# new inputs using the mean and variance of the original training #\n# set. As a result, the scaler gets saved in the Training phase. #\n# #\n# During a predict workflow, the scaler is loaded, and the #\n# new examples are scaled using the stored scaler. #\n# ----------------------------------------------------------------- #\n\n\nimport settings\nimport sklearn.preprocessing\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_target = context.load(\"test_target\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Descriptor Scaler\n scaler = sklearn.preprocessing.StandardScaler\n descriptor_scaler = scaler()\n train_descriptors = descriptor_scaler.fit_transform(train_descriptors)\n test_descriptors = descriptor_scaler.transform(test_descriptors)\n context.save(descriptor_scaler, \"descriptor_scaler\")\n context.save(train_descriptors, \"train_descriptors\")\n context.save(test_descriptors, \"test_descriptors\")\n\n # Our target is only continuous if it's a regression problem\n if settings.is_regression:\n target_scaler = scaler()\n train_target = target_scaler.fit_transform(train_target)\n test_target = target_scaler.transform(test_target)\n context.save(target_scaler, \"target_scaler\")\n context.save(train_target, \"train_target\")\n context.save(test_target, \"test_target\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Get the scaler\n descriptor_scaler = context.load(\"descriptor_scaler\")\n\n # Scale the data\n descriptors = descriptor_scaler.transform(descriptors)\n\n # Store the data\n context.save(descriptors, \"descriptors\")\n", "contextProviders": [], "executableName": "python", "name": "pre_processing_standardization_sklearn.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Data Standardize", "next": "8dfc61c3-067d-5ea8-bd26-7296628d707a", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "model_mlp_sklearn.py", "templateName": "model_mlp_sklearn.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:model:multilayer_perceptron:sklearn", "postProcessors": [], "preProcessors": [], "results": [{ "name": "workflow:pyml_predict" }], "schemaVersion": "2022.8.16" }, "flowchartId": "8dfc61c3-067d-5ea8-bd26-7296628d707a", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ------------------------------------------------------------ #\n# Workflow unit to train a simple feedforward neural network #\n# model on a regression problem using scikit-learn. In this #\n# template, we use the default values for hidden_layer_sizes, #\n# activation, solver, and learning rate. Other parameters are #\n# available (consult the sklearn docs), but in this case, we #\n# only include those relevant to the Adam optimizer. Sklearn #\n# Docs: Sklearn docs:http://scikit-learn.org/stable/modules/ge #\n# nerated/sklearn.neural_network.MLPRegressor.html #\n# #\n# When then workflow is in Training mode, the model is trained #\n# and then it is saved, along with the RMSE and some #\n# predictions made using the training data (e.g. for use in a #\n# parity plot or calculation of other error metrics). When the #\n# workflow is run in Predict mode, the model is loaded, #\n# predictions are made, they are un-transformed using the #\n# trained scaler from the training run, and they are written #\n# to a file named \"predictions.csv\" #\n# ------------------------------------------------------------ #\n\n\nimport numpy as np\nimport settings\nimport sklearn.metrics\nimport sklearn.neural_network\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n test_target = context.load(\"test_target\")\n train_descriptors = context.load(\"train_descriptors\")\n test_descriptors = context.load(\"test_descriptors\")\n\n # Flatten the targets\n train_target = train_target.flatten()\n test_target = test_target.flatten()\n\n # Initialize the Model\n model = sklearn.neural_network.MLPRegressor(\n hidden_layer_sizes=(100,),\n activation=\"relu\",\n solver=\"adam\",\n max_iter=300,\n early_stopping=False,\n validation_fraction=0.1,\n )\n\n # Train the model and save\n model.fit(train_descriptors, train_target)\n context.save(model, \"multilayer_perceptron\")\n train_predictions = model.predict(train_descriptors)\n test_predictions = model.predict(test_descriptors)\n\n # Scale predictions so they have the same shape as the saved target\n train_predictions = train_predictions.reshape(-1, 1)\n test_predictions = test_predictions.reshape(-1, 1)\n\n # Scale for RMSE calc on the test set\n target_scaler = context.load(\"target_scaler\")\n\n # Unflatten the target\n test_target = test_target.reshape(-1, 1)\n y_true = target_scaler.inverse_transform(test_target)\n y_pred = target_scaler.inverse_transform(test_predictions)\n\n # RMSE\n mse = sklearn.metrics.mean_squared_error(y_true, y_pred)\n rmse = np.sqrt(mse)\n print(f\"RMSE = {rmse}\")\n context.save(rmse, \"RMSE\")\n\n context.save(train_predictions, \"train_predictions\")\n context.save(test_predictions, \"test_predictions\")\n\n # Predict\n else:\n # Restore data\n descriptors = context.load(\"descriptors\")\n\n # Restore model\n model = context.load(\"multilayer_perceptron\")\n\n # Make some predictions\n predictions = model.predict(descriptors)\n\n # Save the predictions to file\n np.savetxt(\"predictions.csv\", predictions, header=\"prediction\", comments=\"\", fmt=\"%s\")\n", "contextProviders": [], "executableName": "python", "name": "model_mlp_sklearn.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Model Train and Predict", "next": "1ca76a49-a3c7-5fa2-b693-538b599ecd7c", "postProcessors": [], "preProcessors": [], "results": [{ "name": "workflow:pyml_predict" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": ["remove-all-results", "creates-predictions-csv-during-predict-phase"], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "post_processing_parity_plot_matplotlib.py", "templateName": "post_processing_parity_plot_matplotlib.py" }, { "name": "requirements.txt", "templateName": "pyml_requirements.txt" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "pyml:post_processing:parity_plot:matplotlib", "postProcessors": [], "preProcessors": [], "results": [{ "name": "file_content" }], "schemaVersion": "2022.8.16" }, "flowchartId": "1ca76a49-a3c7-5fa2-b693-538b599ecd7c", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Parity plot generation unit #\n# #\n# This unit generates a parity plot based on the known values #\n# in the training data, and the predicted values generated #\n# using the training data. #\n# #\n# Because this metric compares predictions versus a ground truth, #\n# it doesn't make sense to generate the plot when a predict #\n# workflow is being run (because in that case, we generally don't #\n# know the ground truth for the values being predicted). Hence, #\n# this unit does nothing if the workflow is in \"predict\" mode. #\n# ----------------------------------------------------------------- #\n\n\nimport matplotlib.pyplot as plt\nimport settings\n\nwith settings.context as context:\n # Train\n if settings.is_workflow_running_to_train:\n # Restore the data\n train_target = context.load(\"train_target\")\n train_predictions = context.load(\"train_predictions\")\n test_target = context.load(\"test_target\")\n test_predictions = context.load(\"test_predictions\")\n\n # Un-transform the data\n target_scaler = context.load(\"target_scaler\")\n train_target = target_scaler.inverse_transform(train_target)\n train_predictions = target_scaler.inverse_transform(train_predictions)\n test_target = target_scaler.inverse_transform(test_target)\n test_predictions = target_scaler.inverse_transform(test_predictions)\n\n # Plot the data\n plt.scatter(train_target, train_predictions, c=\"#203d78\", label=\"Training Set\")\n if settings.is_using_train_test_split:\n plt.scatter(test_target, test_predictions, c=\"#67ac5b\", label=\"Testing Set\")\n plt.xlabel(\"Actual Value\")\n plt.ylabel(\"Predicted Value\")\n\n # Scale the plot\n target_range = (min(min(train_target), min(test_target)),\n max(max(train_target), max(test_target)))\n predictions_range = (min(min(train_predictions), min(test_predictions)),\n max(max(train_predictions), max(test_predictions)))\n\n limits = (min(min(target_range), min(target_range)),\n max(max(predictions_range), max(predictions_range)))\n plt.xlim = (limits[0], limits[1])\n plt.ylim = (limits[0], limits[1])\n\n # Draw a parity line, as a guide to the eye\n plt.plot((limits[0], limits[1]), (limits[0], limits[1]), c=\"black\", linestyle=\"dotted\", label=\"Parity\")\n plt.legend()\n\n # Save the figure\n plt.tight_layout()\n plt.savefig(\"my_parity_plot.png\", dpi=600)\n\n # Predict\n else:\n # It might not make as much sense to draw a plot when predicting...\n pass\n", "contextProviders": [], "executableName": "python", "name": "post_processing_parity_plot_matplotlib.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# ----------------------------------------------------------------- #\n\nmatplotlib\nnumpy\nscikit-learn\nxgboost\npandas\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "Parity Plot", "postProcessors": [{ "name": "remove_virtual_environment" }], "preProcessors": [], "results": [{ "name": "file_content" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": ["remove-all-results"], "type": "execution" }] }], "units": [{ "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", "flowchartId": "5b51df93-15dd-5440-90fd-a3ffa264b7d8", "isDefault": false, "monitors": [], "name": "Set Up the Job", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }, { "_id": "30acc5cd-54e6-5f05-aafd-413ee8a69aa1", "flowchartId": "90738aae-daac-599f-913f-29fb6acdff00", "isDefault": false, "monitors": [], "name": "Machine Learning", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }], "workflows": [] }, "python/python_script.json": { "_id": "de816646-766b-5f97-b468-0937d4381440", "application": { "name": "python" }, "isDefault": false, "name": "Python Script", "properties": [], "schemaVersion": "2022.8.16", "subworkflows": [{ "_id": "64a079ba-7a12-57b7-ac06-310b2bf8d354", "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "isDraft": false, "model": { "method": { "data": {}, "subtype": "unknown", "type": "unknown" }, "subtype": "unknown", "type": "unknown" }, "name": "Python Script", "properties": [], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "name": "python", "schemaVersion": "2022.8.16", "shortName": "py", "summary": "Python Script", "version": "3.10.13" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "python", "executableName": "python", "input": [{ "name": "script.py", "templateName": "hello_world.py" }, { "name": "requirements.txt" }], "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "hello_world", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "9b8a495e-1ac1-56a7-b2e0-af1b405a1219", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ---------------------------------------------------------------- #\n# #\n# Example python script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. runtime directory for this calculation is created #\n# 2. requirements.txt is used to create a virtual environment #\n# 3. virtual environment is activated #\n# 4. python process running this script is started #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\nimport numpy as np\n\npi_value = np.pi\nprint(pi_value)\n", "contextProviders": [], "executableName": "python", "name": "script.py", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "python", "content": "# ----------------------------------------------------------------- #\n# #\n# Example Python package requirements for the Mat3ra platform #\n# #\n# Will be used as follows: #\n# #\n# 1. A runtime directory for this calculation is created #\n# 2. This list is used to populate a Python virtual environment #\n# 3. The virtual environment is activated #\n# 4. The Python process running the script included within this #\n# job is started #\n# #\n# For more information visit: #\n# - https://pip.pypa.io/en/stable/reference/pip_install #\n# - https://virtualenv.pypa.io/en/stable/ #\n# #\n# Adjust the list to include your preferred packages. #\n# #\n# ----------------------------------------------------------------- #\n\nnumpy<2\n", "contextProviders": [], "executableName": "python", "name": "requirements.txt", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "python", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }], "units": [{ "_id": "64a079ba-7a12-57b7-ac06-310b2bf8d354", "flowchartId": "c50e28b2-a0c5-5324-8b6f-e99b5a546bd8", "isDefault": false, "monitors": [], "name": "Python Script", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }], "workflows": [] }, "shell/batch_espresso_pwscf.json": { "_id": "e0046fb4-37db-5732-bf81-c48e13081a4c", "application": { "name": "shell" }, "isDefault": false, "name": "Shell Batch Job (Espresso PWSCF)", "properties": [], "schemaVersion": "2022.8.16", "subworkflows": [{ "_id": "f0775c7b-214a-5245-b921-5b4eb53d15a9", "application": { "build": "GNU", "isDefault": true, "name": "shell", "schemaVersion": "2022.8.16", "shortName": "sh", "summary": "Shell Script", "version": "5.1.8" }, "isDraft": false, "model": { "method": { "data": {}, "subtype": "unknown", "type": "unknown" }, "subtype": "unknown", "type": "unknown" }, "name": "Shell Batch Job (Espresso PWSCF)", "properties": [], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "name": "shell", "schemaVersion": "2022.8.16", "shortName": "sh", "summary": "Shell Script", "version": "5.1.8" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "sh", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "shell", "executableName": "sh", "input": [{ "name": "job_espresso_pw_scf.sh" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "job_espresso_pw_scf", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "99304304-e873-5c89-ae83-91e61a7f629c", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "shell", "content": "#!/bin/bash\n\n# ---------------------------------------------------------------- #\n# #\n# Example job submission script for Exabyte.io platform #\n# #\n# Shows resource manager directives for: #\n# #\n# 1. the name of the job (-N) #\n# 2. the number of nodes to be used (-l nodes=) #\n# 3. the number of processors per node (-l ppn=) #\n# 4. the walltime in dd:hh:mm:ss format (-l walltime=) #\n# 5. queue (-q) D, OR, OF, SR, SF #\n# 6. merging standard output and error (-j oe) #\n# 7. email about job abort, begin, end (-m abe) #\n# 8. email address to use (-M) #\n# #\n# For more information visit https://docs.mat3ra.com/cli/jobs #\n# ---------------------------------------------------------------- #\n\n#PBS -N ESPRESSO-TEST\n#PBS -j oe\n#PBS -l nodes=1\n#PBS -l ppn=1\n#PBS -l walltime=00:00:10:00\n#PBS -q D\n#PBS -m abe\n#PBS -M info@mat3ra.com\n\n# load module\nmodule add espresso\n\n# go to the job working directory\ncd $PBS_O_WORKDIR\n\n# create input file\ncat > pw.in < pw.out\n", "contextProviders": [], "executableName": "sh", "name": "job_espresso_pw_scf.sh", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "shell", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }], "units": [{ "_id": "f0775c7b-214a-5245-b921-5b4eb53d15a9", "flowchartId": "d884e8f7-7acf-5a03-bc9a-186903bdaa0e", "isDefault": false, "monitors": [], "name": "Shell Batch Job (Espresso PWSCF)", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }], "workflows": [] }, "shell/hello_world.json": { "_id": "d2fd444c-06b4-5d66-baeb-449c680ae1bf", "application": { "name": "shell" }, "isDefault": false, "name": "Shell Script", "properties": [], "schemaVersion": "2022.8.16", "subworkflows": [{ "_id": "ce33d4cf-e0d2-5020-854d-9ea1fe5c8512", "application": { "build": "GNU", "isDefault": true, "name": "shell", "schemaVersion": "2022.8.16", "shortName": "sh", "summary": "Shell Script", "version": "5.1.8" }, "isDraft": false, "model": { "method": { "data": {}, "subtype": "unknown", "type": "unknown" }, "subtype": "unknown", "type": "unknown" }, "name": "Shell Hello World", "properties": [], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "name": "shell", "schemaVersion": "2022.8.16", "shortName": "sh", "summary": "Shell Script", "version": "5.1.8" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "sh", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "shell", "executableName": "sh", "input": [{ "name": "hello_world.sh" }], "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "hello_world", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "99304304-e873-5c89-ae83-91e61a7f629c", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "shell", "content": "#!/bin/bash\n# ---------------------------------------------------------------- #\n# #\n# Example shell script for Exabyte.io platform. #\n# #\n# Will be used as follows: #\n# #\n# 1. shebang line is read from the first line above #\n# 2. based on shebang one of the shell types is selected: #\n# - /bin/bash #\n# - /bin/csh #\n# - /bin/tclsh #\n# - /bin/tcsh #\n# - /bin/zsh #\n# 3. runtime directory for this calculation is created #\n# 4. the content of the script is executed #\n# #\n# Adjust the content below to include your code. #\n# #\n# ---------------------------------------------------------------- #\n\necho \"Hello world!\"\n", "contextProviders": [], "executableName": "sh", "name": "hello_world.sh", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "shell", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }], "units": [{ "_id": "ce33d4cf-e0d2-5020-854d-9ea1fe5c8512", "flowchartId": "319307c2-bf22-5bf2-b4e9-a4cdf671b786", "isDefault": false, "monitors": [], "name": "Shell Hello World", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }], "workflows": [] }, "vasp/band_gap.json": { "_id": "1a358471-0a73-5fcb-ad3c-7a8079029c86", "application": { "name": "vasp" }, "isDefault": false, "name": "Band Gap", "properties": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "subworkflows": [{ "_id": "e65f2461-5f5c-5a51-8c48-88ad37bff100", "application": { "build": "GNU", "isDefault": true, "isLicensed": true, "name": "vasp", "schemaVersion": "2022.8.16", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "version": "5.4.4" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "paw", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Band Gap", "properties": ["atomic_forces", "band_gaps", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "isLicensed": true, "name": "vasp", "schemaVersion": "2022.8.16", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "version": "5.4.4" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "vasp", "postProcessors": [{ "name": "error_handler" }, { "name": "prepare_restart" }, { "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR" }, { "name": "KPOINTS" }, { "name": "POSCAR" }], "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "schemaVersion": "2022.8.16" }, "flowchartId": "9cb87769-bf20-56bf-a8b3-5a164e3bf541", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "INCAR", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "KPOINTS", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "{{ input.POSCAR }}\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "POSCAR", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp", "next": "f0d65517-9592-5bc8-948e-a0851a766cbb", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "isLicensed": true, "name": "vasp", "schemaVersion": "2022.8.16", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "version": "5.4.4" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "vasp", "postProcessors": [{ "name": "error_handler" }, { "name": "prepare_restart" }, { "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_BANDS" }, { "name": "KPOINTS", "templateName": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR" }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp_nscf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_gaps" }, { "name": "fermi_energy" }], "schemaVersion": "2022.8.16" }, "flowchartId": "f0d65517-9592-5bc8-948e-a0851a766cbb", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "INCAR", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "KPOINTS", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "{{ input.POSCAR }}\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "POSCAR", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp_nscf", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_gaps" }, { "name": "fermi_energy" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }], "units": [{ "_id": "e65f2461-5f5c-5a51-8c48-88ad37bff100", "flowchartId": "db3b83ea-0ef5-594c-89a8-bde38dbc6105", "isDefault": false, "monitors": [], "name": "Band Gap", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }], "workflows": [] }, "vasp/band_structure.json": { "_id": "25b0ad08-87bb-5400-bea4-acd5fe2163c0", "application": { "name": "vasp" }, "isDefault": false, "name": "Band Structure", "properties": ["atomic_forces", "band_structure", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "subworkflows": [{ "_id": "cd6e3d59-5544-56ac-878b-fd8716a09768", "application": { "build": "GNU", "isDefault": true, "isLicensed": true, "name": "vasp", "schemaVersion": "2022.8.16", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "version": "5.4.4" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "paw", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Band Structure", "properties": ["atomic_forces", "band_structure", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "isLicensed": true, "name": "vasp", "schemaVersion": "2022.8.16", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "version": "5.4.4" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "vasp", "postProcessors": [{ "name": "error_handler" }, { "name": "prepare_restart" }, { "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR" }, { "name": "KPOINTS" }, { "name": "POSCAR" }], "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "schemaVersion": "2022.8.16" }, "flowchartId": "9cb87769-bf20-56bf-a8b3-5a164e3bf541", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "INCAR", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "KPOINTS", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "{{ input.POSCAR }}\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "POSCAR", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp", "next": "1e1de3be-f6e4-513e-afe2-c84e567a8108", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "isLicensed": true, "name": "vasp", "schemaVersion": "2022.8.16", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "version": "5.4.4" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "vasp", "postProcessors": [{ "name": "error_handler" }, { "name": "prepare_restart" }, { "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_BANDS" }, { "name": "KPOINTS", "templateName": "KPOINTS_BANDS" }, { "name": "POSCAR", "templateName": "" }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp_bands", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_structure" }], "schemaVersion": "2022.8.16" }, "flowchartId": "1e1de3be-f6e4-513e-afe2-c84e567a8108", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "INCAR", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "KPOINTS", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "{{ input.POSCAR }}\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "POSCAR", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp_bands", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_structure" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }], "units": [{ "_id": "cd6e3d59-5544-56ac-878b-fd8716a09768", "flowchartId": "c573187f-a8bb-5084-9fcf-1560bf4a7786", "isDefault": false, "monitors": [], "name": "Band Structure", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }], "workflows": [] }, "vasp/band_structure_dos.json": { "_id": "c8338d40-3c6e-5581-b03c-d7fb5cbb8df5", "application": { "name": "vasp" }, "isDefault": false, "name": "Band Structure + Density of States", "properties": ["atomic_forces", "band_structure", "density_of_states", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "subworkflows": [{ "_id": "d38fea11-9781-5151-8dae-d705381498be", "application": { "build": "GNU", "isDefault": true, "isLicensed": true, "name": "vasp", "schemaVersion": "2022.8.16", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "version": "5.4.4" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "paw", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Band Structure + Density of States", "properties": ["atomic_forces", "band_structure", "density_of_states", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "isLicensed": true, "name": "vasp", "schemaVersion": "2022.8.16", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "version": "5.4.4" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "vasp", "postProcessors": [{ "name": "error_handler" }, { "name": "prepare_restart" }, { "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR" }, { "name": "KPOINTS" }, { "name": "POSCAR" }], "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "schemaVersion": "2022.8.16" }, "flowchartId": "9cb87769-bf20-56bf-a8b3-5a164e3bf541", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "INCAR", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "KPOINTS", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "{{ input.POSCAR }}\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "POSCAR", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp", "next": "1e1de3be-f6e4-513e-afe2-c84e567a8108", "postProcessors": [], "preProcessors": [], "results": [{ "name": "density_of_states" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "isLicensed": true, "name": "vasp", "schemaVersion": "2022.8.16", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "version": "5.4.4" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "vasp", "postProcessors": [{ "name": "error_handler" }, { "name": "prepare_restart" }, { "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_BANDS" }, { "name": "KPOINTS", "templateName": "KPOINTS_BANDS" }, { "name": "POSCAR", "templateName": "" }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp_bands", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_structure" }], "schemaVersion": "2022.8.16" }, "flowchartId": "1e1de3be-f6e4-513e-afe2-c84e567a8108", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "ISMEAR = 0\nSIGMA = 0.05\nISTART = 1\nICHARG = 11\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "INCAR", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "kpoints path\n{{kpath.length}}\nreciprocal\n{% for point in kpath -%}\n{% for d in point.coordinates %}{{d}} {% endfor -%}{{point.steps}}\n{% endfor %}\n", "contextProviders": [{ "name": "KPathFormDataManager" }, { "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "KPOINTS", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "{{ input.POSCAR }}\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "POSCAR", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp_bands", "postProcessors": [], "preProcessors": [], "results": [{ "name": "band_structure" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }], "units": [{ "_id": "d38fea11-9781-5151-8dae-d705381498be", "flowchartId": "8a098bb9-73b1-5e84-bfc7-b783e02d0f53", "isDefault": false, "monitors": [], "name": "Band Structure + Density of States", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }], "workflows": [] }, "vasp/dos.json": { "_id": "629a79fb-a03f-5e34-b2ce-9c735e8ef6c0", "application": { "name": "vasp" }, "isDefault": false, "name": "Density of States", "properties": ["atomic_forces", "density_of_states", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "subworkflows": [{ "_id": "4897ca33-b023-5a8d-9a5d-9e74df0f00ad", "application": { "build": "GNU", "isDefault": true, "isLicensed": true, "name": "vasp", "schemaVersion": "2022.8.16", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "version": "5.4.4" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "paw", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Density of States", "properties": ["atomic_forces", "density_of_states", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "isLicensed": true, "name": "vasp", "schemaVersion": "2022.8.16", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "version": "5.4.4" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "vasp", "postProcessors": [{ "name": "error_handler" }, { "name": "prepare_restart" }, { "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR" }, { "name": "KPOINTS" }, { "name": "POSCAR" }], "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "schemaVersion": "2022.8.16" }, "flowchartId": "9cb87769-bf20-56bf-a8b3-5a164e3bf541", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "INCAR", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "KPOINTS", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "{{ input.POSCAR }}\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "POSCAR", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp", "postProcessors": [], "preProcessors": [], "results": [{ "name": "density_of_states" }, { "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }], "units": [{ "_id": "4897ca33-b023-5a8d-9a5d-9e74df0f00ad", "flowchartId": "3e64fdb4-ab5b-52a0-a1d5-51343c49481c", "isDefault": false, "monitors": [], "name": "Density of States", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }], "workflows": [] }, "vasp/fixed_cell_relaxation.json": { "_id": "cb69418c-2f6c-551d-af81-0cf20ec1113d", "application": { "name": "vasp" }, "isDefault": false, "name": "Fixed-cell Relaxation", "properties": ["atomic_forces", "fermi_energy", "final_structure", "pressure", "stress_tensor", "total_energy", "total_force"], "schemaVersion": "2022.8.16", "subworkflows": [{ "_id": "db6cc94b-2f26-5688-ba97-80b11567b549", "application": { "build": "GNU", "isDefault": true, "isLicensed": true, "name": "vasp", "schemaVersion": "2022.8.16", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "version": "5.4.4" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "paw", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Fixed-cell Relaxation", "properties": ["atomic_forces", "fermi_energy", "final_structure", "pressure", "stress_tensor", "total_energy", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "isLicensed": true, "name": "vasp", "schemaVersion": "2022.8.16", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "version": "5.4.4" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "vasp", "postProcessors": [{ "name": "error_handler" }, { "name": "prepare_restart" }, { "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_RELAX" }, { "name": "KPOINTS", "templateName": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR" }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }, { "name": "convergence_ionic" }], "name": "vasp_relax", "postProcessors": [{ "name": "prepare_restart" }], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_force" }, { "name": "final_structure" }], "schemaVersion": "2022.8.16" }, "flowchartId": "2f718a3d-5800-57e2-b707-075c1f1755c6", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "ISMEAR = 0\nSIGMA = 0.05\nISIF = 2\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "INCAR", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "KPOINTS", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "{{ input.POSCAR }}\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "POSCAR", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }, { "name": "convergence_ionic" }], "name": "vasp_relax", "postProcessors": [{ "name": "prepare_restart" }], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "atomic_forces" }, { "name": "fermi_energy" }, { "name": "pressure" }, { "name": "stress_tensor" }, { "name": "total_force" }, { "name": "final_structure" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }], "units": [{ "_id": "db6cc94b-2f26-5688-ba97-80b11567b549", "flowchartId": "0de8c4c8-b722-5cd2-ae68-b484262e0a01", "isDefault": false, "monitors": [], "name": "Fixed-cell Relaxation", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }], "workflows": [] }, "vasp/kpoint_convergence.json": { "_id": "fcf105f9-5ae7-5c32-a6b3-e3579cbdf39a", "application": { "name": "vasp" }, "isDefault": false, "name": "K-point Convergence", "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "subworkflows": [{ "_id": "5d736d84-d616-538f-a09b-81a32ac0777c", "application": { "build": "GNU", "isDefault": true, "isLicensed": true, "name": "vasp", "schemaVersion": "2022.8.16", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "version": "5.4.4" }, "isDraft": false, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "paw", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "K-point Convergence", "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "flowchartId": "init-tolerance", "head": true, "input": [], "isDefault": false, "monitors": [], "name": "Init tolerance", "next": "init-increment", "operand": "TOL", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": 0.00001 }, { "flowchartId": "init-increment", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "Init increment", "next": "init-result", "operand": "INC", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": 1 }, { "flowchartId": "init-result", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "Init result", "next": "init-parameter", "operand": "PREV_RESULT", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": 0 }, { "flowchartId": "init-parameter", "head": false, "input": [], "isDefault": false, "monitors": [], "name": "Init parameter", "next": "vasp-kpoint-convergence", "operand": "PARAMETER", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": 1 }, { "application": { "build": "GNU", "isDefault": true, "isLicensed": true, "name": "vasp", "schemaVersion": "2022.8.16", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "version": "5.4.4" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "vasp", "postProcessors": [{ "name": "error_handler" }, { "name": "prepare_restart" }, { "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR" }, { "name": "KPOINTS", "templateName": "KPOINTS_CONV" }, { "name": "POSCAR", "templateName": "POSCAR" }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp_kpt_conv", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "schemaVersion": "2022.8.16" }, "flowchartId": "vasp-kpoint-convergence", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "INCAR", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "Automatic Mesh\n0\nGamma\n{% raw %}{{PARAMETER | default('1')}} {{PARAMETER | default('1')}} {{PARAMETER | default('1')}}{% endraw %}\n0 0 0\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "KPOINTS", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "{{ input.POSCAR }}\n", "contextProviders": [{ "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "POSCAR", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp_kpt_conv", "next": "store-result", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "flowchartId": "store-result", "head": false, "input": [{ "name": "total_energy", "scope": "vasp-kpoint-convergence" }], "isDefault": false, "monitors": [], "name": "store result", "next": "check-convergence", "operand": "RESULT", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "total_energy" }, { "else": "update-result", "flowchartId": "check-convergence", "head": false, "input": [], "isDefault": false, "maxOccurrences": 50, "monitors": [], "name": "check convergence", "next": "update-result", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "statement": "abs((PREV_RESULT-RESULT)/RESULT) < TOL", "status": "idle", "statusTrack": [], "tags": [], "then": "convergence-is-reached", "type": "condition" }, { "flowchartId": "update-result", "head": false, "input": [{ "name": "RESULT", "scope": "global" }], "isDefault": false, "monitors": [], "name": "update result", "next": "increment-parameter", "operand": "PREV_RESULT", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "RESULT" }, { "flowchartId": "increment-parameter", "head": false, "input": [{ "name": "INC", "scope": "global" }, { "name": "PARAMETER", "scope": "global" }], "isDefault": false, "monitors": [], "name": "increment parameter", "next": "vasp-kpoint-convergence", "operand": "PREV_RESULT", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "PARAMETER+INC" }, { "flowchartId": "convergence-is-reached", "head": false, "input": [{ "name": "PARAMETER", "scope": "global" }], "isDefault": false, "monitors": [], "name": "exit", "operand": "PARAMETER", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "assignment", "value": "PARAMETER" }] }], "units": [{ "_id": "5d736d84-d616-538f-a09b-81a32ac0777c", "flowchartId": "a34eec2c-cdb2-537d-88c0-ed1d7b205879", "isDefault": false, "monitors": [], "name": "K-point Convergence", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "subworkflow" }], "workflows": [] }, "vasp/neb.json": { "_id": "2973908e-21ae-5424-afc9-ccb3fde477d8", "application": { "name": "vasp" }, "isDefault": false, "name": "Nudged Elastic Band (NEB)", "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force", "reaction_energy_barrier", "reaction_energy_profile"], "schemaVersion": "2022.8.16", "subworkflows": [{ "_id": "792e8c42-86ce-5f01-812a-66378ec4f379", "application": { "build": "GNU", "isDefault": true, "isLicensed": true, "name": "vasp", "schemaVersion": "2022.8.16", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "version": "5.4.4" }, "compute": { "arguments": { "nband": 1, "ndiag": 1, "nimage": 1, "npools": 1, "ntg": 1 }, "cluster": { "fqdn": "" }, "isRestartable": true, "nodes": 1, "notify": "n", "ppn": 1, "queue": "D", "timeLimit": "01:00:00", "timeLimitType": "per single attempt" }, "isDraft": false, "isMultiMaterial": true, "model": { "functional": "pbe", "method": { "data": {}, "subtype": "paw", "type": "pseudopotential" }, "subtype": "gga", "type": "dft" }, "name": "Initial/Final Total Energies", "properties": ["atomic_forces", "fermi_energy", "pressure", "stress_tensor", "total_energy", "total_energy_contributions", "total_force"], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "isLicensed": true, "name": "vasp", "schemaVersion": "2022.8.16", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "version": "5.4.4" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "vasp", "postProcessors": [{ "name": "error_handler" }, { "name": "prepare_restart" }, { "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_NEB_INITIAL_FINAL" }, { "name": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR_NEB_INITIAL" }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp_neb_initial", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "schemaVersion": "2022.8.16" }, "flowchartId": "f969f010-9dae-5085-9ac5-86150ef78897", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "ISTART = 0\nENCUT = 500\nISPIN = 2\n", "contextProviders": [{ "name": "NEBFormDataManager" }, { "name": "VASPNEBInputDataManager" }], "executableName": "vasp", "name": "INCAR", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "KPOINTS", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "{{ input.FIRST_IMAGE }}\n", "contextProviders": [{ "name": "NEBFormDataManager" }, { "name": "VASPNEBInputDataManager" }], "executableName": "vasp", "name": "POSCAR", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp_neb_initial", "next": "e65a17ce-10c8-5710-ad4d-fb3d42434091", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }, { "application": { "build": "GNU", "isDefault": true, "isLicensed": true, "name": "vasp", "schemaVersion": "2022.8.16", "shortName": "vasp", "summary": "Vienna Ab-initio Simulation Package", "version": "5.4.4" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }, { "name": "convergence_ionic" }, { "name": "convergence_electronic" }], "name": "vasp", "postProcessors": [{ "name": "error_handler" }, { "name": "prepare_restart" }, { "name": "remove_non_zero_weight_kpoints" }], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "vasp", "executableName": "vasp", "input": [{ "name": "INCAR", "templateName": "INCAR_NEB_INITIAL_FINAL" }, { "name": "KPOINTS" }, { "name": "POSCAR", "templateName": "POSCAR_NEB_FINAL" }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp_neb_final", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "schemaVersion": "2022.8.16" }, "flowchartId": "e65a17ce-10c8-5710-ad4d-fb3d42434091", "head": false, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "ISTART = 0\nENCUT = 500\nISPIN = 2\n", "contextProviders": [{ "name": "NEBFormDataManager" }, { "name": "VASPNEBInputDataManager" }], "executableName": "vasp", "name": "INCAR", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "Automatic mesh\n0\nGamma\n {% for d in kgrid.dimensions %}{{d}} {% endfor %}\n {% for s in kgrid.shifts %}{{s}} {% endfor %}\n", "contextProviders": [{ "name": "KGridFormDataManager" }, { "name": "VASPInputDataManager" }], "executableName": "vasp", "name": "KPOINTS", "schemaVersion": "2022.8.16" } }, { "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "vasp", "content": "{{ input.LAST_IMAGE }}\n", "contextProviders": [{ "name": "NEBFormDataManager" }, { "name": "VASPNEBInputDataManager" }], "executableName": "vasp", "name": "POSCAR", "schemaVersion": "2022.8.16" } }], "isDefault": false, "monitors": [{ "name": "standard_output" }, { "name": "convergence_electronic" }], "name": "vasp_neb_final", "postProcessors": [], "preProcessors": [], "results": [{ "name": "total_energy" }, { "name": "total_energy_contributions" }, { "name": "pressure" }, { "name": "fermi_energy" }, { "name": "atomic_forces" }, { "name": "total_force" }, { "name": "stress_tensor" }], "schemaVersion": "2022.8.16", "status": "idle", "statusTrack": [], "tags": [], "type": "execution" }] }, { "_id": "c9b7ad2a-5207-5e41-9b66-28474a8921f8", "application": { "build": "GNU", "isDefault": true, "name": "shell", "schemaVersion": "2022.8.16", "shortName": "sh", "summary": "Shell Script", "version": "5.1.8" }, "isDraft": false, "isMultiMaterial": true, "model": { "method": { "data": {}, "subtype": "unknown", "type": "unknown" }, "subtype": "unknown", "type": "unknown" }, "name": "Prepare Directories", "properties": [], "schemaVersion": "2022.8.16", "units": [{ "application": { "build": "GNU", "isDefault": true, "name": "shell", "schemaVersion": "2022.8.16", "shortName": "sh", "summary": "Shell Script", "version": "5.1.8" }, "context": [], "executable": { "isDefault": true, "monitors": [{ "name": "standard_output" }], "name": "sh", "postProcessors": [], "preProcessors": [], "schemaVersion": "2022.8.16" }, "flavor": { "applicationName": "shell", "executableName": "sh", "input": [{ "name": "bash_vasp_prepare_neb_images.sh" }], "isDefault": false, "monitors": [{ "name": "standard_output" }], "name": "bash_vasp_prepare_neb_images", "postProcessors": [], "preProcessors": [], "results": [], "schemaVersion": "2022.8.16" }, "flowchartId": "dc397ead-54ad-513b-992e-aedd54576409", "head": true, "input": [{ "isManuallyChanged": false, "rendered": "", "template": { "applicationName": "shell", "content": "#!/bin/bash\n\n# ------------------------------------------------------------------ #\n# This script prepares necessary directories to run VASP NEB\n# calculation. It puts initial POSCAR into directory 00, final into 0N\n# and intermediate images in 01 to 0(N-1). It is assumed that SCF\n# calculations for initial and final structures are already done in\n# previous subworkflows and their standard outputs are written into\n# \"vasp_neb_initial.out\" and \"vasp_neb_final.out\" files respectively.\n# These outputs are here copied into initial (00) and final (0N)\n# directories to calculate the reaction energy profile.\n# ------------------------------------------------------------------ #\n\n{% raw %}\ncd {{ JOB_WORK_DIR }}\n{% endraw %}\n\n# Prepare First Directory\nmkdir -p 00\ncat > 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < 0 else 1"},"type":"assignment"},{"config":{"name":"Select Band","operand":"KBAND_VALUE","value":"KBAND_VALUE_BELOW_EF"},"type":"assignment"},{"attributes":{"results":[{"name":"wavefunction_amplitude"}]},"config":{"execName":"pp.x","flavorName":"pp_wfn","flowchartId":"pp-wfn","input":[{"name":"KBAND_VALUE"}],"name":"pp_wfn"},"type":"executionBuilder"}]},"zero_point_energy":{"__path__":"zero_point_energy","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Zero Point Energy","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"type":"executionBuilder"},{"config":{"execName":"ph.x","flavorName":"ph_gamma","name":"ph_zpe"},"type":"executionBuilder"}]}},"nwchem":{"total_energy":{"__path__":"total_energy","application":{"name":"nwchem","version":"7.0.2"},"method":{"name":"LocalOrbitalMethod"},"model":{"name":"DFTModel"},"name":"Total Energy","units":[{"config":{"execName":"nwchem","flavorName":"nwchem_total_energy","name":"nwchem_total_energy"},"functions":{"head":true},"type":"executionBuilder"}]}},"python":{"classification_tail":{"__path__":"ml/classification_tail","application":{"name":"python","version":"3.10.13"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Machine Learning","units":[{"attributes":{"enableRender":true},"config":{"execName":"python","flavorName":"pyml:setup_variables_packages","name":"Setup Variables and Packages"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:read_csv:pandas","name":"Data Input"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:train_test_split:sklearn","name":"Train Test Split"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:pre_processing:standardization:sklearn","name":"Data Standardize"},"type":"executionBuilder"},{"attributes":{"results":[{"name":"workflow:pyml_predict"}],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"]},"config":{"execName":"python","flavorName":"pyml:model:random_forest_classification:sklearn","name":"Model Train and Predict"},"type":"executionBuilder"},{"attributes":{"postProcessors":[{"name":"remove_virtual_environment"}],"results":[{"name":"file_content"}],"tags":["remove-all-results"]},"config":{"execName":"python","flavorName":"pyml:post_processing:roc_curve:sklearn","name":"ROC Curve Plot"},"type":"executionBuilder"}]},"clustering_tail":{"__path__":"ml/clustering_tail","application":{"name":"python","version":"3.10.13"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Machine Learning","units":[{"attributes":{"enableRender":true},"config":{"execName":"python","flavorName":"pyml:setup_variables_packages","name":"Setup Variables and Packages"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:read_csv:pandas","name":"Data Input"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:train_test_split:sklearn","name":"Train Test Split"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:pre_processing:standardization:sklearn","name":"Data Standardize"},"type":"executionBuilder"},{"attributes":{"results":[{"name":"workflow:pyml_predict"}],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"]},"config":{"execName":"python","flavorName":"pyml:model:k_means_clustering:sklearn","name":"Model Train and Predict"},"type":"executionBuilder"},{"attributes":{"postProcessors":[{"name":"remove_virtual_environment"}],"results":[{"name":"file_content"},{"name":"file_content"},{"name":"file_content"}],"tags":["remove-all-results"]},"config":{"execName":"python","flavorName":"pyml:post_processing:pca_2d_clusters:matplotlib","name":"2D PCA Clusters Plot"},"type":"executionBuilder"}]},"python_script":{"__path__":"python_script","application":{"name":"python","version":"3.10.13"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Python Script","units":[{"config":{"execName":"python","flavorName":"hello_world","name":"python"},"type":"executionBuilder"}]},"regression_tail":{"__path__":"ml/regression_tail","application":{"name":"python","version":"3.10.13"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Machine Learning","units":[{"attributes":{"enableRender":true},"config":{"execName":"python","flavorName":"pyml:setup_variables_packages","name":"Setup Variables and Packages"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:read_csv:pandas","name":"Data Input"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:train_test_split:sklearn","name":"Train Test Split"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:pre_processing:standardization:sklearn","name":"Data Standardize"},"type":"executionBuilder"},{"attributes":{"results":[{"name":"workflow:pyml_predict"}],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"]},"config":{"execName":"python","flavorName":"pyml:model:multilayer_perceptron:sklearn","name":"Model Train and Predict"},"type":"executionBuilder"},{"attributes":{"postProcessors":[{"name":"remove_virtual_environment"}],"results":[{"name":"file_content"}],"tags":["remove-all-results"]},"config":{"execName":"python","flavorName":"pyml:post_processing:parity_plot:matplotlib","name":"Parity Plot"},"type":"executionBuilder"}]},"train_head":{"__path__":"ml/train_head","application":{"name":"python","version":"3.10.13"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Set Up the Job","units":[{"config":{"flowchartId":"head-set-predict-status","name":"Set Workflow Mode","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","tags":["pyml:workflow-type-setter"],"value":"False"},"type":"assignment"},{"config":{"enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""},"type":"object_storage"}],"name":"Fetch Dataset","source":"object_storage"},"type":"io"},{"config":{"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"name":"Train or Predict?","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","then":"head-fetch-trained-model"},"type":"condition"},{"config":{"enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""},"type":"object_storage"}],"name":"Fetch Trained Model as file","source":"object_storage","tags":["set-io-unit-filenames"]},"type":"io"},{"config":{"flowchartId":"end-of-ml-train-head","name":"End Setup","operand":"IS_SETUP_COMPLETE","value":"True"},"type":"assignment"}]}},"shell":{"batch_espresso_pwscf":{"__path__":"batch_espresso_pwscf","application":{"name":"shell","version":"5.1.8"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Shell Batch Job (Espresso PWSCF)","units":[{"config":{"execName":"sh","flavorName":"job_espresso_pw_scf","name":"shell"},"type":"executionBuilder"}]},"hello_world":{"__path__":"hello_world","application":{"name":"shell","version":"5.1.8"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Shell Hello World","units":[{"config":{"execName":"sh","flavorName":"hello_world","name":"shell"},"type":"executionBuilder"}]}},"vasp":{"band_gap":{"__path__":"band_gap","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Band Gap","units":[{"config":{"execName":"vasp","flavorName":"vasp","name":"vasp"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"execName":"vasp","flavorName":"vasp_nscf","name":"vasp_nscf"},"type":"executionBuilder"}]},"band_structure":{"__path__":"band_structure","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Band Structure","units":[{"config":{"execName":"vasp","flavorName":"vasp","name":"vasp"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"execName":"vasp","flavorName":"vasp_bands","name":"vasp_bands"},"type":"executionBuilder"}]},"band_structure_dos":{"__path__":"band_structure_dos","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Band Structure + Density of States","units":[{"config":{"execName":"vasp","flavorName":"vasp","name":"vasp"},"functions":{"addResults":[{"name":"density_of_states"}],"head":true},"type":"executionBuilder"},{"config":{"execName":"vasp","flavorName":"vasp_bands","name":"vasp_bands"},"type":"executionBuilder"}]},"dos":{"__path__":"dos","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Density of States","units":[{"config":{"execName":"vasp","flavorName":"vasp","name":"vasp"},"functions":{"addResults":[{"name":"density_of_states"}],"head":true},"type":"executionBuilder"}]},"fixed_cell_relaxation":{"__path__":"fixed_cell_relaxation","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Fixed-cell Relaxation","units":[{"config":{"execName":"vasp","flavorName":"vasp_relax","name":"vasp_relax"},"functions":{"head":true},"type":"executionBuilder"}]},"initial_final_total_energies":{"__path__":"initial_final_total_energies","application":{"name":"vasp","version":"5.4.4"},"config":{"functions":{"setDefaultCompute":null},"isMultiMaterial":true},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Initial/Final Total Energies","units":[{"config":{"execName":"vasp","flavorName":"vasp_neb_initial","name":"vasp_neb_initial"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"execName":"vasp","flavorName":"vasp_neb_final","name":"vasp_neb_final"},"type":"executionBuilder"}]},"kpoint_convergence":{"__path__":"kpoint_convergence","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"K-point Convergence","units":[{"config":{"flowchartId":"init-tolerance","name":"Init tolerance","operand":"TOL","value":0.00001},"type":"assignment"},{"config":{"flowchartId":"init-increment","name":"Init increment","operand":"INC","value":1},"type":"assignment"},{"config":{"flowchartId":"init-result","name":"Init result","operand":"PREV_RESULT","value":0},"type":"assignment"},{"config":{"flowchartId":"init-parameter","name":"Init parameter","operand":"PARAMETER","value":1},"type":"assignment"},{"config":{"execName":"vasp","flavorName":"vasp_kpt_conv","flowchartId":"vasp-kpoint-convergence","name":"vasp_kpt_conv"},"type":"executionBuilder"},{"config":{"flowchartId":"store-result","input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}],"name":"store result","operand":"RESULT","value":"total_energy"},"type":"assignment"},{"config":{"else":"update-result","flowchartId":"check-convergence","maxOccurrences":50,"name":"check convergence","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","then":"convergence-is-reached"},"type":"condition"},{"config":{"flowchartId":"update-result","input":[{"name":"RESULT","scope":"global"}],"name":"update result","operand":"PREV_RESULT","value":"RESULT"},"type":"assignment"},{"config":{"flowchartId":"increment-parameter","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"name":"increment parameter","next":"vasp-kpoint-convergence","operand":"PREV_RESULT","value":"PARAMETER+INC"},"type":"assignment"},{"config":{"flowchartId":"convergence-is-reached","input":[{"name":"PARAMETER","scope":"global"}],"name":"exit","operand":"PARAMETER","value":"PARAMETER"},"type":"assignment"}]},"neb_subworkflow":{"__path__":"neb_subworkflow","application":{"name":"vasp","version":"5.4.4"},"config":{"isMultiMaterial":true},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Nudged Elastic Band (NEB)","units":[{"config":{"execName":"vasp","flavorName":"vasp_neb","name":"vasp_neb"},"type":"executionBuilder"}]},"prepare_images":{"__path__":"prepare_images","application":{"name":"shell","version":"5.1.8"},"config":{"isMultiMaterial":true},"method":{"name":"Method"},"model":{"name":"Model"},"name":"Prepare Directories","units":[{"config":{"execName":"sh","flavorName":"bash_vasp_prepare_neb_images","name":"prepare-neb-images"},"type":"executionBuilder"}]},"recalculate_bands":{"__path__":"recalculate_bands","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Recalculate Bands","units":[{"config":{"execName":"vasp","flavorName":"vasp_bands","name":"vasp_bands"},"functions":{"head":true},"type":"executionBuilder"}]},"surface_energy":{"__path__":"surface_energy","application":{"name":"vasp","version":"5.4.4"},"dynamicSubworkflow":{"name":"surfaceEnergy"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Surface Energy","units":[{"config":{"execName":"vasp","flavorName":"vasp_symprec","name":"vasp_symprec"},"functions":{"head":true},"type":"executionBuilder"}]},"total_energy":{"__path__":"total_energy","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Total Energy","units":[{"config":{"execName":"vasp","flavorName":"vasp","name":"vasp"},"functions":{"head":true},"type":"executionBuilder"}]},"variable_cell_relaxation":{"__path__":"variable_cell_relaxation","application":{"name":"vasp","version":"5.4.4"},"config":{"systemName":"vasp-variable-cell-relaxation"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Variable-cell Relaxation","tags":["variable-cell_relaxation"],"units":[{"config":{"execName":"vasp","flavorName":"vasp_vc_relax","name":"vasp_vc_relax"},"functions":{"head":true},"type":"executionBuilder"}]},"zero_point_energy":{"__path__":"zero_point_energy","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Zero Point Energy","units":[{"config":{"execName":"vasp","flavorName":"vasp_zpe","name":"vasp_zpe"},"functions":{"head":true},"type":"executionBuilder"}]}}},"workflows":{"espresso":{"average_electrostatic_potential":{"__path__":"average_electrostatic_potential","name":"Average Electrostatic Potential","units":[{"name":"average_electrostatic_potential","type":"subworkflow"}]},"band_gap":{"__path__":"band_gap","name":"Band Gap","units":[{"name":"band_gap","type":"subworkflow"}]},"band_gap_dos_hse":{"__path__":"band_gap_dos_hse","name":"Band Gap + DoS - HSE","units":[{"name":"band_gap_hse_dos","type":"subworkflow"}]},"band_structure":{"__path__":"band_structure","name":"Band Structure","units":[{"name":"band_structure","type":"subworkflow"}]},"band_structure_dos":{"__path__":"band_structure_dos","name":"Band Structure + Density of States","units":[{"name":"band_structure_dos","type":"subworkflow"}]},"band_structure_hse":{"__path__":"band_structure_hse","name":"Band Structure - HSE","units":[{"config":{"attributes":{"name":"Preliminary SCF Calculation"}},"name":"pw_scf","type":"subworkflow"},{"name":"espresso_extract_kpoints","type":"subworkflow"},{"config":{"attributes":{"name":"Main HSE Run"}},"name":"band_structure_hse","type":"subworkflow"}]},"band_structure_magn":{"__path__":"band_structure_magn","name":"Bandstructure with spin magnetism - QE","units":[{"config":{"attributes":{"name":"Bandstructure with spin magnetism"}},"name":"band_structure_magn","type":"subworkflow"}]},"band_structure_soc":{"__path__":"band_structure_soc","name":"Bandstructure with SOC - QE","units":[{"config":{"attributes":{"name":"Bandstructure with SOC"}},"name":"band_structure_soc","type":"subworkflow"}]},"dielectric_tensor":{"__path__":"dielectric_tensor","name":"Dielectric Function","units":[{"name":"dielectric_tensor","type":"subworkflow"}]},"dos":{"__path__":"dos","name":"Density of States","units":[{"name":"dos","type":"subworkflow"}]},"electronic_density_mesh":{"__path__":"electronic_density_mesh","name":"Electronic Density Mesh","units":[{"name":"electronic_density_mesh","type":"subworkflow"}]},"esm":{"__path__":"esm","name":"Effective Screening Medium (ESM)","units":[{"name":"esm","type":"subworkflow"}]},"esm_relax":{"__path__":"esm_relax","name":"Effective Screening Medium (ESM) Relax","units":[{"name":"esm_relax","type":"subworkflow"}]},"fixed_cell_relaxation":{"__path__":"fixed_cell_relaxation","name":"Fixed-cell Relaxation","units":[{"name":"fixed_cell_relaxation","type":"subworkflow"}]},"gw_band_structure_band_gap_full_frequency":{"__path__":"gw_band_structure_band_gap_full_frequency","name":"Full Frequency GW Band Structure + Band Gap","units":[{"name":"gw_band_structure_band_gap_full_frequency","type":"subworkflow"}]},"gw_band_structure_band_gap_plasmon_pole":{"__path__":"gw_band_structure_band_gap_plasmon_pole","name":"Plasmon-Pole GW Band Structure + Band Gap","units":[{"name":"gw_band_structure_band_gap_plasmon_pole","type":"subworkflow"}]},"kpoint_convergence":{"__path__":"kpoint_convergence","name":"K-point Convergence","units":[{"name":"kpoint_convergence","type":"subworkflow"}]},"neb":{"__path__":"neb","name":"Nudged Elastic Band (NEB)","units":[{"name":"neb","type":"subworkflow"}]},"phonon_dispersions":{"__path__":"phonon_dispersions","name":"Phonon Dispersions","units":[{"name":"phonon_dispersions","type":"subworkflow"}]},"phonon_dos":{"__path__":"phonon_dos","name":"Phonon Density of States","units":[{"name":"phonon_dos","type":"subworkflow"}]},"phonon_dos_dispersion":{"__path__":"phonon_dos_dispersion","name":"Phonon Density of States + Dispersions","units":[{"name":"phonon_dos_dispersion","type":"subworkflow"}]},"phonon_map":{"__path__":"phonon_map","name":"Phonon Map","units":[{"name":"pw_scf","type":"subworkflow"},{"name":"ph_init_qpoints","type":"subworkflow"},{"name":"espresso_xml_get_qpt_irr","type":"subworkflow"},{"config":{"functions":{"setDefaultCompute":null},"input":{"name":"Q_POINTS"},"mapUnit":true},"name":"phonon_map_workflow","type":"workflow","units":[{"name":"pre_processor","type":"subworkflow"},{"name":"ph_single_irr_qpt","type":"subworkflow"},{"name":"post_processor","type":"subworkflow"}]},{"name":"phonon_reduce","type":"subworkflow"}]},"recalculate_bands":{"__path__":"recalculate_bands","name":"Recalculate Bands","units":[{"name":"recalculate_bands","type":"subworkflow"}]},"surface_energy":{"__path__":"surface_energy","name":"Surface Energy","units":[{"name":"surface_energy","type":"subworkflow"}]},"total_energy":{"__path__":"total_energy","name":"Total Energy","tags":["default"],"units":[{"name":"total_energy","type":"subworkflow"}]},"valence_band_offset":{"__path__":"valence_band_offset","name":"Valence Band Offset (2D)","units":[{"config":{"attributes":{"name":"BS + Avg ESP (Interface)"}},"name":"average_electrostatic_potential_via_band_structure","type":"subworkflow","unitConfigs":[{"config":{"attributes":{"name":"Set Material Index (Interface)","value":"0"}},"index":0,"type":"assignment"}]},{"config":{"attributes":{"name":"Find ESP Values (Interface)"}},"name":"average_electrostatic_potential_find_minima","type":"subworkflow","unitConfigs":[{"config":{"attributes":{"operand":"AVG_ESP_INTERFACE"}},"index":1,"type":"assignment"}]},{"config":{"attributes":{"name":"BS + Avg ESP (interface left)"}},"name":"average_electrostatic_potential_via_band_structure","type":"subworkflow","unitConfigs":[{"config":{"attributes":{"name":"Set Material Index (Interface left)","value":"1"}},"index":0,"type":"assignment"},{"config":{"attributes":{"flowchartId":"pw-bands-calculate-band-gap-left"}},"index":2,"type":"executionBuilder"},{"config":{"attributes":{"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-left"}]}},"index":3,"type":"assignment"},{"config":{"attributes":{"operand":"VBM_LEFT"}},"index":4,"type":"assignment"},{"config":{"attributes":{"flowchartId":"average-electrostatic-potential-left"}},"index":7,"type":"executionBuilder"},{"config":{"attributes":{"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-left"}]}},"index":8,"type":"assignment"}]},{"config":{"attributes":{"name":"Find ESP Value (Interface left)"}},"name":"average_electrostatic_potential_find_minima","type":"subworkflow","unitConfigs":[{"config":{"attributes":{"flowchartId":"python-find-extrema-left"}},"index":0,"type":"executionBuilder"},{"config":{"attributes":{"input":[{"name":"STDOUT","scope":"python-find-extrema-left"}],"operand":"AVG_ESP_LEFT"}},"index":1,"type":"assignment"}]},{"config":{"attributes":{"name":"BS + Avg ESP (interface right)"}},"name":"average_electrostatic_potential_via_band_structure","type":"subworkflow","unitConfigs":[{"config":{"attributes":{"name":"Set Material Index (Interface right)","value":"2"}},"index":0,"type":"assignment"},{"config":{"attributes":{"flowchartId":"pw-bands-calculate-band-gap-right"}},"index":2,"type":"executionBuilder"},{"config":{"attributes":{"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-right"}]}},"index":3,"type":"assignment"},{"config":{"attributes":{"operand":"VBM_RIGHT"}},"index":4,"type":"assignment"},{"config":{"attributes":{"flowchartId":"average-electrostatic-potential-right"}},"index":7,"type":"executionBuilder"},{"config":{"attributes":{"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-right"}]}},"index":8,"type":"assignment"}]},{"config":{"attributes":{"name":"Find ESP Value (Interface right)"}},"name":"average_electrostatic_potential_find_minima","type":"subworkflow","unitConfigs":[{"config":{"attributes":{"flowchartId":"python-find-extrema-right"}},"index":0,"type":"executionBuilder"},{"config":{"attributes":{"input":[{"name":"STDOUT","scope":"python-find-extrema-right"}],"operand":"AVG_ESP_RIGHT"}},"index":1,"type":"assignment"}]},{"name":"valence_band_offset_calc_from_previous_esp_vbm","type":"subworkflow"}]},"variable_cell_relaxation":{"__path__":"variable_cell_relaxation","name":"Variable-cell Relaxation","tags":["variable-cell_relaxation"],"units":[{"name":"variable_cell_relaxation","type":"subworkflow"}]},"wavefunction_amplitude":{"__path__":"wavefunction_amplitude","name":"Wavefunction Amplitude","properties":["atomic_forces","band_structure","fermi_energy","file_content","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"tags":["wfn","wfn_plot"],"units":[{"name":"wavefunction_amplitude","type":"subworkflow"},{"name":"plot_wavefunction","type":"subworkflow"}]},"zero_point_energy":{"__path__":"zero_point_energy","name":"Zero Point Energy","units":[{"name":"zero_point_energy","type":"subworkflow"}]}},"nwchem":{"total_energy":{"__path__":"total_energy","name":"Total Energy","units":[{"name":"total_energy","type":"subworkflow"}]}},"python":{"classification_workflow":{"__path__":"ml/classification_workflow","config":{"attributes":{"isUsingDataset":true}},"name":"Python ML Train Classification","units":[{"name":"train_head","type":"subworkflow"},{"name":"classification_tail","type":"subworkflow"}]},"clustering_workflow":{"__path__":"ml/clustering_workflow","config":{"attributes":{"isUsingDataset":true}},"name":"Python ML Train Clustering","units":[{"name":"train_head","type":"subworkflow"},{"name":"classification_tail","type":"subworkflow"}]},"python_script":{"__path__":"python_script","name":"Python Script","units":[{"name":"python_script","type":"subworkflow"}]},"regression_workflow":{"__path__":"ml/regression_workflow","config":{"attributes":{"isUsingDataset":true}},"name":"Python ML Train Regression","units":[{"name":"train_head","type":"subworkflow"},{"name":"regression_tail","type":"subworkflow"}]}},"shell":{"batch_espresso_pwscf":{"__path__":"batch_espresso_pwscf","name":"Shell Batch Job (Espresso PWSCF)","units":[{"name":"batch_espresso_pwscf","type":"subworkflow"}]},"hello_world":{"__path__":"hello_world","name":"Shell Script","units":[{"name":"hello_world","type":"subworkflow"}]}},"vasp":{"band_gap":{"__path__":"band_gap","name":"Band Gap","units":[{"name":"band_gap","type":"subworkflow"}]},"band_structure":{"__path__":"band_structure","name":"Band Structure","units":[{"name":"band_structure","type":"subworkflow"}]},"band_structure_dos":{"__path__":"band_structure_dos","name":"Band Structure + Density of States","units":[{"name":"band_structure_dos","type":"subworkflow"}]},"dos":{"__path__":"dos","name":"Density of States","units":[{"name":"dos","type":"subworkflow"}]},"fixed_cell_relaxation":{"__path__":"fixed_cell_relaxation","name":"Fixed-cell Relaxation","units":[{"name":"fixed_cell_relaxation","type":"subworkflow"}]},"kpoint_convergence":{"__path__":"kpoint_convergence","name":"K-point Convergence","units":[{"name":"kpoint_convergence","type":"subworkflow"}]},"neb":{"__path__":"neb","name":"Nudged Elastic Band (NEB)","units":[{"name":"initial_final_total_energies","type":"subworkflow"},{"name":"prepare_images","type":"subworkflow"},{"name":"neb_subworkflow","type":"subworkflow"}]},"recalculate_bands":{"__path__":"recalculate_bands","name":"Recalculate Bands","units":[{"name":"recalculate_bands","type":"subworkflow"}]},"surface_energy":{"__path__":"surface_energy","name":"Surface Energy","units":[{"name":"surface_energy","type":"subworkflow"}]},"total_energy":{"__path__":"total_energy","name":"Total Energy","units":[{"name":"total_energy","type":"subworkflow"}]},"variable_cell_relaxation":{"__path__":"variable_cell_relaxation","name":"Variable-cell Relaxation","tags":["variable-cell_relaxation"],"units":[{"name":"variable_cell_relaxation","type":"subworkflow"}]},"zero_point_energy":{"__path__":"zero_point_energy","name":"Zero Point Energy","units":[{"name":"zero_point_energy","type":"subworkflow"}]}}}} +{"workflows":{"espresso":{"average_electrostatic_potential":{"__path__":"average_electrostatic_potential","name":"Average Electrostatic Potential","units":[{"name":"average_electrostatic_potential","type":"subworkflow"}]},"band_gap":{"__path__":"band_gap","name":"Band Gap","units":[{"name":"band_gap","type":"subworkflow"}]},"band_gap_dos_hse":{"__path__":"band_gap_dos_hse","name":"Band Gap + DoS - HSE","units":[{"name":"band_gap_hse_dos","type":"subworkflow"}]},"band_structure":{"__path__":"band_structure","name":"Band Structure","units":[{"name":"band_structure","type":"subworkflow"}]},"band_structure_dos":{"__path__":"band_structure_dos","name":"Band Structure + Density of States","units":[{"name":"band_structure_dos","type":"subworkflow"}]},"band_structure_hse":{"__path__":"band_structure_hse","name":"Band Structure - HSE","units":[{"name":"pw_scf","type":"subworkflow","config":{"attributes":{"name":"Preliminary SCF Calculation"}}},{"name":"espresso_extract_kpoints","type":"subworkflow"},{"name":"band_structure_hse","type":"subworkflow","config":{"attributes":{"name":"Main HSE Run"}}}]},"band_structure_magn":{"__path__":"band_structure_magn","name":"Bandstructure with spin magnetism - QE","units":[{"name":"band_structure_magn","type":"subworkflow","config":{"attributes":{"name":"Bandstructure with spin magnetism"}}}]},"band_structure_soc":{"__path__":"band_structure_soc","name":"Bandstructure with SOC - QE","units":[{"name":"band_structure_soc","type":"subworkflow","config":{"attributes":{"name":"Bandstructure with SOC"}}}]},"dielectric_tensor":{"__path__":"dielectric_tensor","name":"Dielectric Function","units":[{"name":"dielectric_tensor","type":"subworkflow"}]},"dos":{"__path__":"dos","name":"Density of States","units":[{"name":"dos","type":"subworkflow"}]},"electronic_density_mesh":{"__path__":"electronic_density_mesh","name":"Electronic Density Mesh","units":[{"name":"electronic_density_mesh","type":"subworkflow"}]},"esm":{"__path__":"esm","name":"Effective Screening Medium (ESM)","units":[{"name":"esm","type":"subworkflow"}]},"esm_relax":{"__path__":"esm_relax","name":"Effective Screening Medium (ESM) Relax","units":[{"name":"esm_relax","type":"subworkflow"}]},"fixed_cell_relaxation":{"__path__":"fixed_cell_relaxation","name":"Fixed-cell Relaxation","units":[{"name":"fixed_cell_relaxation","type":"subworkflow"}]},"gw_band_structure_band_gap_full_frequency":{"__path__":"gw_band_structure_band_gap_full_frequency","name":"Full Frequency GW Band Structure + Band Gap","units":[{"name":"gw_band_structure_band_gap_full_frequency","type":"subworkflow"}]},"gw_band_structure_band_gap_plasmon_pole":{"__path__":"gw_band_structure_band_gap_plasmon_pole","name":"Plasmon-Pole GW Band Structure + Band Gap","units":[{"name":"gw_band_structure_band_gap_plasmon_pole","type":"subworkflow"}]},"kpoint_convergence":{"__path__":"kpoint_convergence","name":"K-point Convergence","units":[{"name":"kpoint_convergence","type":"subworkflow"}]},"neb":{"__path__":"neb","name":"Nudged Elastic Band (NEB)","units":[{"name":"neb","type":"subworkflow"}]},"phonon_dispersions":{"__path__":"phonon_dispersions","name":"Phonon Dispersions","units":[{"name":"phonon_dispersions","type":"subworkflow"}]},"phonon_dos":{"__path__":"phonon_dos","name":"Phonon Density of States","units":[{"name":"phonon_dos","type":"subworkflow"}]},"phonon_dos_dispersion":{"__path__":"phonon_dos_dispersion","name":"Phonon Density of States + Dispersions","units":[{"name":"phonon_dos_dispersion","type":"subworkflow"}]},"phonon_map":{"__path__":"phonon_map","name":"Phonon Map","units":[{"name":"pw_scf","type":"subworkflow"},{"name":"ph_init_qpoints","type":"subworkflow"},{"name":"espresso_xml_get_qpt_irr","type":"subworkflow"},{"name":"phonon_map_workflow","type":"workflow","config":{"functions":{"setDefaultCompute":null},"input":{"name":"Q_POINTS"},"mapUnit":true},"units":[{"name":"pre_processor","type":"subworkflow"},{"name":"ph_single_irr_qpt","type":"subworkflow"},{"name":"post_processor","type":"subworkflow"}]},{"name":"phonon_reduce","type":"subworkflow"}]},"recalculate_bands":{"__path__":"recalculate_bands","name":"Recalculate Bands","units":[{"name":"recalculate_bands","type":"subworkflow"}]},"surface_energy":{"__path__":"surface_energy","name":"Surface Energy","units":[{"name":"surface_energy","type":"subworkflow"}]},"total_energy":{"__path__":"total_energy","name":"Total Energy","units":[{"name":"total_energy","type":"subworkflow"}],"tags":["default"]},"valence_band_offset":{"__path__":"valence_band_offset","name":"Valence Band Offset (2D)","units":[{"name":"average_electrostatic_potential_via_band_structure","type":"subworkflow","config":{"attributes":{"name":"BS + Avg ESP (Interface)"}},"unitConfigs":[{"index":0,"type":"assignment","config":{"attributes":{"name":"Set Material Index (Interface)","value":"0"}}}]},{"name":"average_electrostatic_potential_find_minima","type":"subworkflow","config":{"attributes":{"name":"Find ESP Values (Interface)"}},"unitConfigs":[{"index":1,"type":"assignment","config":{"attributes":{"operand":"AVG_ESP_INTERFACE"}}}]},{"name":"average_electrostatic_potential_via_band_structure","type":"subworkflow","config":{"attributes":{"name":"BS + Avg ESP (interface left)"}},"unitConfigs":[{"index":0,"type":"assignment","config":{"attributes":{"name":"Set Material Index (Interface left)","value":"1"}}},{"index":2,"type":"executionBuilder","config":{"attributes":{"flowchartId":"pw-bands-calculate-band-gap-left"}}},{"index":3,"type":"assignment","config":{"attributes":{"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-left"}]}}},{"index":4,"type":"assignment","config":{"attributes":{"operand":"VBM_LEFT"}}},{"index":7,"type":"executionBuilder","config":{"attributes":{"flowchartId":"average-electrostatic-potential-left"}}},{"index":8,"type":"assignment","config":{"attributes":{"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-left"}]}}}]},{"name":"average_electrostatic_potential_find_minima","type":"subworkflow","config":{"attributes":{"name":"Find ESP Value (Interface left)"}},"unitConfigs":[{"index":0,"type":"executionBuilder","config":{"attributes":{"flowchartId":"python-find-extrema-left"}}},{"index":1,"type":"assignment","config":{"attributes":{"operand":"AVG_ESP_LEFT","input":[{"name":"STDOUT","scope":"python-find-extrema-left"}]}}}]},{"name":"average_electrostatic_potential_via_band_structure","type":"subworkflow","config":{"attributes":{"name":"BS + Avg ESP (interface right)"}},"unitConfigs":[{"index":0,"type":"assignment","config":{"attributes":{"name":"Set Material Index (Interface right)","value":"2"}}},{"index":2,"type":"executionBuilder","config":{"attributes":{"flowchartId":"pw-bands-calculate-band-gap-right"}}},{"index":3,"type":"assignment","config":{"attributes":{"input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap-right"}]}}},{"index":4,"type":"assignment","config":{"attributes":{"operand":"VBM_RIGHT"}}},{"index":7,"type":"executionBuilder","config":{"attributes":{"flowchartId":"average-electrostatic-potential-right"}}},{"index":8,"type":"assignment","config":{"attributes":{"input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential-right"}]}}}]},{"name":"average_electrostatic_potential_find_minima","type":"subworkflow","config":{"attributes":{"name":"Find ESP Value (Interface right)"}},"unitConfigs":[{"index":0,"type":"executionBuilder","config":{"attributes":{"flowchartId":"python-find-extrema-right"}}},{"index":1,"type":"assignment","config":{"attributes":{"operand":"AVG_ESP_RIGHT","input":[{"name":"STDOUT","scope":"python-find-extrema-right"}]}}}]},{"name":"valence_band_offset_calc_from_previous_esp_vbm","type":"subworkflow"}]},"variable_cell_relaxation":{"__path__":"variable_cell_relaxation","name":"Variable-cell Relaxation","units":[{"name":"variable_cell_relaxation","type":"subworkflow"}],"tags":["variable-cell_relaxation"]},"wavefunction_amplitude":{"__path__":"wavefunction_amplitude","name":"Wavefunction Amplitude","properties":["atomic_forces","band_structure","fermi_energy","file_content","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","wavefunction_amplitude"],"units":[{"name":"wavefunction_amplitude","type":"subworkflow"},{"name":"plot_wavefunction","type":"subworkflow"}],"tags":["wfn","wfn_plot"]},"zero_point_energy":{"__path__":"zero_point_energy","name":"Zero Point Energy","units":[{"name":"zero_point_energy","type":"subworkflow"}]}},"nwchem":{"total_energy":{"__path__":"total_energy","name":"Total Energy","units":[{"name":"total_energy","type":"subworkflow"}]}},"python":{"classification_workflow":{"__path__":"ml/classification_workflow","config":{"attributes":{"isUsingDataset":true}},"name":"Python ML Train Classification","units":[{"name":"train_head","type":"subworkflow"},{"name":"classification_tail","type":"subworkflow"}]},"clustering_workflow":{"__path__":"ml/clustering_workflow","config":{"attributes":{"isUsingDataset":true}},"name":"Python ML Train Clustering","units":[{"name":"train_head","type":"subworkflow"},{"name":"classification_tail","type":"subworkflow"}]},"regression_workflow":{"__path__":"ml/regression_workflow","config":{"attributes":{"isUsingDataset":true}},"name":"Python ML Train Regression","units":[{"name":"train_head","type":"subworkflow"},{"name":"regression_tail","type":"subworkflow"}]},"python_script":{"__path__":"python_script","name":"Python Script","units":[{"name":"python_script","type":"subworkflow"}]}},"shell":{"batch_espresso_pwscf":{"__path__":"batch_espresso_pwscf","name":"Shell Batch Job (Espresso PWSCF)","units":[{"name":"batch_espresso_pwscf","type":"subworkflow"}]},"hello_world":{"__path__":"hello_world","name":"Shell Script","units":[{"name":"hello_world","type":"subworkflow"}]}},"vasp":{"band_gap":{"__path__":"band_gap","name":"Band Gap","units":[{"name":"band_gap","type":"subworkflow"}]},"band_structure":{"__path__":"band_structure","name":"Band Structure","units":[{"name":"band_structure","type":"subworkflow"}]},"band_structure_dos":{"__path__":"band_structure_dos","name":"Band Structure + Density of States","units":[{"name":"band_structure_dos","type":"subworkflow"}]},"dos":{"__path__":"dos","name":"Density of States","units":[{"name":"dos","type":"subworkflow"}]},"fixed_cell_relaxation":{"__path__":"fixed_cell_relaxation","name":"Fixed-cell Relaxation","units":[{"name":"fixed_cell_relaxation","type":"subworkflow"}]},"kpoint_convergence":{"__path__":"kpoint_convergence","name":"K-point Convergence","units":[{"name":"kpoint_convergence","type":"subworkflow"}]},"neb":{"__path__":"neb","name":"Nudged Elastic Band (NEB)","units":[{"name":"initial_final_total_energies","type":"subworkflow"},{"name":"prepare_images","type":"subworkflow"},{"name":"neb_subworkflow","type":"subworkflow"}]},"recalculate_bands":{"__path__":"recalculate_bands","name":"Recalculate Bands","units":[{"name":"recalculate_bands","type":"subworkflow"}]},"surface_energy":{"__path__":"surface_energy","name":"Surface Energy","units":[{"name":"surface_energy","type":"subworkflow"}]},"total_energy":{"__path__":"total_energy","name":"Total Energy","units":[{"name":"total_energy","type":"subworkflow"}]},"variable_cell_relaxation":{"__path__":"variable_cell_relaxation","name":"Variable-cell Relaxation","units":[{"name":"variable_cell_relaxation","type":"subworkflow"}],"tags":["variable-cell_relaxation"]},"zero_point_energy":{"__path__":"zero_point_energy","name":"Zero Point Energy","units":[{"name":"zero_point_energy","type":"subworkflow"}]}}},"subworkflows":{"espresso":{"average_electrostatic_potential":{"__path__":"average_electrostatic_potential","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Average Electrostatic Potential","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"type":"executionBuilder"},{"config":{"execName":"pp.x","flavorName":"pp_electrostatic_potential","name":"Electrostatic Potential (ESP)"},"type":"executionBuilder"},{"config":{"execName":"average.x","flavorName":"average_potential","name":"average ESP","flowchartId":"average-electrostatic-potential"},"type":"executionBuilder","attributes":{"results":[{"name":"average_potential_profile"}]}}]},"average_electrostatic_potential_find_minima":{"__path__":"average_electrostatic_potential_find_minima","application":{"name":"python","version":"3.10.13"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Find ESP Value","units":[{"config":{"name":"Find Extrema","execName":"python","flavorName":"generic:processing:find_extrema:scipy","flowchartId":"python-find-extrema"},"type":"executionBuilder"},{"config":{"name":"Set Average ESP Value","operand":"AVG_ESP","value":"json.loads(STDOUT)['minima']","input":[{"name":"STDOUT","scope":"python-find-extrema"}]},"type":"assignment"}]},"average_electrostatic_potential_via_band_structure":{"__path__":"average_electrostatic_potential_via_band_structure","config":{"isMultiMaterial":true},"application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Band Structure + average ESP","units":[{"config":{"name":"Set Material Index","operand":"MATERIAL_INDEX","value":0},"type":"assignment"},{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"type":"executionBuilder"},{"config":{"execName":"pw.x","flavorName":"pw_bands","name":"pw_bands","flowchartId":"pw-bands-calculate-band-gap"},"type":"executionBuilder","attributes":{"results":[{"name":"band_gaps"}]}},{"config":{"name":"Select indirect band gap","operand":"BAND_GAP_INDIRECT","value":"[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]","input":[{"name":"band_gaps","scope":"pw-bands-calculate-band-gap"}]},"type":"assignment"},{"config":{"name":"Set Valence Band Maximum","operand":"VBM","value":"BAND_GAP_INDIRECT['eigenvalueValence']"},"type":"assignment"},{"config":{"execName":"bands.x","flavorName":"bands","name":"bands"},"type":"executionBuilder"},{"config":{"execName":"pp.x","flavorName":"pp_electrostatic_potential","name":"Electrostatic Potential (ESP)"},"type":"executionBuilder"},{"config":{"execName":"average.x","flavorName":"average_potential","name":"average ESP","flowchartId":"average-electrostatic-potential"},"type":"executionBuilder"},{"config":{"name":"Set Macroscopically Averaged ESP Data","operand":"array_from_context","value":"average_potential_profile['yDataSeries'][1]","input":[{"name":"average_potential_profile","scope":"average-electrostatic-potential"}]},"type":"assignment"}]},"band_gap":{"__path__":"band_gap","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Band Gap","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"execName":"pw.x","flavorName":"pw_nscf","name":"pw_nscf"},"type":"executionBuilder"}]},"band_gap_hse_dos":{"__path__":"band_gap_hse_dos","name":"HSE Band Gap","application":{"name":"espresso","version":"6.3"},"model":{"name":"DFTModel","config":{"type":"dft","subtype":"hybrid","functional":"hse06"}},"method":{"name":"PseudopotentialMethod","config":{"type":"pseudopotential","subtype":"us"}},"units":[{"config":{"execName":"pw.x","flavorName":"pw_scf_hse","name":"pw_scf_hse"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"execName":"projwfc.x","flavorName":"projwfc","name":"projwfc"},"type":"executionBuilder"}]},"band_structure":{"__path__":"band_structure","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Band Structure","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"execName":"pw.x","flavorName":"pw_bands","name":"pw_bands"},"type":"executionBuilder"},{"config":{"execName":"bands.x","flavorName":"bands","name":"bands"},"type":"executionBuilder"}]},"band_structure_dos":{"__path__":"band_structure_dos","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Band Structure + Density of States","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"type":"executionBuilder"},{"config":{"execName":"pw.x","flavorName":"pw_bands","name":"pw_bands"},"type":"executionBuilder"},{"config":{"execName":"bands.x","flavorName":"bands","name":"bands"},"type":"executionBuilder"},{"config":{"execName":"pw.x","flavorName":"pw_nscf","name":"pw_nscf"},"type":"executionBuilder"},{"config":{"execName":"projwfc.x","flavorName":"projwfc","name":"projwfc"},"type":"executionBuilder"}]},"band_structure_hse":{"__path__":"band_structure_hse","name":"Band Structure - HSE","application":{"name":"espresso","version":"6.3"},"model":{"name":"DFTModel","config":{"type":"dft","subtype":"hybrid","functional":"hse06"}},"method":{"name":"PseudopotentialMethod","config":{"type":"pseudopotential","subtype":"us"}},"units":[{"config":{"execName":"pw.x","flavorName":"pw_scf_bands_hse","name":"pw_scf_bands_hse"},"type":"executionBuilder"},{"config":{"execName":"bands.x","flavorName":"bands","name":"bands"},"type":"executionBuilder"}]},"band_structure_magn":{"__path__":"band_structure_magn","name":"Spin magnetic bandstructure","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"units":[{"config":{"execName":"pw.x","flavorName":"pw_scf_magn","name":"pw_scf_magn"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"execName":"pw.x","flavorName":"pw_bands_magn","name":"pw_bands_magn"},"type":"executionBuilder"},{"config":{"execName":"bands.x","flavorName":"bands_spin_up","name":"bands_spin_up"},"type":"executionBuilder"},{"config":{"execName":"bands.x","flavorName":"bands_spin_dn","name":"bands_spin_dn"},"type":"executionBuilder"}]},"band_structure_soc":{"__path__":"band_structure_soc","name":"Spin orbit coupling bandstructure","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod","setSearchText":"nc-fr","config":{"type":"pseudopotential","subtype":"nc-fr"}},"model":{"name":"DFTModel"},"units":[{"config":{"execName":"pw.x","flavorName":"pw_scf_soc","name":"pw_scf_soc"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"execName":"pw.x","flavorName":"pw_bands_soc","name":"pw_bands_soc"},"type":"executionBuilder"},{"config":{"execName":"bands.x","flavorName":"bands","name":"bands"},"type":"executionBuilder"}]},"dielectric_tensor":{"__path__":"dielectric_tensor","application":{"name":"espresso","version":"6.3"},"method":{"config":{"data":{},"subtype":"nc","type":"pseudopotential"},"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Compute Dielectric Function","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"name":"Set No-Symmetry Flag","operand":"NO_SYMMETRY_NO_INVERSION","value":true},"type":"assignment"},{"config":{"execName":"pw.x","flavorName":"pw_nscf","name":"pw_nscf"},"type":"executionBuilder"},{"config":{"execName":"epsilon.x","flavorName":"dielectric_tensor","name":"Compute dielectric function"},"type":"executionBuilder"}]},"dos":{"__path__":"dos","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Density of States","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"type":"executionBuilder"},{"config":{"execName":"pw.x","flavorName":"pw_nscf","name":"pw_nscf"},"type":"executionBuilder"},{"config":{"execName":"projwfc.x","flavorName":"projwfc","name":"projwfc"},"type":"executionBuilder"}]},"electronic_density_mesh":{"__path__":"electronic_density_mesh","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Electronic Density Mesh","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"type":"executionBuilder"},{"config":{"execName":"pp.x","flavorName":"pp_density","name":"pp_density"},"type":"executionBuilder"}]},"esm":{"__path__":"esm","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Effective Screening Medium (ESM)","units":[{"config":{"execName":"pw.x","flavorName":"pw_esm","name":"pw_esm"},"type":"executionBuilder"}]},"esm_relax":{"__path__":"esm_relax","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Effective Screening Medium (ESM) Relax","units":[{"config":{"execName":"pw.x","flavorName":"pw_esm_relax","name":"pw_esm_relax"},"type":"executionBuilder"}]},"espresso_extract_kpoints":{"__path__":"espresso_extract_kpoints","name":"Extract KPOINTS","application":{"name":"python","version":"3.10.13"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"units":[{"config":{"name":"Extract kpoints","execName":"python","flavorName":"espresso_extract_kpoints"},"type":"executionBuilder"}]},"espresso_xml_get_qpt_irr":{"__path__":"espresso_xml_get_qpt_irr","application":{"name":"python","version":"3.10.13"},"dynamicSubworkflow":{"name":"getQpointIrrep","subfolder":"espresso"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"espresso-xml-get-qpt-irr","units":[]},"fixed_cell_relaxation":{"__path__":"fixed_cell_relaxation","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Fixed-cell Relaxation","units":[{"config":{"execName":"pw.x","flavorName":"pw_relax","name":"pw_relax"},"functions":{"head":true},"type":"executionBuilder"}]},"gw_band_structure_band_gap_full_frequency":{"__path__":"gw_band_structure_band_gap_full_frequency","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod","setSearchText":".*dojo-oncv.*"},"model":{"name":"DFTModel"},"name":"Full Frequency GW Band Structure + Band Gap","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"execName":"gw.x","flavorName":"gw_bands_full_frequency","name":"gw_bands_full_frequency"},"type":"executionBuilder"}]},"gw_band_structure_band_gap_plasmon_pole":{"__path__":"gw_band_structure_band_gap_plasmon_pole","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod","setSearchText":".*dojo-oncv.*"},"model":{"name":"DFTModel"},"name":"Plasmon-Pole GW Band Structure + Band Gap","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"execName":"gw.x","flavorName":"gw_bands_plasmon_pole","name":"gw_bands_plasmon_pole"},"type":"executionBuilder"}]},"kpoint_convergence":{"__path__":"kpoint_convergence","name":"K-point Convergence","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"units":[{"config":{"name":"Init tolerance","flowchartId":"init-tolerance","operand":"TOL","value":0.00001},"type":"assignment"},{"config":{"name":"Init increment","flowchartId":"init-increment","operand":"INC","value":1},"type":"assignment"},{"config":{"name":"Init result","flowchartId":"init-result","operand":"PREV_RESULT","value":0},"type":"assignment"},{"config":{"name":"Init parameter","flowchartId":"init-parameter","operand":"PARAMETER","value":1},"type":"assignment"},{"config":{"name":"pw_scf_kpt_conv","flowchartId":"pwscf-kpoint-convergence","execName":"pw.x","flavorName":"pw_scf_kpt_conv"},"type":"executionBuilder"},{"config":{"name":"store result","flowchartId":"store-result","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"pwscf-kpoint-convergence"}]},"type":"assignment"},{"config":{"name":"check convergence","flowchartId":"check-convergence","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"then":"convergence-is-reached","else":"update-result"},"type":"condition"},{"config":{"name":"update result","flowchartId":"update-result","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}]},"type":"assignment"},{"config":{"name":"increment parameter","flowchartId":"increment-parameter","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"next":"pwscf-kpoint-convergence"},"type":"assignment"},{"config":{"name":"exit","flowchartId":"convergence-is-reached","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}]},"type":"assignment"}]},"neb":{"__path__":"neb","application":{"name":"espresso","version":"6.3"},"config":{"isMultiMaterial":true},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Nudged Elastic Band (NEB)","units":[{"config":{"execName":"neb.x","flavorName":"neb","name":"neb"},"type":"executionBuilder"}]},"ph_init_qpoints":{"__path__":"ph_init_qpoints","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"ph-init-qpoints","units":[{"config":{"execName":"ph.x","flavorName":"ph_init_qpoints","name":"ph_init_qpoints"},"type":"executionBuilder"}]},"ph_single_irr_qpt":{"__path__":"ph_single_irr_qpt","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"ph-single-irr-qpt","units":[{"config":{"execName":"ph.x","flavorName":"ph_single_irr_qpt","name":"ph_single_irr_qpt"},"type":"executionBuilder"}]},"phonon_dispersions":{"__path__":"phonon_dispersions","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Phonon Dispersions","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"type":"executionBuilder"},{"config":{"execName":"ph.x","flavorName":"ph_grid","name":"ph_grid"},"type":"executionBuilder"},{"config":{"execName":"q2r.x","flavorName":"q2r","name":"q2r"},"type":"executionBuilder"},{"config":{"execName":"matdyn.x","flavorName":"matdyn_path","name":"matdyn_path"},"type":"executionBuilder"}]},"phonon_dos":{"__path__":"phonon_dos","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Phonon Density of States","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"type":"executionBuilder"},{"config":{"execName":"ph.x","flavorName":"ph_grid","name":"ph_grid"},"type":"executionBuilder"},{"config":{"execName":"q2r.x","flavorName":"q2r","name":"q2r"},"type":"executionBuilder"},{"config":{"execName":"matdyn.x","flavorName":"matdyn_grid","name":"matdyn_grid"},"type":"executionBuilder"}]},"phonon_dos_dispersion":{"__path__":"phonon_dos_dispersion","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Phonon Density of States + Dispersions","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"type":"executionBuilder"},{"config":{"execName":"ph.x","flavorName":"ph_grid","name":"ph_grid"},"type":"executionBuilder"},{"config":{"execName":"q2r.x","flavorName":"q2r","name":"q2r"},"type":"executionBuilder"},{"config":{"execName":"matdyn.x","flavorName":"matdyn_grid","name":"matdyn_grid"},"type":"executionBuilder"},{"config":{"execName":"matdyn.x","flavorName":"matdyn_path","name":"matdyn_path"},"type":"executionBuilder"}]},"phonon_reduce":{"__path__":"phonon_reduce","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"reduce","units":[{"config":{"execName":"ph.x","flavorName":"ph_grid_restart","name":"ph_grid_restart"},"type":"executionBuilder"},{"config":{"execName":"q2r.x","flavorName":"q2r","name":"q2r"},"type":"executionBuilder"},{"config":{"execName":"matdyn.x","flavorName":"matdyn_grid","name":"matdyn_grid"},"type":"executionBuilder"},{"config":{"execName":"matdyn.x","flavorName":"matdyn_path","name":"matdyn_path"},"type":"executionBuilder"}]},"plot_wavefunction":{"__path__":"plot_wavefunction","application":{"name":"python","version":"3.10.13"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Plot Wavefunction","properties":["file_content"],"units":[{"attributes":{"results":[{"name":"file_content"}]},"config":{"execName":"python","flavorName":"plot_wavefunction","name":"plot WFN"},"type":"executionBuilder"}]},"post_processor":{"__path__":"post_processor","application":{"name":"shell","version":"5.1.8"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"post-processor","units":[{"config":{"execName":"sh","flavorName":"espresso_collect_dynmat","name":"shell"},"type":"executionBuilder"}]},"pre_processor":{"__path__":"pre_processor","application":{"name":"shell","version":"5.1.8"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"pre-processor","units":[{"config":{"execName":"sh","flavorName":"espresso_link_outdir_save","name":"shell"},"type":"executionBuilder"}]},"pw_scf":{"__path__":"pw_scf","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"pw-scf","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"functions":{"head":true},"type":"executionBuilder"}]},"recalculate_bands":{"__path__":"recalculate_bands","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Recalculate Bands","units":[{"config":{"execName":"pw.x","flavorName":"pw_bands","name":"pw_bands"},"type":"executionBuilder"},{"config":{"execName":"bands.x","flavorName":"bands","name":"bands"},"type":"executionBuilder"}]},"surface_energy":{"__path__":"surface_energy","application":{"name":"espresso","version":"6.3"},"dynamicSubworkflow":{"name":"surfaceEnergy"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Surface Energy","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"type":"executionBuilder"}]},"total_energy":{"__path__":"total_energy","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Total Energy","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"functions":{"head":true},"type":"executionBuilder"}],"tags":["default"]},"valence_band_offset_calc_from_previous_esp_vbm":{"__path__":"valence_band_offset_calc_from_previous_esp_vbm","application":{"name":"python","version":"3.10.13"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Calculate VBO","units":[{"config":{"name":"Difference of valence band maxima","operand":"VBM_DIFF","value":"VBM_LEFT - VBM_RIGHT"},"type":"assignment"},{"config":{"name":"Difference of macroscopically averaged ESP in bulk","operand":"AVG_ESP_DIFF","value":"AVG_ESP_LEFT[0] - AVG_ESP_RIGHT[0]"},"type":"assignment"},{"config":{"name":"Lineup of macroscopically averaged ESP in interface","operand":"ESP_LINEUP","value":"np.abs(AVG_ESP_INTERFACE[0] - AVG_ESP_INTERFACE[1])"},"type":"assignment"},{"config":{"name":"Valence Band Offset","operand":"VALENCE_BAND_OFFSET","value":"abs(VBM_DIFF - AVG_ESP_DIFF + (np.sign(AVG_ESP_DIFF) * ESP_LINEUP))","results":[{"name":"valence_band_offset"}]},"type":"assignment"}]},"variable_cell_relaxation":{"__path__":"variable_cell_relaxation","application":{"name":"espresso","version":"6.3"},"config":{"systemName":"espresso-variable-cell-relaxation"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Variable-cell Relaxation","units":[{"config":{"execName":"pw.x","flavorName":"pw_vc-relax","name":"pw_vc-relax"},"functions":{"head":true},"type":"executionBuilder"}],"tags":["variable-cell_relaxation"]},"wavefunction_amplitude":{"__path__":"wavefunction_amplitude","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Wavefunction Amplitude","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","band_structure","wavefunction_amplitude"],"units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf","flowchartId":"pw-scf"},"functions":{"head":true},"type":"executionBuilder","attributes":{"results":[{"name":"atomic_forces"},{"name":"band_structure"},{"name":"fermi_energy"},{"name":"pressure"},{"name":"stress_tensor"},{"name":"total_energy"},{"name":"total_energy_contributions"},{"name":"total_force"}]}},{"config":{"name":"Extract Band Energies","operand":"band_energies","value":"[band_data[0] for band_data in (band_structure['yDataSeries'] if (band_structure and 'yDataSeries' in band_structure) else [])]","flowchartId":"extract-band-energies","input":[{"name":"band_structure","scope":"pw-scf"}]},"type":"assignment"},{"config":{"name":"Find Indices Below Fermi","operand":"indices_below_fermi","value":"[i for i in range(len(band_energies)) if band_energies[i] <= fermi_energy]","flowchartId":"indices-below-fermi","input":[{"name":"fermi_energy","scope":"pw-scf"}]},"type":"assignment"},{"config":{"name":"Store Band Below EF","operand":"KBAND_VALUE_BELOW_EF","value":"indices_below_fermi[-1] + 1 if len(indices_below_fermi) > 0 else 1"},"type":"assignment"},{"config":{"name":"Select Band","operand":"KBAND_VALUE","value":"KBAND_VALUE_BELOW_EF"},"type":"assignment"},{"config":{"execName":"pp.x","flavorName":"pp_wfn","name":"pp_wfn","flowchartId":"pp-wfn","input":[{"name":"KBAND_VALUE"}]},"type":"executionBuilder","attributes":{"results":[{"name":"wavefunction_amplitude"}]}}],"tags":["wfn","wfn_plot"]},"zero_point_energy":{"__path__":"zero_point_energy","application":{"name":"espresso","version":"6.3"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Zero Point Energy","units":[{"config":{"execName":"pw.x","flavorName":"pw_scf","name":"pw_scf"},"type":"executionBuilder"},{"config":{"execName":"ph.x","flavorName":"ph_gamma","name":"ph_zpe"},"type":"executionBuilder"}]}},"nwchem":{"total_energy":{"__path__":"total_energy","application":{"name":"nwchem","version":"7.0.2"},"method":{"name":"LocalOrbitalMethod"},"model":{"name":"DFTModel"},"name":"Total Energy","units":[{"config":{"execName":"nwchem","flavorName":"nwchem_total_energy","name":"nwchem_total_energy"},"functions":{"head":true},"type":"executionBuilder"}]}},"python":{"classification_tail":{"__path__":"ml/classification_tail","application":{"name":"python","version":"3.10.13"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Machine Learning","units":[{"attributes":{"enableRender":true},"config":{"execName":"python","flavorName":"pyml:setup_variables_packages","name":"Setup Variables and Packages"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:read_csv:pandas","name":"Data Input"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:train_test_split:sklearn","name":"Train Test Split"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:pre_processing:standardization:sklearn","name":"Data Standardize"},"type":"executionBuilder"},{"attributes":{"results":[{"name":"workflow:pyml_predict"}],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"]},"config":{"execName":"python","flavorName":"pyml:model:random_forest_classification:sklearn","name":"Model Train and Predict"},"type":"executionBuilder"},{"attributes":{"postProcessors":[{"name":"remove_virtual_environment"}],"results":[{"name":"file_content"}],"tags":["remove-all-results"]},"config":{"execName":"python","flavorName":"pyml:post_processing:roc_curve:sklearn","name":"ROC Curve Plot"},"type":"executionBuilder"}]},"clustering_tail":{"__path__":"ml/clustering_tail","application":{"name":"python","version":"3.10.13"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Machine Learning","units":[{"attributes":{"enableRender":true},"config":{"execName":"python","flavorName":"pyml:setup_variables_packages","name":"Setup Variables and Packages"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:read_csv:pandas","name":"Data Input"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:train_test_split:sklearn","name":"Train Test Split"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:pre_processing:standardization:sklearn","name":"Data Standardize"},"type":"executionBuilder"},{"attributes":{"results":[{"name":"workflow:pyml_predict"}],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"]},"config":{"execName":"python","flavorName":"pyml:model:k_means_clustering:sklearn","name":"Model Train and Predict"},"type":"executionBuilder"},{"attributes":{"postProcessors":[{"name":"remove_virtual_environment"}],"results":[{"name":"file_content"},{"name":"file_content"},{"name":"file_content"}],"tags":["remove-all-results"]},"config":{"execName":"python","flavorName":"pyml:post_processing:pca_2d_clusters:matplotlib","name":"2D PCA Clusters Plot"},"type":"executionBuilder"}]},"regression_tail":{"__path__":"ml/regression_tail","application":{"name":"python","version":"3.10.13"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Machine Learning","units":[{"attributes":{"enableRender":true},"config":{"execName":"python","flavorName":"pyml:setup_variables_packages","name":"Setup Variables and Packages"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:read_csv:pandas","name":"Data Input"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:data_input:train_test_split:sklearn","name":"Train Test Split"},"type":"executionBuilder"},{"config":{"execName":"python","flavorName":"pyml:pre_processing:standardization:sklearn","name":"Data Standardize"},"type":"executionBuilder"},{"attributes":{"results":[{"name":"workflow:pyml_predict"}],"tags":["remove-all-results","creates-predictions-csv-during-predict-phase"]},"config":{"execName":"python","flavorName":"pyml:model:multilayer_perceptron:sklearn","name":"Model Train and Predict"},"type":"executionBuilder"},{"attributes":{"postProcessors":[{"name":"remove_virtual_environment"}],"results":[{"name":"file_content"}],"tags":["remove-all-results"]},"config":{"execName":"python","flavorName":"pyml:post_processing:parity_plot:matplotlib","name":"Parity Plot"},"type":"executionBuilder"}]},"train_head":{"__path__":"ml/train_head","application":{"name":"python","version":"3.10.13"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Set Up the Job","units":[{"config":{"flowchartId":"head-set-predict-status","name":"Set Workflow Mode","operand":"IS_WORKFLOW_RUNNING_TO_PREDICT","tags":["pyml:workflow-type-setter"],"value":"False"},"type":"assignment"},{"config":{"enableRender":true,"flowchartId":"head-fetch-training-data","input":[{"type":"object_storage","basename":"{{DATASET_BASENAME}}","objectData":{"CONTAINER":"","NAME":"{{DATASET_FILEPATH}}","PROVIDER":"","REGION":""}}],"name":"Fetch Dataset","source":"object_storage"},"type":"io"},{"config":{"else":"end-of-ml-train-head","flowchartId":"head-branch-on-predict-status","input":[{"name":"IS_WORKFLOW_RUNNING_TO_PREDICT","scope":"global"}],"name":"Train or Predict?","statement":"IS_WORKFLOW_RUNNING_TO_PREDICT","then":"head-fetch-trained-model"},"type":"condition"},{"config":{"enableRender":true,"flowchartId":"head-fetch-trained-model","input":[{"type":"object_storage","basename":"","objectData":{"CONTAINER":"","NAME":"","PROVIDER":"","REGION":""}}],"name":"Fetch Trained Model as file","source":"object_storage","tags":["set-io-unit-filenames"]},"type":"io"},{"config":{"flowchartId":"end-of-ml-train-head","name":"End Setup","operand":"IS_SETUP_COMPLETE","value":"True"},"type":"assignment"}]},"python_script":{"__path__":"python_script","application":{"name":"python","version":"3.10.13"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Python Script","units":[{"config":{"execName":"python","flavorName":"hello_world","name":"python"},"type":"executionBuilder"}]}},"shell":{"batch_espresso_pwscf":{"__path__":"batch_espresso_pwscf","application":{"name":"shell","version":"5.1.8"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Shell Batch Job (Espresso PWSCF)","units":[{"config":{"execName":"sh","flavorName":"job_espresso_pw_scf","name":"shell"},"type":"executionBuilder"}]},"hello_world":{"__path__":"hello_world","application":{"name":"shell","version":"5.1.8"},"method":{"name":"UnknownMethod"},"model":{"name":"UnknownModel"},"name":"Shell Hello World","units":[{"config":{"execName":"sh","flavorName":"hello_world","name":"shell"},"type":"executionBuilder"}]}},"vasp":{"band_gap":{"__path__":"band_gap","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Band Gap","units":[{"config":{"execName":"vasp","flavorName":"vasp","name":"vasp"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"execName":"vasp","flavorName":"vasp_nscf","name":"vasp_nscf"},"type":"executionBuilder"}]},"band_structure":{"__path__":"band_structure","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Band Structure","units":[{"config":{"execName":"vasp","flavorName":"vasp","name":"vasp"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"execName":"vasp","flavorName":"vasp_bands","name":"vasp_bands"},"type":"executionBuilder"}]},"band_structure_dos":{"__path__":"band_structure_dos","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Band Structure + Density of States","units":[{"config":{"execName":"vasp","flavorName":"vasp","name":"vasp"},"functions":{"addResults":[{"name":"density_of_states"}],"head":true},"type":"executionBuilder"},{"config":{"execName":"vasp","flavorName":"vasp_bands","name":"vasp_bands"},"type":"executionBuilder"}]},"dos":{"__path__":"dos","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Density of States","units":[{"config":{"execName":"vasp","flavorName":"vasp","name":"vasp"},"functions":{"addResults":[{"name":"density_of_states"}],"head":true},"type":"executionBuilder"}]},"fixed_cell_relaxation":{"__path__":"fixed_cell_relaxation","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Fixed-cell Relaxation","units":[{"config":{"execName":"vasp","flavorName":"vasp_relax","name":"vasp_relax"},"functions":{"head":true},"type":"executionBuilder"}]},"initial_final_total_energies":{"__path__":"initial_final_total_energies","application":{"name":"vasp","version":"5.4.4"},"config":{"isMultiMaterial":true,"functions":{"setDefaultCompute":null}},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Initial/Final Total Energies","units":[{"config":{"execName":"vasp","flavorName":"vasp_neb_initial","name":"vasp_neb_initial"},"functions":{"head":true},"type":"executionBuilder"},{"config":{"execName":"vasp","flavorName":"vasp_neb_final","name":"vasp_neb_final"},"type":"executionBuilder"}]},"kpoint_convergence":{"__path__":"kpoint_convergence","name":"K-point Convergence","application":{"name":"vasp","version":"5.4.4"},"model":{"name":"DFTModel"},"method":{"name":"PseudopotentialMethod"},"units":[{"config":{"name":"Init tolerance","flowchartId":"init-tolerance","operand":"TOL","value":0.00001},"type":"assignment"},{"config":{"name":"Init increment","flowchartId":"init-increment","operand":"INC","value":1},"type":"assignment"},{"config":{"name":"Init result","flowchartId":"init-result","operand":"PREV_RESULT","value":0},"type":"assignment"},{"config":{"name":"Init parameter","flowchartId":"init-parameter","operand":"PARAMETER","value":1},"type":"assignment"},{"config":{"name":"vasp_kpt_conv","flowchartId":"vasp-kpoint-convergence","execName":"vasp","flavorName":"vasp_kpt_conv"},"type":"executionBuilder"},{"config":{"name":"store result","flowchartId":"store-result","operand":"RESULT","value":"total_energy","input":[{"name":"total_energy","scope":"vasp-kpoint-convergence"}]},"type":"assignment"},{"config":{"name":"check convergence","flowchartId":"check-convergence","statement":"abs((PREV_RESULT-RESULT)/RESULT) < TOL","maxOccurrences":50,"then":"convergence-is-reached","else":"update-result"},"type":"condition"},{"config":{"name":"update result","flowchartId":"update-result","operand":"PREV_RESULT","value":"RESULT","input":[{"name":"RESULT","scope":"global"}]},"type":"assignment"},{"config":{"name":"increment parameter","flowchartId":"increment-parameter","operand":"PREV_RESULT","value":"PARAMETER+INC","input":[{"name":"INC","scope":"global"},{"name":"PARAMETER","scope":"global"}],"next":"vasp-kpoint-convergence"},"type":"assignment"},{"config":{"name":"exit","flowchartId":"convergence-is-reached","operand":"PARAMETER","value":"PARAMETER","input":[{"name":"PARAMETER","scope":"global"}]},"type":"assignment"}]},"neb_subworkflow":{"__path__":"neb_subworkflow","application":{"name":"vasp","version":"5.4.4"},"config":{"isMultiMaterial":true},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Nudged Elastic Band (NEB)","units":[{"config":{"execName":"vasp","flavorName":"vasp_neb","name":"vasp_neb"},"type":"executionBuilder"}]},"prepare_images":{"__path__":"prepare_images","application":{"name":"shell","version":"5.1.8"},"config":{"isMultiMaterial":true},"method":{"name":"Method"},"model":{"name":"Model"},"name":"Prepare Directories","units":[{"config":{"execName":"sh","flavorName":"bash_vasp_prepare_neb_images","name":"prepare-neb-images"},"type":"executionBuilder"}]},"recalculate_bands":{"__path__":"recalculate_bands","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Recalculate Bands","units":[{"config":{"execName":"vasp","flavorName":"vasp_bands","name":"vasp_bands"},"functions":{"head":true},"type":"executionBuilder"}]},"surface_energy":{"__path__":"surface_energy","application":{"name":"vasp","version":"5.4.4"},"dynamicSubworkflow":{"name":"surfaceEnergy"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Surface Energy","units":[{"config":{"execName":"vasp","flavorName":"vasp_symprec","name":"vasp_symprec"},"functions":{"head":true},"type":"executionBuilder"}]},"total_energy":{"__path__":"total_energy","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Total Energy","units":[{"config":{"execName":"vasp","flavorName":"vasp","name":"vasp"},"functions":{"head":true},"type":"executionBuilder"}]},"variable_cell_relaxation":{"__path__":"variable_cell_relaxation","application":{"name":"vasp","version":"5.4.4"},"config":{"systemName":"vasp-variable-cell-relaxation"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Variable-cell Relaxation","units":[{"config":{"execName":"vasp","flavorName":"vasp_vc_relax","name":"vasp_vc_relax"},"functions":{"head":true},"type":"executionBuilder"}],"tags":["variable-cell_relaxation"]},"zero_point_energy":{"__path__":"zero_point_energy","application":{"name":"vasp","version":"5.4.4"},"method":{"name":"PseudopotentialMethod"},"model":{"name":"DFTModel"},"name":"Zero Point Energy","units":[{"config":{"execName":"vasp","flavorName":"vasp_zpe","name":"vasp_zpe"},"functions":{"head":true},"type":"executionBuilder"}]}}}} diff --git a/dist/js/ui/methodTree.json b/dist/js/ui/methodTree.json index e37e7408..5167eb82 100644 --- a/dist/js/ui/methodTree.json +++ b/dist/js/ui/methodTree.json @@ -1 +1 @@ -{"path":"/","data":null,"children":[{"path":"/linalg","data":{"key":"tier1","value":"linalg","name":"Linear Algebra"},"children":[{"path":"/linalg/diag","data":{"key":"tier2","value":"diag","name":"Diagonalization"},"children":[{"path":"/linalg/diag/davidson","data":{"key":"type","value":"davidson","name":"Davidson Diagonalization"}}]}]},{"path":"/qm","data":{"key":"tier1","value":"qm","name":"Quantum-Mechanical"},"children":[{"path":"/qm/wf","data":{"key":"tier2","value":"wf","name":"Wave Function"},"children":[{"path":"/qm/wf/ao","data":{"key":"type","value":"ao","name":"Atomic Orbital"},"children":[{"path":"/qm/wf/ao/pople","data":{"key":"subtype","value":"pople","name":"Pople Basis"},"staticOptions":[{"key":"basisSlug","values":["3-21G","6-31G","6-311G"]}]}]},{"path":"/qm/wf/pw","data":{"key":"type","value":"pw","name":"Plane Wave"}},{"path":"/qm/wf/psp","data":{"key":"type","value":"psp","name":"Pseudopotential"},"children":[{"path":"/qm/wf/psp/us","data":{"key":"subtype","value":"us","name":"Ultra-Soft"}},{"path":"/qm/wf/psp/nc","data":{"key":"subtype","value":"nc","name":"Norm-conserving"}},{"path":"/qm/wf/psp/nc-fr","data":{"key":"subtype","value":"nc-fr","name":"Norm-conserving Fully-relativistic"}},{"path":"/qm/wf/psp/paw","data":{"key":"subtype","value":"paw","name":"Projector-Augmented Wave"}}]},{"path":"/qm/wf/smearing","data":{"key":"type","value":"smearing","name":"Occupation Number Smearing"},"children":[{"path":"/qm/wf/smearing/gaussian","data":{"key":"subtype","value":"gaussian","name":"Gaussian"}},{"path":"/qm/wf/smearing/methfessel-paxton","data":{"key":"subtype","value":"methfessel-paxton","name":"Methfessel-Paxton"}}]},{"path":"/qm/wf/tetrahedron","data":{"key":"type","value":"tetrahedron","name":"Tetrahedron Method"},"children":[{"path":"/qm/wf/tetrahedron/linear","data":{"key":"subtype","value":"linear","name":"Linear"}},{"path":"/qm/wf/tetrahedron/optimized","data":{"key":"subtype","value":"optimized","name":"Optimized (Kawamura)"}},{"path":"/qm/wf/tetrahedron/bloechl","data":{"key":"subtype","value":"bloechl","name":"Bloechl"}}]}]}]}]} +{ "path": "/", "data": null, "children": [{ "path": "/linalg", "data": { "key": "tier1", "value": "linalg", "name": "Linear Algebra" }, "children": [{ "path": "/linalg/diag", "data": { "key": "tier2", "value": "diag", "name": "Diagonalization" }, "children": [{ "path": "/linalg/diag/davidson", "data": { "key": "type", "value": "davidson", "name": "Davidson Diagonalization" } }] }] }, { "path": "/qm", "data": { "key": "tier1", "value": "qm", "name": "Quantum-Mechanical" }, "children": [{ "path": "/qm/wf", "data": { "key": "tier2", "value": "wf", "name": "Wave Function" }, "children": [{ "path": "/qm/wf/ao", "data": { "key": "type", "value": "ao", "name": "Atomic Orbital" }, "children": [{ "path": "/qm/wf/ao/pople", "data": { "key": "subtype", "value": "pople", "name": "Pople Basis" }, "staticOptions": [{ "key": "basisSlug", "values": ["3-21G", "6-31G", "6-311G"] }] }] }, { "path": "/qm/wf/pw", "data": { "key": "type", "value": "pw", "name": "Plane Wave" } }, { "path": "/qm/wf/psp", "data": { "key": "type", "value": "psp", "name": "Pseudopotential" }, "children": [{ "path": "/qm/wf/psp/us", "data": { "key": "subtype", "value": "us", "name": "Ultra-Soft" } }, { "path": "/qm/wf/psp/nc", "data": { "key": "subtype", "value": "nc", "name": "Norm-conserving" } }, { "path": "/qm/wf/psp/nc-fr", "data": { "key": "subtype", "value": "nc-fr", "name": "Norm-conserving Fully-relativistic" } }, { "path": "/qm/wf/psp/paw", "data": { "key": "subtype", "value": "paw", "name": "Projector-Augmented Wave" } }] }, { "path": "/qm/wf/smearing", "data": { "key": "type", "value": "smearing", "name": "Occupation Number Smearing" }, "children": [{ "path": "/qm/wf/smearing/gaussian", "data": { "key": "subtype", "value": "gaussian", "name": "Gaussian" } }, { "path": "/qm/wf/smearing/methfessel-paxton", "data": { "key": "subtype", "value": "methfessel-paxton", "name": "Methfessel-Paxton" } }] }, { "path": "/qm/wf/tetrahedron", "data": { "key": "type", "value": "tetrahedron", "name": "Tetrahedron Method" }, "children": [{ "path": "/qm/wf/tetrahedron/linear", "data": { "key": "subtype", "value": "linear", "name": "Linear" } }, { "path": "/qm/wf/tetrahedron/optimized", "data": { "key": "subtype", "value": "optimized", "name": "Optimized (Kawamura)" } }, { "path": "/qm/wf/tetrahedron/bloechl", "data": { "key": "subtype", "value": "bloechl", "name": "Bloechl" } }] }] }] }] } diff --git a/dist/js/ui/modelTree.json b/dist/js/ui/modelTree.json index ca31523b..d728d9e1 100644 --- a/dist/js/ui/modelTree.json +++ b/dist/js/ui/modelTree.json @@ -1 +1 @@ -{"path":"/","data":null,"children":[{"path":"/pb","data":{"key":"tier1","value":"pb","name":"Physics-based"},"children":[{"path":"/pb/qm","data":{"key":"tier2","value":"qm","name":"Quantum-mechanical"},"children":[{"path":"/pb/qm/dft","data":{"key":"tier3","value":"dft","name":"Density Functional Theory"},"children":[{"path":"/pb/qm/dft/ksdft","data":{"key":"type","value":"ksdft","name":"Kohn-Sham DFT"},"children":[{"path":"/pb/qm/dft/ksdft/lda","data":{"key":"subtype","value":"lda","name":"LDA"},"staticOptions":[{"key":"functional","values":["pz"],"namesMap":{"pz":"PZ"}}]},{"path":"/pb/qm/dft/ksdft/gga","data":{"key":"subtype","value":"gga","name":"GGA"},"staticOptions":[{"key":"functional","values":["pbe","pbesol"],"namesMap":{"pbe":"PBE","pbesol":"PBESOL"}}]},{"path":"/pb/qm/dft/ksdft/hybrid","data":{"key":"subtype","value":"hybrid","name":"Hybrid Functional"},"staticOptions":[{"key":"functional","values":["hse06","b3lyp"],"namesMap":{"hse06":"HSE06","b3lyp":"B3LYP"}}]}]}]}]}]}]} +{ "path": "/", "data": null, "children": [{ "path": "/pb", "data": { "key": "tier1", "value": "pb", "name": "Physics-based" }, "children": [{ "path": "/pb/qm", "data": { "key": "tier2", "value": "qm", "name": "Quantum-mechanical" }, "children": [{ "path": "/pb/qm/dft", "data": { "key": "tier3", "value": "dft", "name": "Density Functional Theory" }, "children": [{ "path": "/pb/qm/dft/ksdft", "data": { "key": "type", "value": "ksdft", "name": "Kohn-Sham DFT" }, "children": [{ "path": "/pb/qm/dft/ksdft/lda", "data": { "key": "subtype", "value": "lda", "name": "LDA" }, "staticOptions": [{ "key": "functional", "values": ["pz"], "namesMap": { "pz": "PZ" } }] }, { "path": "/pb/qm/dft/ksdft/gga", "data": { "key": "subtype", "value": "gga", "name": "GGA" }, "staticOptions": [{ "key": "functional", "values": ["pbe", "pbesol"], "namesMap": { "pbe": "PBE", "pbesol": "PBESOL" } }] }, { "path": "/pb/qm/dft/ksdft/hybrid", "data": { "key": "subtype", "value": "hybrid", "name": "Hybrid Functional" }, "staticOptions": [{ "key": "functional", "values": ["hse06", "b3lyp"], "namesMap": { "hse06": "HSE06", "b3lyp": "B3LYP" } }] }] }] }] }] }] } diff --git a/dist/js/ui/schemas.json b/dist/js/ui/schemas.json index 1a4e6904..33e9895f 100644 --- a/dist/js/ui/schemas.json +++ b/dist/js/ui/schemas.json @@ -1 +1 @@ -{"categories":{"tier1":{"ui:title":"Tier 1"},"tier2":{"ui:title":"Tier 2"},"tier3":{"ui:title":"Tier 3"},"type":{"ui:title":"Type"},"subtype":{"ui:title":"Subtype"}},"modelParameters":{"functional":{"ui:title":"Functional"},"dispersionCorrection":{"ui:title":"Dispersion Correction"},"spinOrbitCoupling":{"ui:title":"Spin-Orbit Coupling"},"hubbardType":{"ui:title":"Hubbard Term"},"spinPolarization":{"ui:title":"Spin-Polarization"}},"methodParameters":{"basisSlug":{"ui:title":"Basis Set"}}} +{ "categories": { "tier1": { "ui:title": "Tier 1" }, "tier2": { "ui:title": "Tier 2" }, "tier3": { "ui:title": "Tier 3" }, "type": { "ui:title": "Type" }, "subtype": { "ui:title": "Subtype" } }, "modelParameters": { "functional": { "ui:title": "Functional" }, "dispersionCorrection": { "ui:title": "Dispersion Correction" }, "spinOrbitCoupling": { "ui:title": "Spin-Orbit Coupling" }, "hubbardType": { "ui:title": "Hubbard Term" }, "spinPolarization": { "ui:title": "Spin-Polarization" } }, "methodParameters": { "basisSlug": { "ui:title": "Basis Set" } } } From 225ceff8fbf8f5e810eddceee9deadc6e48dadd6 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Mon, 23 Mar 2026 15:20:12 +0200 Subject: [PATCH 09/14] chore: handle missing of default flavor --- dist/js/application.d.ts | 1218 +++++++++++++++++++------------------- dist/js/application.js | 2 +- src/js/application.ts | 7 +- 3 files changed, 614 insertions(+), 613 deletions(-) diff --git a/dist/js/application.d.ts b/dist/js/application.d.ts index 557eb7a0..9d4a1007 100644 --- a/dist/js/application.d.ts +++ b/dist/js/application.d.ts @@ -85,297 +85,301 @@ export declare class ApplicationStandata extends Standata { getAllAppTree(): { espresso: { "abcoeff_to_eps.x": { + monitors: { + name: string; + }[]; + results: never[]; flavors: { abcoeff_to_eps_simple: { - applicationName: string; - executableName: string; input: { name: string; }[]; + results: never[]; monitors: { name: string; }[]; - results: never[]; + applicationName: string; + executableName: string; }; }; + }; + "average.x": { monitors: { name: string; }[]; - results: never[]; - }; - "average.x": { + results: { + name: string; + }[]; flavors: { average: { - applicationName: string; - executableName: string; input: { name: string; }[]; + results: never[]; monitors: { name: string; }[]; - results: never[]; - }; - average_potential: { applicationName: string; executableName: string; + }; + average_potential: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; + applicationName: string; + executableName: string; }; }; + }; + "bands.x": { monitors: { name: string; }[]; results: { name: string; }[]; - }; - "bands.x": { flavors: { bands: { - applicationName: string; - executableName: string; input: { name: string; }[]; monitors: { name: string; }[]; - }; - bands_spin_dn: { applicationName: string; executableName: string; + }; + bands_spin_up: { input: { name: string; }[]; monitors: { name: string; }[]; - }; - bands_spin_up: { applicationName: string; executableName: string; + }; + bands_spin_dn: { input: { name: string; }[]; monitors: { name: string; }[]; + applicationName: string; + executableName: string; }; }; + }; + "cp.x": { monitors: { name: string; }[]; - results: { - name: string; - }[]; - }; - "cp.x": { + results: never[]; flavors: { cp: { - applicationName: string; - executableName: string; + isDefault: boolean; input: { name: string; }[]; - isDefault: boolean; + results: never[]; monitors: { name: string; }[]; - results: never[]; - }; - cp_wf: { applicationName: string; executableName: string; + }; + cp_wf: { input: { name: string; }[]; + results: never[]; monitors: { name: string; }[]; - results: never[]; + applicationName: string; + executableName: string; }; }; + }; + "dos.x": { monitors: { name: string; }[]; - results: never[]; - }; - "dos.x": { + results: { + name: string; + }[]; flavors: { dos: { - applicationName: string; - executableName: string; input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; + applicationName: string; + executableName: string; }; }; + }; + "dynmat.x": { monitors: { name: string; }[]; - results: { - name: string; - }[]; - }; - "dynmat.x": { + results: never[]; flavors: { dynmat: { - applicationName: string; - executableName: string; input: { name: string; }[]; + results: never[]; monitors: { name: string; }[]; - results: never[]; + applicationName: string; + executableName: string; }; }; + }; + "epsilon.x": { monitors: { name: string; }[]; - results: never[]; - }; - "epsilon.x": { + results: { + name: string; + }[]; flavors: { dielectric_tensor: { - applicationName: string; - executableName: string; input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; + applicationName: string; + executableName: string; }; }; + }; + "gw.x": { monitors: { name: string; }[]; results: { name: string; }[]; - }; - "gw.x": { flavors: { - gw_bands_full_frequency: { - applicationName: string; - executableName: string; + gw_bands_plasmon_pole: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - gw_bands_plasmon_pole: { applicationName: string; executableName: string; + }; + gw_bands_full_frequency: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; + applicationName: string; + executableName: string; }; }; + }; + "gww.x": { monitors: { name: string; }[]; - results: { - name: string; - }[]; - }; - "gww.x": { + results: never[]; flavors: { gww_simple: { - applicationName: string; - executableName: string; input: { name: string; }[]; + results: never[]; monitors: { name: string; }[]; - results: never[]; + applicationName: string; + executableName: string; }; }; + }; + "head.x": { monitors: { name: string; }[]; results: never[]; - }; - "head.x": { flavors: { head_simple: { - applicationName: string; - executableName: string; input: { name: string; }[]; + results: never[]; monitors: { name: string; }[]; - results: never[]; + applicationName: string; + executableName: string; }; }; + }; + "hp.x": { monitors: { name: string; }[]; - results: never[]; - }; - "hp.x": { + results: { + name: string; + }[]; flavors: { hp: { - applicationName: string; - executableName: string; input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; + applicationName: string; + executableName: string; }; }; + supportedApplicationVersions: string[]; + }; + "matdyn.x": { monitors: { name: string; }[]; results: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - "matdyn.x": { flavors: { matdyn_grid: { - applicationName: string; - executableName: string; input: { name: string; }[]; @@ -385,10 +389,10 @@ export declare class ApplicationStandata extends Standata { results: { name: string; }[]; - }; - matdyn_path: { applicationName: string; executableName: string; + }; + matdyn_path: { input: { name: string; }[]; @@ -398,683 +402,688 @@ export declare class ApplicationStandata extends Standata { results: { name: string; }[]; + applicationName: string; + executableName: string; }; }; + }; + "neb.x": { monitors: { name: string; }[]; results: { name: string; }[]; - }; - "neb.x": { flavors: { neb: { - applicationName: string; - executableName: string; + isMultiMaterial: boolean; input: { name: string; }[]; - isMultiMaterial: boolean; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; + applicationName: string; + executableName: string; }; }; + }; + "ph.x": { monitors: { name: string; }[]; results: { name: string; }[]; - }; - "ph.x": { flavors: { - ph_gamma: { - applicationName: string; - executableName: string; + ph_path: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - ph_grid: { applicationName: string; executableName: string; + }; + ph_grid: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - ph_grid_restart: { applicationName: string; executableName: string; + }; + ph_gamma: { input: { name: string; }[]; + results: { + name: string; + }[]; monitors: { name: string; }[]; - results: never[]; - }; - ph_init_qpoints: { applicationName: string; executableName: string; + }; + ph_init_qpoints: { input: { name: string; }[]; + results: never[]; monitors: { name: string; }[]; - results: never[]; - }; - ph_path: { applicationName: string; executableName: string; + }; + ph_grid_restart: { input: { name: string; }[]; + results: never[]; monitors: { name: string; }[]; - results: { - name: string; - }[]; - }; - ph_single_irr_qpt: { applicationName: string; executableName: string; + }; + ph_single_irr_qpt: { input: { name: string; }[]; + results: never[]; monitors: { name: string; }[]; - results: never[]; + applicationName: string; + executableName: string; }; }; + }; + "pp.x": { monitors: { name: string; }[]; - results: { - name: string; - }[]; - }; - "pp.x": { + results: never[]; flavors: { pp_density: { - applicationName: string; - executableName: string; input: { name: string; }[]; + results: never[]; monitors: { name: string; }[]; - results: never[]; - }; - pp_electrostatic_potential: { applicationName: string; executableName: string; + }; + pp_electrostatic_potential: { input: { name: string; }[]; + results: never[]; monitors: { name: string; }[]; - results: never[]; - }; - pp_wfn: { applicationName: string; executableName: string; + }; + pp_wfn: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; + applicationName: string; + executableName: string; }; }; + }; + "projwfc.x": { monitors: { name: string; }[]; - results: never[]; - }; - "projwfc.x": { + results: { + name: string; + }[]; flavors: { projwfc: { - applicationName: string; - executableName: string; input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; + applicationName: string; + executableName: string; }; }; + }; + "pw.x": { + isDefault: boolean; + hasAdvancedComputeOptions: boolean; + postProcessors: { + name: string; + }[]; monitors: { name: string; }[]; results: { name: string; }[]; - }; - "pw.x": { flavors: { - pw_bands: { - applicationName: string; - executableName: string; + pw_scf: { + isDefault: boolean; input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - "pw_bands_dft_u+j_magn": { applicationName: string; executableName: string; + }; + pw_scf_bands_hse: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - "pw_bands_dft_u+v_magn": { applicationName: string; executableName: string; + }; + pw_scf_hse: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - pw_bands_dft_u_magn: { applicationName: string; executableName: string; + }; + pw_scf_kpt_conv: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - pw_bands_dft_u_magn_legacy: { applicationName: string; executableName: string; + }; + pw_scf_dft_u: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - pw_bands_dft_u_soc: { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + "pw_scf_dft_u+v": { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - pw_bands_dft_u_soc_legacy: { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + "pw_scf_dft_u+j": { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - pw_bands_magn: { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + pw_scf_dft_u_legacy: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - pw_bands_soc: { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + pw_scf_magn: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - pw_esm: { applicationName: string; executableName: string; + }; + pw_scf_soc: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - pw_esm_relax: { applicationName: string; executableName: string; + }; + pw_scf_dft_u_magn: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - pw_md: { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + pw_scf_dft_u_soc: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - pw_nscf: { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + "pw_scf_dft_u+v_magn": { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - "pw_nscf_dft_u+j_magn": { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + "pw_scf_dft_u+j_magn": { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - "pw_nscf_dft_u+v_magn": { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + pw_scf_dft_u_magn_legacy: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - pw_nscf_dft_u_magn: { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + pw_scf_dft_u_soc_legacy: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - pw_nscf_dft_u_magn_legacy: { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + pw_esm: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - pw_nscf_dft_u_soc: { applicationName: string; executableName: string; + }; + pw_esm_relax: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - pw_nscf_dft_u_soc_legacy: { applicationName: string; executableName: string; + }; + pw_nscf: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - pw_nscf_magn: { applicationName: string; executableName: string; + }; + pw_nscf_magn: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - pw_nscf_soc: { applicationName: string; executableName: string; + }; + pw_nscf_soc: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - pw_relax: { applicationName: string; executableName: string; + }; + pw_nscf_dft_u_magn: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - pw_scf: { applicationName: string; executableName: string; - input: { - name: string; - }[]; - isDefault: boolean; - monitors: { + supportedApplicationVersions: string[]; + }; + "pw_nscf_dft_u+v_magn": { + input: { name: string; }[]; results: { name: string; }[]; - }; - pw_scf_bands_hse: { + monitors: { + name: string; + }[]; applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + "pw_nscf_dft_u+j_magn": { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - pw_scf_dft_u: { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + pw_nscf_dft_u_magn_legacy: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - "pw_scf_dft_u+j": { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + pw_nscf_dft_u_soc: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - "pw_scf_dft_u+j_magn": { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + pw_nscf_dft_u_soc_legacy: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - "pw_scf_dft_u+v": { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + pw_bands: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - "pw_scf_dft_u+v_magn": { applicationName: string; executableName: string; + }; + pw_bands_magn: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - pw_scf_dft_u_legacy: { applicationName: string; executableName: string; + }; + pw_bands_soc: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - pw_scf_dft_u_magn: { applicationName: string; executableName: string; + }; + pw_bands_dft_u_magn: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - pw_scf_dft_u_magn_legacy: { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + "pw_bands_dft_u+v_magn": { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - pw_scf_dft_u_soc: { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + "pw_bands_dft_u+j_magn": { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - pw_scf_dft_u_soc_legacy: { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + pw_bands_dft_u_magn_legacy: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - supportedApplicationVersions: string[]; - }; - pw_scf_hse: { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + pw_bands_dft_u_soc: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - pw_scf_kpt_conv: { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + pw_bands_dft_u_soc_legacy: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - pw_scf_magn: { applicationName: string; executableName: string; + supportedApplicationVersions: string[]; + }; + pw_relax: { input: { name: string; }[]; @@ -1084,10 +1093,10 @@ export declare class ApplicationStandata extends Standata { results: { name: string; }[]; - }; - pw_scf_soc: { applicationName: string; executableName: string; + }; + "pw_vc-relax": { input: { name: string; }[]; @@ -1097,227 +1106,228 @@ export declare class ApplicationStandata extends Standata { results: { name: string; }[]; - }; - "pw_vc-relax": { applicationName: string; executableName: string; + }; + pw_md: { input: { name: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; + applicationName: string; + executableName: string; }; }; - hasAdvancedComputeOptions: boolean; - isDefault: boolean; + }; + "pw4gww.x": { monitors: { name: string; }[]; - postProcessors: { - name: string; - }[]; - results: { - name: string; - }[]; - }; - "pw4gww.x": { + results: never[]; flavors: { pw4gww_simple: { - applicationName: string; - executableName: string; input: { name: string; }[]; + results: never[]; monitors: { name: string; }[]; - results: never[]; + applicationName: string; + executableName: string; }; }; + }; + "q2r.x": { monitors: { name: string; }[]; results: never[]; - }; - "q2r.x": { flavors: { q2r: { - applicationName: string; - executableName: string; input: { name: string; }[]; + results: never[]; monitors: { name: string; }[]; - results: never[]; + applicationName: string; + executableName: string; }; }; + }; + "simple.x": { monitors: { name: string; }[]; results: never[]; - }; - "simple.x": { flavors: { simple: { - applicationName: string; - executableName: string; input: { name: string; }[]; + results: never[]; monitors: { name: string; }[]; - results: never[]; + applicationName: string; + executableName: string; }; }; + }; + "simple_bse.x": { monitors: { name: string; }[]; results: never[]; - }; - "simple_bse.x": { flavors: { simple_bse: { - applicationName: string; - executableName: string; input: { name: string; }[]; + results: never[]; monitors: { name: string; }[]; - results: never[]; + applicationName: string; + executableName: string; }; }; + }; + "simple_ip.x": { monitors: { name: string; }[]; results: never[]; - }; - "simple_ip.x": { flavors: { simple_ip: { - applicationName: string; - executableName: string; input: { name: string; }[]; + results: never[]; monitors: { name: string; }[]; - results: never[]; + applicationName: string; + executableName: string; }; }; - monitors: { - name: string; - }[]; - results: never[]; }; }; nwchem: { nwchem: { + isDefault: boolean; + hasAdvancedComputeOptions: boolean; + postProcessors: { + name: string; + }[]; + monitors: { + name: string; + }[]; + results: { + name: string; + }[]; flavors: { nwchem_total_energy: { - applicationName: string; - executableName: string; + isDefault: boolean; input: { name: string; }[]; - isDefault: boolean; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; + applicationName: string; + executableName: string; }; }; - hasAdvancedComputeOptions: boolean; + }; + }; + python: { + python: { isDefault: boolean; monitors: { name: string; }[]; - postProcessors: { - name: string; - }[]; results: { name: string; }[]; - }; - }; - python: { - python: { flavors: { - espresso_extract_kpoints: { - applicationName: string; - executableName: string; + hello_world: { + isDefault: boolean; input: ({ name: string; - templateName?: undefined; + templateName: string; } | { name: string; - templateName: string; + templateName?: undefined; })[]; monitors: { name: string; }[]; - }; - espresso_xml_get_qpt_irr: { applicationName: string; executableName: string; + }; + espresso_xml_get_qpt_irr: { input: { name: string; }[]; monitors: { name: string; }[]; - }; - "generic:post_processing:plot:matplotlib": { applicationName: string; executableName: string; - input: { + }; + espresso_extract_kpoints: { + input: ({ + name: string; + templateName?: undefined; + } | { name: string; templateName: string; - }[]; + })[]; monitors: { name: string; }[]; - }; - "generic:processing:find_extrema:scipy": { applicationName: string; executableName: string; + }; + plot_wavefunction: { input: { name: string; templateName: string; }[]; + results: { + name: string; + filetype: string; + basename: string; + }[]; monitors: { name: string; }[]; - }; - hello_world: { applicationName: string; executableName: string; - input: ({ + }; + "generic:post_processing:plot:matplotlib": { + input: { name: string; templateName: string; - } | { - name: string; - templateName?: undefined; - })[]; - isDefault: boolean; + }[]; monitors: { name: string; }[]; - }; - plot_wavefunction: { applicationName: string; executableName: string; + }; + "generic:processing:find_extrema:scipy": { input: { name: string; templateName: string; @@ -1325,15 +1335,10 @@ export declare class ApplicationStandata extends Standata { monitors: { name: string; }[]; - results: { - basename: string; - filetype: string; - name: string; - }[]; - }; - "pyml:custom": { applicationName: string; executableName: string; + }; + "pyml:setup_variables_packages": { input: { name: string; templateName: string; @@ -1341,10 +1346,10 @@ export declare class ApplicationStandata extends Standata { monitors: { name: string; }[]; - }; - "pyml:data_input:read_csv:pandas": { applicationName: string; executableName: string; + }; + "pyml:custom": { input: { name: string; templateName: string; @@ -1352,10 +1357,10 @@ export declare class ApplicationStandata extends Standata { monitors: { name: string; }[]; - }; - "pyml:data_input:train_test_split:sklearn": { applicationName: string; executableName: string; + }; + "pyml:data_input:read_csv:pandas": { input: { name: string; templateName: string; @@ -1363,10 +1368,10 @@ export declare class ApplicationStandata extends Standata { monitors: { name: string; }[]; - }; - "pyml:model:adaboosted_trees_regression:sklearn": { applicationName: string; executableName: string; + }; + "pyml:data_input:train_test_split:sklearn": { input: { name: string; templateName: string; @@ -1374,13 +1379,10 @@ export declare class ApplicationStandata extends Standata { monitors: { name: string; }[]; - results: { - name: string; - }[]; - }; - "pyml:model:bagged_trees_regression:sklearn": { applicationName: string; executableName: string; + }; + "pyml:pre_processing:min_max_scaler:sklearn": { input: { name: string; templateName: string; @@ -1388,13 +1390,10 @@ export declare class ApplicationStandata extends Standata { monitors: { name: string; }[]; - results: { - name: string; - }[]; - }; - "pyml:model:extreme_gradboosted_trees_classification:sklearn": { applicationName: string; executableName: string; + }; + "pyml:pre_processing:remove_duplicates:pandas": { input: { name: string; templateName: string; @@ -1402,13 +1401,10 @@ export declare class ApplicationStandata extends Standata { monitors: { name: string; }[]; - results: { - name: string; - }[]; - }; - "pyml:model:extreme_gradboosted_trees_regression:sklearn": { applicationName: string; executableName: string; + }; + "pyml:pre_processing:remove_missing:pandas": { input: { name: string; templateName: string; @@ -1416,13 +1412,10 @@ export declare class ApplicationStandata extends Standata { monitors: { name: string; }[]; - results: { - name: string; - }[]; - }; - "pyml:model:gradboosted_trees_classification:sklearn": { applicationName: string; executableName: string; + }; + "pyml:pre_processing:standardization:sklearn": { input: { name: string; templateName: string; @@ -1430,13 +1423,10 @@ export declare class ApplicationStandata extends Standata { monitors: { name: string; }[]; - results: { - name: string; - }[]; - }; - "pyml:model:gradboosted_trees_regression:sklearn": { applicationName: string; executableName: string; + }; + "pyml:model:adaboosted_trees_regression:sklearn": { input: { name: string; templateName: string; @@ -1447,203 +1437,224 @@ export declare class ApplicationStandata extends Standata { results: { name: string; }[]; - }; - "pyml:model:k_means_clustering:sklearn": { applicationName: string; executableName: string; + }; + "pyml:model:bagged_trees_regression:sklearn": { input: { name: string; templateName: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - "pyml:model:kernel_ridge_regression:sklearn": { applicationName: string; executableName: string; + }; + "pyml:model:gradboosted_trees_regression:sklearn": { input: { name: string; templateName: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - "pyml:model:lasso_regression:sklearn": { applicationName: string; executableName: string; + }; + "pyml:model:extreme_gradboosted_trees_regression:sklearn": { input: { name: string; templateName: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - "pyml:model:multilayer_perceptron:sklearn": { applicationName: string; executableName: string; + }; + "pyml:model:k_means_clustering:sklearn": { input: { name: string; templateName: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - "pyml:model:random_forest_classification:sklearn": { applicationName: string; executableName: string; + }; + "pyml:model:kernel_ridge_regression:sklearn": { input: { name: string; templateName: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - "pyml:model:random_forest_regression:sklearn": { applicationName: string; executableName: string; + }; + "pyml:model:lasso_regression:sklearn": { input: { name: string; templateName: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - "pyml:model:ridge_regression:sklearn": { applicationName: string; executableName: string; + }; + "pyml:model:multilayer_perceptron:sklearn": { input: { name: string; templateName: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - "pyml:post_processing:parity_plot:matplotlib": { applicationName: string; executableName: string; + }; + "pyml:model:random_forest_classification:sklearn": { input: { name: string; templateName: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - "pyml:post_processing:pca_2d_clusters:matplotlib": { applicationName: string; executableName: string; + }; + "pyml:model:gradboosted_trees_classification:sklearn": { input: { name: string; templateName: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - "pyml:post_processing:roc_curve:sklearn": { applicationName: string; executableName: string; + }; + "pyml:model:extreme_gradboosted_trees_classification:sklearn": { input: { name: string; templateName: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - "pyml:pre_processing:min_max_scaler:sklearn": { applicationName: string; executableName: string; + }; + "pyml:model:random_forest_regression:sklearn": { input: { name: string; templateName: string; }[]; + results: { + name: string; + }[]; monitors: { name: string; }[]; - }; - "pyml:pre_processing:remove_duplicates:pandas": { applicationName: string; executableName: string; + }; + "pyml:model:ridge_regression:sklearn": { input: { name: string; templateName: string; }[]; + results: { + name: string; + }[]; monitors: { name: string; }[]; - }; - "pyml:pre_processing:remove_missing:pandas": { applicationName: string; executableName: string; + }; + "pyml:post_processing:parity_plot:matplotlib": { input: { name: string; templateName: string; }[]; + results: { + name: string; + }[]; monitors: { name: string; }[]; - }; - "pyml:pre_processing:standardization:sklearn": { applicationName: string; executableName: string; + }; + "pyml:post_processing:pca_2d_clusters:matplotlib": { input: { name: string; templateName: string; }[]; + results: { + name: string; + }[]; monitors: { name: string; }[]; - }; - "pyml:setup_variables_packages": { applicationName: string; executableName: string; + }; + "pyml:post_processing:roc_curve:sklearn": { input: { name: string; templateName: string; }[]; + results: { + name: string; + }[]; monitors: { name: string; }[]; + applicationName: string; + executableName: string; }; }; + }; + }; + shell: { + sh: { isDefault: boolean; monitors: { name: string; @@ -1651,122 +1662,136 @@ export declare class ApplicationStandata extends Standata { results: { name: string; }[]; - }; - }; - shell: { - sh: { flavors: { - bash_vasp_prepare_neb_images: { - applicationName: string; - executableName: string; + hello_world: { + isDefault: boolean; input: { name: string; }[]; - isMultiMaterial: boolean; monitors: { name: string; }[]; - }; - espresso_collect_dynmat: { applicationName: string; executableName: string; + }; + job_espresso_pw_scf: { input: { name: string; }[]; monitors: { name: string; }[]; - }; - espresso_link_outdir_save: { applicationName: string; executableName: string; + }; + espresso_link_outdir_save: { input: { name: string; }[]; monitors: { name: string; }[]; - }; - hello_world: { applicationName: string; executableName: string; + }; + espresso_collect_dynmat: { input: { name: string; }[]; - isDefault: boolean; monitors: { name: string; }[]; - }; - job_espresso_pw_scf: { applicationName: string; executableName: string; + }; + bash_vasp_prepare_neb_images: { + isMultiMaterial: boolean; input: { name: string; }[]; monitors: { name: string; }[]; + applicationName: string; + executableName: string; }; }; + }; + }; + vasp: { + vasp: { isDefault: boolean; + postProcessors: { + name: string; + }[]; monitors: { name: string; }[]; results: { name: string; }[]; - }; - }; - vasp: { - vasp: { flavors: { vasp: { - applicationName: string; - executableName: string; + isDefault: boolean; input: { name: string; }[]; - isDefault: boolean; + results: { + name: string; + }[]; monitors: { name: string; }[]; + applicationName: string; + executableName: string; + }; + vasp_symprec: { + input: ({ + name: string; + templateName: string; + } | { + name: string; + templateName?: undefined; + })[]; results: { name: string; }[]; - }; - vasp_bands: { + monitors: { + name: string; + }[]; applicationName: string; executableName: string; + }; + vasp_bands: { input: { name: string; templateName: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - vasp_bands_hse: { applicationName: string; executableName: string; + }; + vasp_nscf: { input: { name: string; templateName: string; }[]; - isDefault: boolean; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - vasp_hse: { applicationName: string; executableName: string; + }; + vasp_hse: { + isDefault: boolean; input: ({ name: string; templateName: string; @@ -1774,128 +1799,138 @@ export declare class ApplicationStandata extends Standata { name: string; templateName?: undefined; })[]; - isDefault: boolean; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - vasp_kpt_conv: { applicationName: string; executableName: string; + }; + vasp_bands_hse: { + isDefault: boolean; input: { name: string; templateName: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - vasp_neb: { applicationName: string; executableName: string; + }; + vasp_nscf_hse: { + isDefault: boolean; input: { name: string; templateName: string; }[]; - isMultiMaterial: boolean; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - vasp_neb_final: { applicationName: string; executableName: string; - input: ({ + }; + vasp_relax: { + input: { name: string; templateName: string; - } | { + }[]; + results: { name: string; - templateName?: undefined; - })[]; - isMultiMaterial: boolean; + }[]; monitors: { name: string; }[]; - results: { + postProcessors: { name: string; }[]; - }; - vasp_neb_initial: { applicationName: string; executableName: string; - input: ({ + }; + vasp_vc_relax: { + input: { name: string; templateName: string; - } | { + }[]; + results: { name: string; - templateName?: undefined; - })[]; - isMultiMaterial: boolean; + }[]; monitors: { name: string; }[]; - results: { + postProcessors: { name: string; }[]; - }; - vasp_nscf: { applicationName: string; executableName: string; + }; + vasp_zpe: { input: { name: string; templateName: string; }[]; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - vasp_nscf_hse: { applicationName: string; executableName: string; + }; + vasp_kpt_conv: { input: { name: string; templateName: string; }[]; - isDefault: boolean; - monitors: { + results: { name: string; }[]; - results: { + monitors: { name: string; }[]; - }; - vasp_relax: { applicationName: string; executableName: string; + }; + vasp_vc_relax_conv: { input: { name: string; templateName: string; }[]; + results: { + name: string; + }[]; monitors: { name: string; }[]; - postProcessors: { + applicationName: string; + executableName: string; + }; + vasp_neb: { + isMultiMaterial: boolean; + input: { name: string; + templateName: string; }[]; results: { name: string; }[]; - }; - vasp_symprec: { + monitors: { + name: string; + }[]; applicationName: string; executableName: string; + }; + vasp_neb_initial: { + isMultiMaterial: boolean; input: ({ name: string; templateName: string; @@ -1903,69 +1938,34 @@ export declare class ApplicationStandata extends Standata { name: string; templateName?: undefined; })[]; - monitors: { - name: string; - }[]; results: { name: string; }[]; - }; - vasp_vc_relax: { - applicationName: string; - executableName: string; - input: { - name: string; - templateName: string; - }[]; monitors: { name: string; }[]; - postProcessors: { - name: string; - }[]; - results: { - name: string; - }[]; - }; - vasp_vc_relax_conv: { applicationName: string; executableName: string; - input: { + }; + vasp_neb_final: { + isMultiMaterial: boolean; + input: ({ name: string; templateName: string; - }[]; - monitors: { + } | { name: string; - }[]; + templateName?: undefined; + })[]; results: { name: string; }[]; - }; - vasp_zpe: { - applicationName: string; - executableName: string; - input: { - name: string; - templateName: string; - }[]; monitors: { name: string; }[]; - results: { - name: string; - }[]; + applicationName: string; + executableName: string; }; }; - isDefault: boolean; - monitors: { - name: string; - }[]; - postProcessors: { - name: string; - }[]; - results: { - name: string; - }[]; }; }; }; diff --git a/dist/js/application.js b/dist/js/application.js index 15cd9396..56ce50a0 100644 --- a/dist/js/application.js +++ b/dist/js/application.js @@ -174,7 +174,7 @@ class ApplicationStandata extends base_1.Standata { const { executable, flavors } = this.getExecutableByName(appName, execName); const flavor = flavors.find((value) => { return flavorName ? value.name === flavorName : value.isDefault; - }); + }) || flavors[0]; if (!flavor) { throw new Error(`Flavor ${flavorName || "default"} not found for executable ${execName} in application ${appName}`); } diff --git a/src/js/application.ts b/src/js/application.ts index a1f85a01..b69ed3de 100644 --- a/src/js/application.ts +++ b/src/js/application.ts @@ -262,9 +262,10 @@ export class ApplicationStandata extends Standata { } { const { executable, flavors } = this.getExecutableByName(appName, execName); - const flavor = flavors.find((value) => { - return flavorName ? value.name === flavorName : value.isDefault; - }); + const flavor = + flavors.find((value) => { + return flavorName ? value.name === flavorName : value.isDefault; + }) || flavors[0]; if (!flavor) { throw new Error( From 497cfe11fb9abdc3f3b6ab2f6bfa15d0cb9b0ea9 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Mon, 23 Mar 2026 17:57:43 +0200 Subject: [PATCH 10/14] chore: delete generate_espresso_fixtures.ts --- scripts/generate_espresso_fixtures.ts | 265 -------------------------- 1 file changed, 265 deletions(-) delete mode 100644 scripts/generate_espresso_fixtures.ts diff --git a/scripts/generate_espresso_fixtures.ts b/scripts/generate_espresso_fixtures.ts deleted file mode 100644 index 4fb5d9e8..00000000 --- a/scripts/generate_espresso_fixtures.ts +++ /dev/null @@ -1,265 +0,0 @@ -import * as fs from "fs"; -import * as nunjucks from "nunjucks"; -import * as path from "path"; -import { sprintf } from "sprintf-js"; - -// Base context data for testing -const BASE_CONTEXT = { - subworkflowContext: {}, - input: { - RESTART_MODE: "from_scratch", - IBRAV: 0, - NAT: 4, - NTYP: 2, - NTYP_WITH_LABELS: 2, - ATOMIC_SPECIES: [ - { - X: "Fe", - Mass_X: 55.845, - PseudoPot_X: "Fe.pbe-spn-rrkjus_psl.1.0.0.UPF", - }, - { - X: "O", - Mass_X: 15.999, - PseudoPot_X: "O.pbe-n-rrkjus_psl.1.0.0.UPF", - }, - ], - ATOMIC_SPECIES_WITH_LABELS: [ - { - X: "Fe", - Mass_X: 55.845, - PseudoPot_X: "Fe.pbe-spn-rrkjus_psl.1.0.0.UPF", - }, - { - X: "O", - Mass_X: 15.999, - PseudoPot_X: "O.pbe-n-rrkjus_psl.1.0.0.UPF", - }, - ], - ATOMIC_POSITIONS: [ - { - X: "Fe", - x: 0.0, - y: 0.0, - z: 0.0, - "if_pos(1)": 0, - "if_pos(2)": 1, - "if_pos(3)": 1, - }, - { - X: "Fe", - x: 0.5, - y: 0.5, - z: 0.5, - "if_pos(1)": 1, - "if_pos(2)": 1, - "if_pos(3)": 1, - }, - { - X: "O", - x: 0.25, - y: 0.25, - z: 0.25, - "if_pos(1)": 1, - "if_pos(2)": 1, - "if_pos(3)": 1, - }, - { - X: "O", - x: 0.75, - y: 0.75, - z: 0.75, - "if_pos(1)": 1, - "if_pos(2)": 1, - "if_pos(3)": 1, - }, - ], - CELL_PARAMETERS: { - v1: [5.0, 0.0, 0.0], - v2: [0.0, 5.0, 0.0], - v3: [0.0, 0.0, 5.0], - }, - }, - dynamics: { - numberOfSteps: 100, - timeStep: 0.1, - electronMass: 400.0, - temperature: 300.0, - }, - cutoffs: { - wavefunction: 50.0, - density: 200.0, - }, - JOB_WORK_DIR: "/tmp/test_job", - kgrid: { - dimensions: [4, 4, 4], - shifts: [0, 0, 0], - }, - kpath: [ - { coordinates: [0.0, 0.0, 0.0], steps: 20 }, - { coordinates: [0.5, 0.5, 0.5], steps: 20 }, - ], - collinearMagnetization: { - isTotalMagnetization: false, - startingMagnetization: [ - { index: 1, value: 0.5 }, - { index: 2, value: 0.0 }, - ], - }, - nonCollinearMagnetization: { - isStartingMagnetization: false, - isConstrainedMagnetization: false, - isFixedMagnetization: false, - isExistingChargeDensity: false, - isArbitrarySpinDirection: false, - }, - hubbard_u: [{ atomicSpecies: "Fe", atomicOrbital: "3d", hubbardUValue: 4.0 }], - hubbard_legacy: [{ atomicSpeciesIndex: 1, hubbardUValue: 4.0 }], - hubbard_v: [{ atomicSpecies: "Fe", atomicOrbital: "3d", hubbardVValue: 2.0 }], - hubbard_j: [{ atomicSpecies: "Fe", atomicOrbital: "3d", hubbardJValue: 1.0 }], -}; - -// Context for neb.j2.in (needs INTERMEDIATE_IMAGES) -const NEB_CONTEXT = { - ...BASE_CONTEXT, - input: { - ...BASE_CONTEXT.input, - INTERMEDIATE_IMAGES: [ - [ - { - X: "Fe", - x: 0.1, - y: 0.1, - z: 0.1, - "if_pos(1)": 1, - "if_pos(2)": 1, - "if_pos(3)": 1, - }, - { - X: "Fe", - x: 0.3, - y: 0.3, - z: 0.3, - "if_pos(1)": 1, - "if_pos(2)": 1, - "if_pos(3)": 1, - }, - ], - ], - FIRST_IMAGE: BASE_CONTEXT.input.ATOMIC_POSITIONS, - LAST_IMAGE: BASE_CONTEXT.input.ATOMIC_POSITIONS, - }, - neb: { - nImages: 1, - }, -}; - -/** - * Set up nunjucks environment with custom filters - */ -function setupNunjucksEnvironment(): nunjucks.Environment { - const templatePath = path.join( - __dirname, - "../assets/applications/input_files_templates/espresso", - ); - const env = new nunjucks.Environment(new nunjucks.FileSystemLoader(templatePath)); - - // Add custom filter for raw blocks (for JOB_WORK_DIR) - env.addFilter("raw", (str: string) => { - return str; - }); - - // Add custom filter for sprintf-style formatting - // eslint-disable-next-line @typescript-eslint/no-explicit-any - env.addFilter("sprintf", (value: any, format: string) => { - return sprintf(format, value); - }); - - return env; -} - -/** - * Normalize template output for comparison - * - Removes trailing whitespace from each line - * - Normalizes line endings for cross-platform compatibility - */ -function normalizeOutput(output: string): string { - return output - .split("\n") - .map((line) => line.replace(/\s+$/, "")) - .join("\n") - .replace(/\r\n/g, "\n"); -} - -/** - * Get context for a specific template - */ -function getContextForTemplate(templateName: string): any { - if (templateName === "neb.j2.in") { - return NEB_CONTEXT; - } - return BASE_CONTEXT; -} - -/** - * Generate fixtures for all templates - */ -function generateFixtures() { - const env = setupNunjucksEnvironment(); - const templateDir = path.join( - __dirname, - "../assets/applications/input_files_templates/espresso", - ); - const fixtureDir = path.join(__dirname, "../tests/js/fixtures/espresso_templates"); - - // Ensure fixture directory exists - if (!fs.existsSync(fixtureDir)) { - fs.mkdirSync(fixtureDir, { recursive: true }); - } - - // Get all template files - const templateFiles = fs.readdirSync(templateDir).filter((file) => file.endsWith(".j2.in")); - - // Check which templates use ATOMIC_POSITIONS, ATOMIC_SPECIES, or CELL_PARAMETERS - const templatesToTest: string[] = []; - for (const templateFile of templateFiles) { - const templatePath = path.join(templateDir, templateFile); - const content = fs.readFileSync(templatePath, "utf-8"); - if ( - content.includes("ATOMIC_POSITIONS") || - content.includes("ATOMIC_SPECIES") || - content.includes("CELL_PARAMETERS") - ) { - templatesToTest.push(templateFile); - } - } - - console.log(`Found ${templatesToTest.length} templates to generate fixtures for:`); - templatesToTest.forEach((t) => console.log(` - ${t}`)); - - // Generate fixtures - for (const templateFile of templatesToTest) { - try { - const template = env.getTemplate(templateFile); - const context = getContextForTemplate(templateFile); - const output = template.render(context); - const normalizedOutput = normalizeOutput(output); - - const fixturePath = path.join(fixtureDir, `${templateFile}.txt`); - fs.writeFileSync(fixturePath, normalizedOutput, "utf-8"); - console.log(`✓ Generated fixture: ${templateFile}.txt`); - } catch (error) { - console.error(`✗ Error generating fixture for ${templateFile}:`, error); - } - } - - console.log(`\nGenerated ${templatesToTest.length} fixture files in ${fixtureDir}`); - return templatesToTest; -} - -// Run the script -if (require.main === module) { - generateFixtures(); -} - -export { generateFixtures, getContextForTemplate, BASE_CONTEXT, NEB_CONTEXT }; From fe8064fac1eb8575dd747908c04b2effbbbf5a0f Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Mon, 23 Mar 2026 19:41:49 +0200 Subject: [PATCH 11/14] chore: add setupNunjucksEnvironment --- dist/js/utils/template.d.ts | 2 ++ dist/js/utils/template.js | 14 +++++++++ package-lock.json | 46 ++++++++++++++++-------------- package.json | 7 +++-- src/js/utils/template.ts | 14 +++++++++ tests/js/espressoTemplates.test.ts | 5 ---- 6 files changed, 58 insertions(+), 30 deletions(-) create mode 100644 dist/js/utils/template.d.ts create mode 100644 dist/js/utils/template.js create mode 100644 src/js/utils/template.ts diff --git a/dist/js/utils/template.d.ts b/dist/js/utils/template.d.ts new file mode 100644 index 00000000..ec93a936 --- /dev/null +++ b/dist/js/utils/template.d.ts @@ -0,0 +1,2 @@ +import type { Environment } from "nunjucks"; +export declare function setupNunjucksEnvironment(env: Environment): Environment; diff --git a/dist/js/utils/template.js b/dist/js/utils/template.js new file mode 100644 index 00000000..76618c34 --- /dev/null +++ b/dist/js/utils/template.js @@ -0,0 +1,14 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.setupNunjucksEnvironment = void 0; +const sprintf_js_1 = require("sprintf-js"); +const DEFAULT_FILTERS = { + sprintf: (value, format) => (0, sprintf_js_1.sprintf)(format, value), +}; +function setupNunjucksEnvironment(env) { + Object.entries(DEFAULT_FILTERS).forEach(([name, filter]) => { + env.addFilter(name, filter); + }); + return env; +} +exports.setupNunjucksEnvironment = setupNunjucksEnvironment; diff --git a/package-lock.json b/package-lock.json index 9a13ce17..4c3dedcd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,9 @@ "dependencies": { "cmd-ts": "^0.13.0", "js-yaml": "^4.1.0", - "lodash": "^4.17.21" + "lodash": "^4.17.21", + "nunjucks": "^3.2.4", + "sprintf-js": "^1.1.3" }, "devDependencies": { "@exabyte-io/eslint-config": "2025.5.13-0", @@ -28,6 +30,7 @@ "@types/js-yaml": "^4.0.5", "@types/mocha": "^10.0.1", "@types/node": "^20.4.2", + "@types/nunjucks": "^3.2.6", "@types/sprintf-js": "^1.1.4", "@typescript-eslint/eslint-plugin": "^5.56.0", "@typescript-eslint/parser": "^5.56.0", @@ -49,10 +52,8 @@ "eslint-plugin-simple-import-sort": "7.0.0", "lint-staged": "^12.1.2", "mocha": "10.3.0", - "nunjucks": "^3.2.4", "nyc": "^15.1.0", "prettier": "^2.7.1", - "sprintf-js": "^1.1.3", "ts-node": "^10.9.1", "typescript": "^4.5.5" }, @@ -3954,6 +3955,13 @@ "undici-types": "~6.21.0" } }, + "node_modules/@types/nunjucks": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@types/nunjucks/-/nunjucks-3.2.6.tgz", + "integrity": "sha512-pHiGtf83na1nCzliuAdq8GowYiXvH5l931xZ0YEHaLMNFgynpEqx+IPStlu7UaDkehfvl01e4x/9Tpwhy7Ue3w==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/semver": { "version": "7.7.1", "dev": true, @@ -4207,7 +4215,6 @@ }, "node_modules/a-sync-waterfall": { "version": "1.0.1", - "dev": true, "license": "MIT" }, "node_modules/acorn": { @@ -4363,7 +4370,7 @@ }, "node_modules/anymatch": { "version": "3.1.3", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", @@ -4521,7 +4528,6 @@ }, "node_modules/asap": { "version": "2.0.6", - "dev": true, "license": "MIT" }, "node_modules/assertion-error": { @@ -4660,7 +4666,7 @@ }, "node_modules/binary-extensions": { "version": "2.3.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -4680,7 +4686,7 @@ }, "node_modules/braces": { "version": "3.0.3", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -4894,7 +4900,6 @@ }, "node_modules/chokidar": { "version": "3.6.0", - "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -6362,7 +6367,7 @@ }, "node_modules/fill-range": { "version": "7.1.1", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -6651,7 +6656,7 @@ }, "node_modules/glob-parent": { "version": "5.1.2", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -6984,7 +6989,7 @@ }, "node_modules/is-binary-path": { "version": "2.1.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" @@ -7071,7 +7076,7 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -7122,7 +7127,7 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -7185,7 +7190,7 @@ }, "node_modules/is-number": { "version": "7.0.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.12.0" @@ -8448,7 +8453,7 @@ }, "node_modules/normalize-path": { "version": "3.0.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -8469,7 +8474,6 @@ "version": "3.2.4", "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.4.tgz", "integrity": "sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "a-sync-waterfall": "^1.0.0", @@ -8493,7 +8497,6 @@ }, "node_modules/nunjucks/node_modules/commander": { "version": "5.1.0", - "dev": true, "license": "MIT", "engines": { "node": ">= 6" @@ -9025,7 +9028,7 @@ }, "node_modules/picomatch": { "version": "2.3.1", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -9247,7 +9250,7 @@ }, "node_modules/readdirp": { "version": "3.6.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "picomatch": "^2.2.1" @@ -9870,7 +9873,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "dev": true, "license": "BSD-3-Clause" }, "node_modules/stop-iteration-iterator": { @@ -10223,7 +10225,7 @@ }, "node_modules/to-regex-range": { "version": "5.0.1", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "is-number": "^7.0.0" diff --git a/package.json b/package.json index 67cbb9f5..ab9b0425 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,9 @@ "dependencies": { "cmd-ts": "^0.13.0", "js-yaml": "^4.1.0", - "lodash": "^4.17.21" + "lodash": "^4.17.21", + "nunjucks": "^3.2.4", + "sprintf-js": "^1.1.3" }, "peerDependencies": { "@mat3ra/esse": "*" @@ -34,6 +36,7 @@ "@types/js-yaml": "^4.0.5", "@types/mocha": "^10.0.1", "@types/node": "^20.4.2", + "@types/nunjucks": "^3.2.6", "@types/sprintf-js": "^1.1.4", "@typescript-eslint/eslint-plugin": "^5.56.0", "@typescript-eslint/parser": "^5.56.0", @@ -55,10 +58,8 @@ "eslint-plugin-simple-import-sort": "7.0.0", "lint-staged": "^12.1.2", "mocha": "10.3.0", - "nunjucks": "^3.2.4", "nyc": "^15.1.0", "prettier": "^2.7.1", - "sprintf-js": "^1.1.3", "ts-node": "^10.9.1", "typescript": "^4.5.5" }, diff --git a/src/js/utils/template.ts b/src/js/utils/template.ts new file mode 100644 index 00000000..e79b09f0 --- /dev/null +++ b/src/js/utils/template.ts @@ -0,0 +1,14 @@ +import type { Environment } from "nunjucks"; +import { sprintf } from "sprintf-js"; + +const DEFAULT_FILTERS = { + sprintf: (value: unknown, format: string) => sprintf(format, value), +}; + +export function setupNunjucksEnvironment(env: Environment): Environment { + Object.entries(DEFAULT_FILTERS).forEach(([name, filter]) => { + env.addFilter(name, filter); + }); + + return env; +} diff --git a/tests/js/espressoTemplates.test.ts b/tests/js/espressoTemplates.test.ts index e457faf7..d104fa10 100644 --- a/tests/js/espressoTemplates.test.ts +++ b/tests/js/espressoTemplates.test.ts @@ -14,11 +14,6 @@ function setupNunjucksEnvironment(): nunjucks.Environment { ); const env = new nunjucks.Environment(new nunjucks.FileSystemLoader(templatePath)); - // Add custom filter for raw blocks (for JOB_WORK_DIR) - env.addFilter("raw", (str: string) => { - return str; - }); - // Add custom filter for sprintf-style formatting // eslint-disable-next-line @typescript-eslint/no-explicit-any env.addFilter("sprintf", (value: any, format: string) => { From 9647b51cec8c238d82ee504bb89e986e66644da3 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Mon, 23 Mar 2026 19:44:11 +0200 Subject: [PATCH 12/14] chore: tests --- tests/js/espressoTemplates.test.ts | 28 +++++++--------------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/tests/js/espressoTemplates.test.ts b/tests/js/espressoTemplates.test.ts index d104fa10..49299eb2 100644 --- a/tests/js/espressoTemplates.test.ts +++ b/tests/js/espressoTemplates.test.ts @@ -1,27 +1,9 @@ import { getRenderedTemplateFile, getTemplateContexts } from "@mat3ra/fixtures"; import { expect } from "chai"; -import * as nunjucks from "nunjucks"; +import { Environment, FileSystemLoader } from "nunjucks"; import * as path from "path"; -import { sprintf } from "sprintf-js"; -/** - * Set up nunjucks environment with custom filters - */ -function setupNunjucksEnvironment(): nunjucks.Environment { - const templatePath = path.join( - __dirname, - "../../assets/applications/input_files_templates/espresso", - ); - const env = new nunjucks.Environment(new nunjucks.FileSystemLoader(templatePath)); - - // Add custom filter for sprintf-style formatting - // eslint-disable-next-line @typescript-eslint/no-explicit-any - env.addFilter("sprintf", (value: any, format: string) => { - return sprintf(format, value); - }); - - return env; -} +import { setupNunjucksEnvironment } from "../../src/js/utils/template"; /** * Normalize template output for comparison @@ -83,7 +65,11 @@ const templateNames = [ ]; describe("Espresso Template Rendering", () => { - const env = setupNunjucksEnvironment(); + const templatePath = path.join( + __dirname, + "../../assets/applications/input_files_templates/espresso", + ); + const env = setupNunjucksEnvironment(new Environment(new FileSystemLoader(templatePath))); getTemplateContexts().forEach((context) => { templateNames.forEach((templateName) => { From 381d4b30de2d807c9b7fa2bdf4dcadc54da04576 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Mon, 23 Mar 2026 19:52:48 +0200 Subject: [PATCH 13/14] chore: export setupNunjucksEnvironment --- dist/js/index.d.ts | 7 ++++--- dist/js/index.js | 19 +++++++++---------- src/js/index.ts | 12 +++++------- 3 files changed, 18 insertions(+), 20 deletions(-) diff --git a/dist/js/index.d.ts b/dist/js/index.d.ts index dc95a8da..f954857f 100644 --- a/dist/js/index.d.ts +++ b/dist/js/index.d.ts @@ -1,3 +1,6 @@ +import methodTree from "./ui/methodTree.json"; +import modelTree from "./ui/modelTree.json"; +import baseUiSchema from "./ui/schemas.json"; export { Standata } from "./base"; export { MaterialStandata } from "./material"; export { ApplicationStandata } from "./application"; @@ -8,7 +11,5 @@ export { ApplicationMethodStandata } from "./applicationMethod"; export { ModelStandata } from "./model"; export { MethodStandata } from "./method"; export { ModelMethodFilter, filterMethodsByModel } from "./modelMethodFilter"; -import modelTree from "./ui/modelTree.json"; -import methodTree from "./ui/methodTree.json"; -import baseUiSchema from "./ui/schemas.json"; +export { setupNunjucksEnvironment } from "./utils/template"; export { modelTree, methodTree, baseUiSchema }; diff --git a/dist/js/index.js b/dist/js/index.js index 858f2c29..06445182 100644 --- a/dist/js/index.js +++ b/dist/js/index.js @@ -3,7 +3,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); -exports.baseUiSchema = exports.methodTree = exports.modelTree = exports.filterMethodsByModel = exports.ModelMethodFilter = exports.MethodStandata = exports.ModelStandata = exports.ApplicationMethodStandata = exports.ApplicationModelStandata = exports.workflowSubworkflowMapByApplication = exports.SubworkflowStandata = exports.WorkflowStandata = exports.PropertyStandata = exports.ApplicationStandata = exports.MaterialStandata = exports.Standata = void 0; +exports.baseUiSchema = exports.methodTree = exports.modelTree = exports.setupNunjucksEnvironment = exports.filterMethodsByModel = exports.ModelMethodFilter = exports.MethodStandata = exports.ModelStandata = exports.ApplicationMethodStandata = exports.ApplicationModelStandata = exports.workflowSubworkflowMapByApplication = exports.SubworkflowStandata = exports.WorkflowStandata = exports.PropertyStandata = exports.ApplicationStandata = exports.MaterialStandata = exports.Standata = void 0; +const methodTree_json_1 = __importDefault(require("./ui/methodTree.json")); +exports.methodTree = methodTree_json_1.default; +const modelTree_json_1 = __importDefault(require("./ui/modelTree.json")); +exports.modelTree = modelTree_json_1.default; +const schemas_json_1 = __importDefault(require("./ui/schemas.json")); +exports.baseUiSchema = schemas_json_1.default; var base_1 = require("./base"); Object.defineProperty(exports, "Standata", { enumerable: true, get: function () { return base_1.Standata; } }); var material_1 = require("./material"); @@ -27,12 +33,5 @@ Object.defineProperty(exports, "MethodStandata", { enumerable: true, get: functi var modelMethodFilter_1 = require("./modelMethodFilter"); Object.defineProperty(exports, "ModelMethodFilter", { enumerable: true, get: function () { return modelMethodFilter_1.ModelMethodFilter; } }); Object.defineProperty(exports, "filterMethodsByModel", { enumerable: true, get: function () { return modelMethodFilter_1.filterMethodsByModel; } }); -// @ts-ignore -const modelTree_json_1 = __importDefault(require("./ui/modelTree.json")); -exports.modelTree = modelTree_json_1.default; -// @ts-ignore -const methodTree_json_1 = __importDefault(require("./ui/methodTree.json")); -exports.methodTree = methodTree_json_1.default; -// @ts-ignore -const schemas_json_1 = __importDefault(require("./ui/schemas.json")); -exports.baseUiSchema = schemas_json_1.default; +var template_1 = require("./utils/template"); +Object.defineProperty(exports, "setupNunjucksEnvironment", { enumerable: true, get: function () { return template_1.setupNunjucksEnvironment; } }); diff --git a/src/js/index.ts b/src/js/index.ts index 571d0c37..2e5d5af6 100644 --- a/src/js/index.ts +++ b/src/js/index.ts @@ -1,3 +1,7 @@ +import methodTree from "./ui/methodTree.json"; +import modelTree from "./ui/modelTree.json"; +import baseUiSchema from "./ui/schemas.json"; + export { Standata } from "./base"; export { MaterialStandata } from "./material"; export { ApplicationStandata } from "./application"; @@ -12,12 +16,6 @@ export { ApplicationMethodStandata } from "./applicationMethod"; export { ModelStandata } from "./model"; export { MethodStandata } from "./method"; export { ModelMethodFilter, filterMethodsByModel } from "./modelMethodFilter"; - -// @ts-ignore -import modelTree from "./ui/modelTree.json"; -// @ts-ignore -import methodTree from "./ui/methodTree.json"; -// @ts-ignore -import baseUiSchema from "./ui/schemas.json"; +export { setupNunjucksEnvironment } from "./utils/template"; export { modelTree, methodTree, baseUiSchema }; From e8342d4d87a7a6c0774c43c259535481182933e7 Mon Sep 17 00:00:00 2001 From: Kostiantyn Dvornik Date: Tue, 24 Mar 2026 17:44:13 +0200 Subject: [PATCH 14/14] chore: move setUnitLinks to src --- dist/js/index.d.ts | 1 + dist/js/index.js | 4 +- dist/js/utils/unit.d.ts | 2 + dist/js/utils/unit.js | 39 +++++++++++++++++++ scripts/processors/utils/createSubworkflow.ts | 11 ++---- scripts/processors/utils/utils.ts | 32 --------------- src/js/index.ts | 1 + src/js/utils/unit.ts | 36 +++++++++++++++++ 8 files changed, 85 insertions(+), 41 deletions(-) create mode 100644 dist/js/utils/unit.d.ts create mode 100644 dist/js/utils/unit.js create mode 100644 src/js/utils/unit.ts diff --git a/dist/js/index.d.ts b/dist/js/index.d.ts index f954857f..e5e96839 100644 --- a/dist/js/index.d.ts +++ b/dist/js/index.d.ts @@ -12,4 +12,5 @@ export { ModelStandata } from "./model"; export { MethodStandata } from "./method"; export { ModelMethodFilter, filterMethodsByModel } from "./modelMethodFilter"; export { setupNunjucksEnvironment } from "./utils/template"; +export { setUnitLinks } from "./utils/unit"; export { modelTree, methodTree, baseUiSchema }; diff --git a/dist/js/index.js b/dist/js/index.js index 06445182..987c4e98 100644 --- a/dist/js/index.js +++ b/dist/js/index.js @@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); -exports.baseUiSchema = exports.methodTree = exports.modelTree = exports.setupNunjucksEnvironment = exports.filterMethodsByModel = exports.ModelMethodFilter = exports.MethodStandata = exports.ModelStandata = exports.ApplicationMethodStandata = exports.ApplicationModelStandata = exports.workflowSubworkflowMapByApplication = exports.SubworkflowStandata = exports.WorkflowStandata = exports.PropertyStandata = exports.ApplicationStandata = exports.MaterialStandata = exports.Standata = void 0; +exports.baseUiSchema = exports.methodTree = exports.modelTree = exports.setUnitLinks = exports.setupNunjucksEnvironment = exports.filterMethodsByModel = exports.ModelMethodFilter = exports.MethodStandata = exports.ModelStandata = exports.ApplicationMethodStandata = exports.ApplicationModelStandata = exports.workflowSubworkflowMapByApplication = exports.SubworkflowStandata = exports.WorkflowStandata = exports.PropertyStandata = exports.ApplicationStandata = exports.MaterialStandata = exports.Standata = void 0; const methodTree_json_1 = __importDefault(require("./ui/methodTree.json")); exports.methodTree = methodTree_json_1.default; const modelTree_json_1 = __importDefault(require("./ui/modelTree.json")); @@ -35,3 +35,5 @@ Object.defineProperty(exports, "ModelMethodFilter", { enumerable: true, get: fun Object.defineProperty(exports, "filterMethodsByModel", { enumerable: true, get: function () { return modelMethodFilter_1.filterMethodsByModel; } }); var template_1 = require("./utils/template"); Object.defineProperty(exports, "setupNunjucksEnvironment", { enumerable: true, get: function () { return template_1.setupNunjucksEnvironment; } }); +var unit_1 = require("./utils/unit"); +Object.defineProperty(exports, "setUnitLinks", { enumerable: true, get: function () { return unit_1.setUnitLinks; } }); diff --git a/dist/js/utils/unit.d.ts b/dist/js/utils/unit.d.ts new file mode 100644 index 00000000..bf5de4ea --- /dev/null +++ b/dist/js/utils/unit.d.ts @@ -0,0 +1,2 @@ +import type { WorkflowBaseUnitSchema } from "@mat3ra/esse/dist/js/types"; +export declare function setUnitLinks(units: T[]): T[]; diff --git a/dist/js/utils/unit.js b/dist/js/utils/unit.js new file mode 100644 index 00000000..a0760150 --- /dev/null +++ b/dist/js/utils/unit.js @@ -0,0 +1,39 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.setUnitLinks = void 0; +/** + * @summary set the head of an array of units + */ +function setUnitsHead(units) { + if (units.length > 0) { + units[0].head = true; + for (let i = 1; i < units.length; i++) { + units[i].head = false; + } + } + return units; +} +/** + * @summary Re-establishes the linked `next => flowchartId` logic in an array of units + */ +function setNextLinks(units) { + var _a; + const flowchartIds = units.map((u) => u.flowchartId); + for (let i = 0; i < units.length - 1; i++) { + if (!units[i].next) { + // newly added units don't have next set yet => set it + units[i].next = units[i + 1].flowchartId; + if (i > 0) + units[i - 1].next = units[i].flowchartId; + } + else if (!flowchartIds.includes((_a = units[i].next) !== null && _a !== void 0 ? _a : "")) { + // newly removed units may create broken next links => fix it + units[i].next = units[i + 1].flowchartId; + } + } + return units; +} +function setUnitLinks(units) { + return setNextLinks(setUnitsHead(units)); +} +exports.setUnitLinks = setUnitLinks; diff --git a/scripts/processors/utils/createSubworkflow.ts b/scripts/processors/utils/createSubworkflow.ts index df09ecd3..e54b57fa 100644 --- a/scripts/processors/utils/createSubworkflow.ts +++ b/scripts/processors/utils/createSubworkflow.ts @@ -24,6 +24,7 @@ import { import { type ApplicationConfig, ApplicationStandata } from "../../../src/js/application"; import { ApplicationMethodStandata } from "../../../src/js/applicationMethod"; +import { setUnitLinks } from "../../../src/js/utils/unit"; import { defaultAssertionUnit, defaultAssignmentUnit, @@ -34,13 +35,7 @@ import { dynamicSubworkflowsByApp, getSurfaceEnergySubworkflowUnits } from "./dy import ExecutionUnitConfigBuilder, { type ExecutionConfig, } from "./unitBuilders/ExecutionUnitConfigBuilder"; -import { - generateFlowChartId, - generateSubworkflowId, - setNextLinks, - setUnitsHead, - validateData, -} from "./utils"; +import { generateFlowChartId, generateSubworkflowId, validateData } from "./utils"; type UnitConfig = { type: T["type"]; @@ -270,7 +265,7 @@ export default function createSubworkflow(subworkflowData: SubworkflowData, cach }, }, } as SubworkflowSchema["model"], - units: setNextLinks(setUnitsHead(finalUnits)), + units: setUnitLinks(finalUnits), ...config?.attributes, }; diff --git a/scripts/processors/utils/utils.ts b/scripts/processors/utils/utils.ts index 31c53faf..202bce70 100644 --- a/scripts/processors/utils/utils.ts +++ b/scripts/processors/utils/utils.ts @@ -5,7 +5,6 @@ import type { BaseMethod, BaseModel, SubworkflowSchema, - WorkflowBaseUnitSchema, } from "@mat3ra/esse/dist/js/types"; import * as ajv from "@mat3ra/esse/dist/js/utils/ajv"; import { Utils } from "@mat3ra/utils"; @@ -65,34 +64,3 @@ export function generateSubworkflowId( return Utils.uuid.getUUIDFromNamespace(seed); } - -/** - * @summary set the head of an array of units - */ -export function setUnitsHead(units: T[]) { - if (units.length > 0) { - units[0].head = true; - for (let i = 1; i < units.length; i++) { - units[i].head = false; - } - } - return units; -} - -/** - * @summary Re-establishes the linked `next => flowchartId` logic in an array of units - */ -export function setNextLinks(units: T[]) { - const flowchartIds = units.map((u) => u.flowchartId); - for (let i = 0; i < units.length - 1; i++) { - if (!units[i].next) { - // newly added units don't have next set yet => set it - units[i].next = units[i + 1].flowchartId; - if (i > 0) units[i - 1].next = units[i].flowchartId; - } else if (!flowchartIds.includes(units[i].next ?? "")) { - // newly removed units may create broken next links => fix it - units[i].next = units[i + 1].flowchartId; - } - } - return units; -} diff --git a/src/js/index.ts b/src/js/index.ts index 2e5d5af6..408164a7 100644 --- a/src/js/index.ts +++ b/src/js/index.ts @@ -17,5 +17,6 @@ export { ModelStandata } from "./model"; export { MethodStandata } from "./method"; export { ModelMethodFilter, filterMethodsByModel } from "./modelMethodFilter"; export { setupNunjucksEnvironment } from "./utils/template"; +export { setUnitLinks } from "./utils/unit"; export { modelTree, methodTree, baseUiSchema }; diff --git a/src/js/utils/unit.ts b/src/js/utils/unit.ts new file mode 100644 index 00000000..09c2b74d --- /dev/null +++ b/src/js/utils/unit.ts @@ -0,0 +1,36 @@ +import type { WorkflowBaseUnitSchema } from "@mat3ra/esse/dist/js/types"; + +/** + * @summary set the head of an array of units + */ +function setUnitsHead(units: T[]) { + if (units.length > 0) { + units[0].head = true; + for (let i = 1; i < units.length; i++) { + units[i].head = false; + } + } + return units; +} + +/** + * @summary Re-establishes the linked `next => flowchartId` logic in an array of units + */ +function setNextLinks(units: T[]) { + const flowchartIds = units.map((u) => u.flowchartId); + for (let i = 0; i < units.length - 1; i++) { + if (!units[i].next) { + // newly added units don't have next set yet => set it + units[i].next = units[i + 1].flowchartId; + if (i > 0) units[i - 1].next = units[i].flowchartId; + } else if (!flowchartIds.includes(units[i].next ?? "")) { + // newly removed units may create broken next links => fix it + units[i].next = units[i + 1].flowchartId; + } + } + return units; +} + +export function setUnitLinks(units: T[]) { + return setNextLinks(setUnitsHead(units)); +}